在slug中添加/附加单词

时间:2017-12-11 21:53:19

标签: php laravel laravel-5 eloquent

我试图与Laravel建立漂亮的联系。

我有带标签的帖子。我的标记帖子可通过localhost/tag-slug查看。我将标签slugs存储在数据库中。

我试图用一些单词附加并预先添加这些标题,以便我可以拥有类似的内容:

  • localhost/awesome-laravel-posts
  • localhost/best-php-posts

我可以使用它:

Route::get('/awesome-{tag}-posts', 'TagsController@index')->name('tag')

但是当标签slug包含-时,它会失败。

这是我的模特:

class Tag extends Model
{
    public function jobs()
    {
        return $this->belongsToMany(Post::class);
    }

    public function getRouteKeyName()
    {
        return 'slug';
    }
}

任何想法我怎样才能做到这一点?它甚至可能吗?

2 个答案:

答案 0 :(得分:0)

当然你可以做到。我推荐专用库,例如​​Eloquent Sluggable:https://github.com/cviebrock/eloquent-sluggable

安装:

composer require cviebrock/eloquent-sluggable:^4.3

用法:

use Cviebrock\EloquentSluggable\Sluggable;

class Post extends Model
{
    use Sluggable;

    /**
     * Return the sluggable configuration array for this model.
     *
     * @return array
     */
    public function sluggable()
    {
        return [
            'slug' => [
                'source' => 'title'
            ]
        ];
    }
}

在Laravel中为您的Eloquent模型轻松创建slu。

答案 1 :(得分:0)

您可以使用正则表达式来定义路由参数。你可以这样做,{tag}将匹配任何东西:

Route::get('/awesome-{tag}-posts', 'TagsController@index')
    ->where('tag', '.*')->name('tag');

你可能会为你的案子写一个更好的正则表达式。