【发布时间】:2018-05-24 08:17:42
【问题描述】:
我正在构建我的第一个 Laravel 应用程序。我有属于不同类别的帖子。
我正在尝试为类别创建 SEO 友好的 URL /categories/category_name,而不在数据库中保存“slug”。
到目前为止,这是我带来的:
我的类别模型:
class Category extends Model
{
public function posts()
{
return $this->hasMany(Post::class);
}
public function getSlugAttribute(): string
{
return str_slug($this->name);
}
public function getUrlAttribute(): string
{
return action('CategoriesController@index', [$this->id, $this->slug]);
}
}
我的类别控制器
class CategoriesController extends Controller
{
public function index($id, $slug = '')
{
$posts = Category::findOrFail($id)->posts;
return view('index', compact('posts'));
}
}
我的路线:
Route::get('/categories/{slug}', 'CategoriesController@index')->name('category');
使用{{ $post->category->url }} 我会得到类似http://localhost/category/1?alpha 的信息,但它可以工作并显示相应的帖子。路由返回错误。
我如何搭上id? 并使路线正常运行?
提前感谢您的帮助!
【问题讨论】:
-
为什么不存储呢?无需每次都计算。