fomvasss/laravel-slugmaker

此包已弃用,不再维护。未建议替代包。

在单独的表中保存 Eloquent 模型时生成 slugs

1.1.2 2018-04-16 09:27 UTC

This package is auto-updated.

Last update: 2020-04-14 19:43:54 UTC


README

Latest Version on Packagist Software License Quality Score StyleCI Total Downloads

此包提供了一个特性,可以在保存任何 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)。请参阅 许可文件 以获取更多信息。