lightframes / laravel-slugmaker
在单独的表中保存Eloquent模型时生成slug
v1.2.3
2023-04-03 15:44 UTC
Requires
- php: >=7.4.33
- illuminate/support: ^6.0|^7.0|^8.0|^9.0|^10.0
This package is auto-updated.
Last update: 2024-09-03 19:17:28 UTC
README
此包提供了一个特性,当保存任何Eloquent模型时,将在单独的表中生成唯一的slug。
slug使用Laravels的str_slug
方法生成,其中空格被转换为'-'。
安装
您可以通过composer安装此包
composer require lightframes/laravel-slugmaker
! 对于Laravel < v5.5
将ServiceProvider添加到config/app.php中的providers数组
Lightframes\SlugMaker\SlugMakerServiceProvider::class,
发布配置文件
php artisan vendor:publish --tag=slugmaker-config
发布迁移文件
php artisan vendor:publish --tag=slugmaker-migrations
并运行迁移
php artisan migrate
用法
配置
! 注意!您的模型不应该有一个名为"slug"的字段
您的Eloquent模型应该使用Lightframes\SlugMaker\ModelHasSlug
特性。
特性包含一个getSlugSourceFields()
方法,您必须自己实现。
此外,特性还包含用于与item-model关联item-slug的公共方法slug()
public function slug() { return $this->morphOne(\Lightframes\SlugMaker\Models\Slug::class, 'slugable'); }
以下是一个实现特性的示例
<?php namespace App\Models; use Lightframes\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" } }
获取并生成slug
您可以使用关系方法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 Lightframes\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获取更多关于最近更改的信息。
安全
如果您发现任何安全相关的问题,请通过电子邮件stefano.lebbolo@gmail.com报告,而不是使用问题跟踪器。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。