laravel 5.3 配置 Taggable 插件,實現打標籤功能

1.建立laravel項目,指定版本php

composer create-project laravel/laravel test_laravel 5.3.30 --prefer-dist

2.安裝插件laravel

composer require estgroupe/laravel-taggable "5.1.*"

3.在config/app.php的服務提供者中,加入git

EstGroupe\Taggable\Providers\TaggingServiceProvider::class,

4.導出插件的配置文件github

php artisan vendor:publish --provider="EstGroupe\Taggable\Providers\TaggingServiceProvider"

5.配置好數據庫信息,運行數據庫

php artisan migrate

6.建立本身的Tag.php文件數組

<?php
namespace App\Models;

use EstGroupe\Taggable\Model\Tag as TaggableTag;

class Tag extends TaggableTag
{
    // Model code go here
}

7.修改配置文件config/taggable.phpapp

'tag_model' => '\App\Models\Tag',
'is_tagged_label_enable' => true,

8.因爲這個插件是5.1版本的,裏面的有些方法已經被棄用,咱們須要對其進行修改:vendor/estgroupe/src/Model/ 兩個model文件,搜索lists 替換成pluckcomposer

lists => pluck

9.在運行時,會出現如下錯誤:ide

  Call to a member function normalizeTagName() on null函數

   通過調試,是Tag.php 這個model 的 $taggingUtility 變量爲NULL,修改方法以下:註釋構造函數的 
$this->taggingUtility = app(TaggingUtility::class);

  在這個類中,有定義$taggingUtility 的地方所有換成 app(TaggingUtility::class)

10.在這個插件依賴的 overtrue/pinyin 插件中,原版本升級以後有個函數進行了修改,在Util.php中,搜索 permlink,對其進行如下替換

permlink=>permalink

11.建立一個測試model

<?php

namespace App\Model;

use EstGroupe\Taggable\Taggable;
use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    use Taggable;
    protected $table = 'article';
}

12.進行測試

<?php

namespace App\Http\Controllers;

use App\Model\Article;
use \EstGroupe\Taggable\Model\Tag;

class Test extends Controller
{
    public function t1()
    {
        $article = Article::first();
        var_dump($article->is_tagged);
        $result = $article->tag('abc');
        var_dump($result);
        var_dump($article->is_tagged);
    }
}

 

 

 

附:article 數據表

CREATE TABLE `article` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `is_tagged` enum('yes','no') NOT NULL DEFAULT 'no',
  `content` varchar(100) DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

 

參考網址:

  https://laravel-china.org/topics/2123

  https://github.com/etrepat/baum

  https://github.com/etrepat/baum

 

多級標籤經過測試也能夠,可是參考網站的數組定義錯誤了,會出錯。

 

 若是修改了配置文件的表名,須要在Taggable.php文件的大概67行位置,改爲

        return $this->morphToMany(static::$taggingUtility->tagModelString(), 'taggable', config('taggable.taggables_table_name'));

否則,他會去尋找taggables表

相關文章
相關標籤/搜索