Laravel 如何设置动态路由?

Laravel 如何设置动态路由?,laravel,laravel-4,Laravel,Laravel 4,假设我有一个博客模型,它有一个标题,我如何将每个博客设置为该签名: mywebsite.com/blogs/{blog title}-{blog id} 有推荐使用的软件包吗?还是我自己写?从哪里开始?我建议您使用类似mywebsite/blogs/id/title的url,并在routes.php中为blogs创建一个接受两个参数的路由 Route::get('/blogs/{id}/{title}', 'BlogController@blog'); 在控制器中 public functi

假设我有一个博客模型,它有一个标题,我如何将每个博客设置为该签名:

mywebsite.com/blogs/{blog title}-{blog id}

有推荐使用的软件包吗?还是我自己写?从哪里开始?

我建议您使用类似mywebsite/blogs/id/title的url,并在routes.php中为blogs创建一个接受两个参数的路由

Route::get('/blogs/{id}/{title}', 'BlogController@blog');
在控制器中

public function blog($title, $id)
{
    /**  in the function parameter it is not mandatory to catch both 
    *   just take the one which is required
    */
    Blog::where('id', '=', $id)->get();
}
当您想在视图中动态创建链接时,您可以通过

<a href="/blogs/{{$array->id}}/<?php echo Str::slug($array->title);?>">{{$array->title}}</a>


编辑后的答案刚刚看到您正在使用laravel 4,最简单的方法是使用斜杠(
/
)作为
博客标题
博客id
的分隔符。通过这种方式,您可以按如下方式定义路线:

Route::get('blogs/{title}/{id}', function($title, $id)
{
    // your code here
});
这样称呼它:
https://yourdomain.com/blogs/yourFirstTitle/1

否则,您可以通过如下方式定义路由来分解正在传递的以破折号分隔的参数:

Route::get('blogs/{titleAndId}', function($titleAndId)
{
    $params = explode("-", $titleAndId);
    $title = $params[0];
    $id = $params[1];

    // your code here
});
这样称呼它:
https://yourdomain.com/blogs/yourFirstTitle-1
。正如您所看到的,这不是很可读(代码和URI)


我强烈推荐第一个版本。当然,您也应该路由到控制器,但对于路由,示例应该让您开始。

如果您希望在laravel 5中使用它,所有内容都保持不变,您只需要在视图文件的顶部添加即可。我明白了,我想我会坚持使用laravel 4,因为大多数好的包都是针对laravel 4的,你认为呢?你应该不断地更新自己,你的代码不要停留在同一个框架版本上。我的朋友,我希望我可以轻松地迁移到Laravel5,大部分工作都是angularJS应用程序的后端