如何设置动态路由?

时间:2015-05-12 12:29:52

标签: laravel laravel-4

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

SELECT child_name, parent_id from children JoIN parenttable on Father_ID = parent_id 
UNION 
SELECT child_name, parent_id from children JoIN parenttable on Mother_ID = parent_id 

是否有推荐的套餐可供使用?或者我应该自己写?从哪里开始?

2 个答案:

答案 0 :(得分:2)

我建议你有一个像mywebsite / blogs / id / title这样的网址,并在你的routes.php中有一条接受两个参数的博客路径

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

答案 1 :(得分:0)

最简单的方法是使用斜杠(/)作为blog-titleblog-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)。

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