我试图与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';
}
}
任何想法我怎样才能做到这一点?它甚至可能吗?
答案 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');
你可能会为你的案子写一个更好的正则表达式。