成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Laravel Taggable 為你的模型添加打標(biāo)簽功能

lucas / 619人閱讀

摘要:標(biāo)簽名稱規(guī)則說明標(biāo)簽名里的特殊符號和空格會被替代智能標(biāo)簽生成,會生成對應(yīng)的中文拼音,如標(biāo)簽,拼音一樣的時候會被加上隨機值標(biāo)簽名清理使用。

本文經(jīng)授權(quán)轉(zhuǎn)自 PHPHub 社區(qū)

功能說明

使用最簡便的方式,為你的數(shù)據(jù)模型提供強大「打標(biāo)簽」功能。

項目地址:https://github.com/summerblue/laravel-taggable

本項目修改于 rtconner/laravel-tagging 項目,增加了一下功能:

標(biāo)簽名唯一;

增加 etrepat/baum 依賴,讓標(biāo)簽支持無限級別標(biāo)簽嵌套;

中文 slug 拼音自動生成支持,感謝超哥的 overtrue/pinyin;

提供完整的測試用例,保證代碼質(zhì)量。

注意: 本項目只支持 5.1 LTS

此項目由 The EST Group 團隊的 @Summer 維護。

無限級別標(biāo)簽嵌套

集成 etrepat/baum 讓標(biāo)簽具備從屬關(guān)系。

$root = Tag::create(["name" => "Root"]);

// 創(chuàng)建子標(biāo)簽
$child1 = $root->children()->create(["name" => "Child1"]);

$child = Tag::create(["name" => "Child2"]);
$child->makeChildOf($root);

// 批量構(gòu)建樹
$tagTree = [
    "name" => "RootTag",
    "children" => [
        ["name" => "L1Child1",
            "children" => [
                ["name" => "L2Child1"],
                ["name" => "L2Child1"],
                ["name" => "L2Child1"],
            ]
        ],
        ["name" => "L1Child2"],
        ["name" => "L1Child3"],
    ]
];

Tag::buildTree($tagTree);

更多關(guān)聯(lián)操作請查看:etrepat/baum 。

標(biāo)簽名稱規(guī)則說明

標(biāo)簽名里的特殊符號和空格會被 - 替代;

智能標(biāo)簽 slug 生成,會生成 name 對應(yīng)的中文拼音 slug ,如:標(biāo)簽 -> biao-qian,拼音一樣的時候會被加上隨機值;

標(biāo)簽名清理使用:$normalize_string = EstGroupeTaggableUtil::tagName($name)。

Tag::create(["標(biāo)簽名"]);
// name: 標(biāo)簽名
// slug: biao-qian-ming

Tag::create(["表簽名"]);
// name: 表簽名
// slug: biao-qian-ming-3243 (后面 3243 為隨機,解決拼音沖突)

Tag::create(["標(biāo)簽 名"]);
// name: 標(biāo)簽-名
// slug: biao-qian-ming

Tag::create(["標(biāo)簽!名"]);
// name: 標(biāo)簽-名
// slug: biao-qian-ming
安裝說明: 安裝
composer require estgroupe/laravel-taggable "5.1.*"
安裝和執(zhí)行遷移

config/app.phpproviders 數(shù)組中加入:

"providers" => array(
    EstGroupeTaggableProvidersTaggingServiceProvider::class,
);
php artisan vendor:publish --provider="EstGroupeTaggableProvidersTaggingServiceProvider"
php artisan migrate

請仔細閱讀 config/tagging.php 文件。

創(chuàng)建 Tag.php

不是必須的,不過建議你創(chuàng)建自己項目專屬的 Tag.php 文件。


修改 config/tagging.php 文件中:

    "tag_model"=>"AppModelsTag",
加入 Taggable Trait

「標(biāo)簽狀態(tài)」標(biāo)示

Taggable 能跟蹤模型是否打過標(biāo)簽的狀態(tài):

// `no`
$article->is_tagged

// `yes`
$article->tag("Tag1");
$article->is_tagged;

// `no`
$article->unTag();
$article->is_tagged

// This is fast
$taggedArticles = Article::where("is_tagged", "yes")->get()

首先你需要修改 config/tagging.php 文件中:

"is_tagged_label_enable" => true,

然后在你的模型的數(shù)據(jù)庫創(chuàng)建腳本里加上:

increments("id");
            ...
            // Add this line
            $table->enum("is_tagged", array("yes", "no"))->default("no");
            ...
            $table->timestamps();
        });
    }
}
「推薦標(biāo)簽」標(biāo)示

方便你實現(xiàn)「推薦標(biāo)簽」功能,只需要把 suggest 字段標(biāo)示為 true

$tag = EstGroupeTaggableModelTag::where("slug", "=", "blog")->first();
$tag->suggest = true;
$tag->save();

即可以用以下方法讀?。?/p>

$suggestedTags = EstGroupeTaggableModelTag::suggested()->get();
重寫 Util 類?

大部分的通用操作都發(fā)生在 Util 類,你想獲取更多的定制權(quán)力,請創(chuàng)建自己的 Util 類,并注冊服務(wù)提供者:

namespace MyProjectProviders;

use EstGroupeTaggableProvidersTaggingServiceProvider as ServiceProvider;
use EstGroupeTaggableContractsTaggingUtility;

class TaggingServiceProvider extends ServiceProvider {

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton(TaggingUtility::class, function () {
            return new MyNewUtilClass;
        });
    }

}

然后在

注意 MyNewUtilClass 必須實現(xiàn) EstGroupeTaggableContractsTaggingUtility 接口。

使用范例
$article = Article::with("tags")->first(); // eager load

// 獲取所有標(biāo)簽
foreach($article->tags as $tag) {
    echo $tag->name . " with url slug of " . $tag->slug;
}

// 打標(biāo)簽
$article->tag("Gardening"); // attach the tag
$article->tag("Gardening, Floral"); // attach the tag
$article->tag(["Gardening", "Floral"]); // attach the tag
$article->tag("Gardening", "Floral"); // attach the tag

// 批量通過 tag ids 打標(biāo)簽
$article->tagWithTagIds([1,2,3]);

// 去掉標(biāo)簽
$article->untag("Cooking"); // remove Cooking tag
$article->untag(); // remove all tags

// 重打標(biāo)簽
$article->retag(["Fruit", "Fish"]); // delete current tags and save new tags
$article->retag("Fruit", "Fish");
$article->retag("Fruit, Fish");

$tagged = $article->tagged; // return Collection of rows tagged to article
$tags = $article->tags; // return Collection the actual tags (is slower than using tagged)

// 獲取綁定的標(biāo)簽名稱數(shù)組
$article->tagNames(); // get array of related tag names

// 獲取打了「任意」標(biāo)簽的 Article 對象
Article::withAnyTag("Gardening, Cooking")->get(); // fetch articles with any tag listed
Article::withAnyTag(["Gardening","Cooking"])->get(); // different syntax, same result as above
Article::withAnyTag("Gardening","Cooking")->get(); // different syntax, same result as above

// 獲取打了「全包含」標(biāo)簽的 Article 對象
Article::withAllTags("Gardening, Cooking")->get(); // only fetch articles with all the tags
Article::withAllTags(["Gardening", "Cooking"])->get();
Article::withAllTags("Gardening", "Cooking")->get();

EstGroupeTaggableModelTag::where("count", ">", 2)->get(); // return all tags used more than twice

Article::existingTags(); // return collection of all existing tags on any articles

如果你 創(chuàng)建了 Tag.php,即可使用以下標(biāo)簽讀取功能:

// 通過 slug 獲取標(biāo)簽
Tag::byTagSlug("biao-qian-ming")->first();

// 通過名字獲取標(biāo)簽
Tag::byTagName("標(biāo)簽名")->first();

// 通過名字數(shù)組獲取標(biāo)簽數(shù)組
Tag::byTagNames(["標(biāo)簽名", "標(biāo)簽2", "標(biāo)簽3"])->first();

// 通過 Tag ids 數(shù)組獲取標(biāo)簽數(shù)組
Tag::byTagIds([1,2,3])->first();

// 通過名字數(shù)組獲取 ID 數(shù)組
$ids = Tag::idsByNames(["標(biāo)簽名", "標(biāo)簽2", "標(biāo)簽3"])->all();
// [1,2,3]
標(biāo)簽事件

Taggable trait 提供以下兩個事件:

EstGroupeTaggableEventsTagAdded;

EstGroupeTaggableEventsTagRemoved;

監(jiān)聽標(biāo)簽事件:

Event::listen(EstGroupeTaggableEventsTagAdded::class, function($article){
    Log::debug($article->title . " was tagged");
});
單元測試

基本用例測試請見: tests/CommonUsageTest.php。

運行測試:

composer install
vendor/bin/phpunit --verbose
Thanks

Special Thanks to: Robert Conner - http://smartersoftware.net

overtrue/pinyin

etrepat/baum

Made with love by The EST Group - http://estgroupe.com/

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/21569.html

相關(guān)文章

  • 使用 Baum 嵌套集合模型來實現(xiàn) Laravel 模型的無限極分類

    摘要:本文經(jīng)授權(quán)轉(zhuǎn)自社區(qū)使用嵌套集合模型來實現(xiàn)模型的無限極分類說明大家通常都是使用遞歸實現(xiàn)無限極分類,都知道遞歸效率很低,下面推薦一個的擴展包,快速讓你的數(shù)據(jù)模型支持無限極樹狀層級結(jié)構(gòu),并且兼顧效率。 本文經(jīng)授權(quán)轉(zhuǎn)自 PHPHub 社區(qū) 使用 Baum 嵌套集合模型來實現(xiàn) Laravel 模型的無限極分類 說明 大家通常都是使用遞歸實現(xiàn)無限極分類,都知道遞歸效率很低,下面推薦一個 Larav...

    superPershing 評論0 收藏0
  • Laravel:使用Migrations

    摘要:首先利用創(chuàng)建一個可遷移的數(shù)據(jù)表模板,該命令運行后會在目錄下生成一個文件生成的文件包含和兩個方法,其中中是包含了添加表,添加列,添加索引等等一切的描述,比較簡單,就是刪除表,當(dāng)然里面還可以有一些其他邏輯中支持的數(shù)據(jù)表列類型,做個備注,暫時 1、首先利用artisan創(chuàng)建一個可遷移的數(shù)據(jù)表模板,該命令運行后會在database/migrations目錄下生成一個文件 php artisan...

    waltr 評論0 收藏0
  • Laravel Telescope:優(yōu)雅的應(yīng)用調(diào)試工具

    摘要:文章轉(zhuǎn)自視頻教程優(yōu)雅的應(yīng)用調(diào)試工具新擴展是由和開源的應(yīng)用的調(diào)試工具。計劃任務(wù)列出已運行的計劃任務(wù)。該封閉函數(shù)會被序列化為一個長字符串,加上他的哈希與簽名如出一轍該功能將記錄所有異常,并可查看具體異常情況。事件顯示所有事件的列表。 文章轉(zhuǎn)自:https://laravel-china.org/topics/19013視頻教程:047. 優(yōu)雅的應(yīng)用調(diào)試工具--laravel/telesco...

    MasonEast 評論0 收藏0
  • 人人必備的10個 Laravel 4 擴展包

    摘要:更多擴展包中有豐富的擴展包來幫你完成幾乎任何你想實現(xiàn)的功能。我們不能把所有的擴展包都整理出來,然而,這里還是列出了一些很有用的??傊銕缀蹩偸悄軌蛘业揭粋€擴展包可以解決你當(dāng)前的問題。 Laravel 是一個非常流行且簡單易用的PHP框架,它提供了很多基礎(chǔ)的工具(如 RESTful 路由、內(nèi)置的ORM、模版等)使你能夠快速的創(chuàng)建應(yīng)用。這意味著你可以花費更少的時間來建立應(yīng)用程序的模版,給...

    darkbug 評論0 收藏0
  • 13 個快速構(gòu)建 Laravel 后臺的擴展包

    摘要:值得一提的是擴展包不免費用于商業(yè)用途,作者用一種人類友好的方式說你使用這個擴展包就是應(yīng)該去掙錢的,而不是免費的去工作這個擴展包收費美元。除了這些,還有五個沒有全面的審查的擴展包。最后,還有三個優(yōu)質(zhì)的包選擇于。 showImg(https://segmentfault.com/img/remote/1460000012312105?w=2200&h=1125); 開發(fā)者們都是懶惰的,不,...

    MiracleWong 評論0 收藏0

發(fā)表評論

0條評論

lucas

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<