fomvasss / laravel-slugmaker
此包已弃用,不再维护。未建议替代包。
在单独的表中保存 Eloquent 模型时生成 slugs
1.1.2
2018-04-16 09:27 UTC
Requires
- php: >=7.0.0
- illuminate/support: 5.2.*|5.3.*|5.4.*|5.5.*|5.6.*
This package is auto-updated.
Last update: 2020-04-14 19:43:54 UTC
README
此包提供了一个特性,可以在保存任何 Eloquent 模型时在单独的表中生成唯一的 slug。
slug 通过 Laravel 的 str_slug
方法生成,其中空格被转换为 '-'。
安装
您可以通过 composer 安装此包
composer require fomvasss/laravel-slugmaker
! 对于 Laravel < v5.5
将 ServiceProvider 添加到 config/app.php 中的 providers 数组
Fomvasss\SlugMaker\SlugMakerServiceProvider::class,
发布配置文件
php artisan vendor:publish --tag=slugmaker-config
发布迁移文件
php artisan vendor:publish --tag=slugmaker-migrations
并运行迁移
php artisan migrate
使用方法
配置
! 注意!您的模型不应该有名为 "slug" 的字段
您的 Eloquent 模型应使用 Fomvasss\SlugMaker\ModelHasSlug
特性。
特性包含一个名为 getSlugSourceFields()
的方法,您必须自己实现。
此外,特性还包含用于项目模型与项目 slug 关系的公共方法 slug()
public function slug() { return $this->morphOne(\Fomvasss\SlugMaker\Models\Slug::class, 'slugable'); }
以下是一个实现特性的示例
<?php namespace App\Models; use Fomvasss\SlugMaker\ModelHasSlug; use Illuminate\Database\Eloquent\Model; class Article extends Model { use ModelHasSlug; protected $with = ['slug']; /** * Get the default fields for generating the slug. */ public function getSlugSourceFields() { return ['id', 'name', 'created_at']; // "124-article-test-slug-2017-12-26-135705" } }
获取 & 生成 slugs
您可以使用关系方法 slug()
获取 slug
$article = Article::find(13); $slug = $article->slug->name;
或者使用模型中的以下作用域方法
getSlugName()
findBySlug($slug)
findOrFailBySlug($slug)
getBySlugs(array $slugs)
getArrayIdsBySlugs(array $slugs)
makeSlug(string $str = '')
例如
$slug = Article::find(13)->getSlugName(); $slug = Article::findBySlug('my-slug'); $slug = Article::getBySlugs(['my-slug-1', 'my-slug-2']); $slug = Article::getArrayIdsBySlugs(['my-slug-1', 'my-slug-2']);
使用函数辅助器
slug_get($slug)
slug_get_models($slugs, $class = null)
slug_get_id($slug, $class = null)
slug_get_ids($slugs, $class = null)
slug_get_grouped_class($attributes)
slug_make($model, $slug = '')
// 如果 $slug 为空 - 则使用getSlugSourceFields(): array
生成slug_delete($model)
使用 SlugHelper 类
$helper = new Fomvasss\SlugMaker\SlugHelper(); $helper->getModel($slug, $modelClass = null); $helper->getModels(array $slugs, $modelClass = null); $helper->getId($slug, $modelClass = null); $helper->getIds(array $slugs, $modelClass = null); $helper->getIdsGroupedByClass(array $attributes); $helper->makeForModel($model, $slug = ''); $helper->deleteByModel($model);
getIds()
返回数组
[ 1, 2, 8, 3 ]
$attributes = [ App\Models\Article::class => ['slug-article-name',], App\Models\Page::class => ['slug-page-name-1', 'slug-page-name-2'], App\Models\Product::class => 'slug-product-name', ];
getIdsGroupedByClass($attributes)
返回数组
[ 'App\Models\Article' => [1], 'App\Models\Page' => [2, 8], 'App\Models\Product' => [3], ]
变更日志
请参阅 CHANGELOG 以获取有关最近更改的更多信息。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 fomvasss@gmail.com 而不是使用问题跟踪器。
致谢
许可
MIT 许可证 (MIT)。请参阅 许可文件 以获取更多信息。