如何重新路由资源以在Laravel 4中包含除$ id之外的其他字段

时间:2014-03-05 21:59:38

标签: php laravel laravel-4

我有一个资源控制着我的一个表“粉丝”。我有一个视图,显示每个相应的信息。这些网址现在是“url.com/fans/{$id}”,其中{$ id}是表格中行/对象的唯一ID。

我想维护这种关系,但我还想将url指向表中的另一列(另一个唯一标识符)。所以像“ulr.com/fans/{$new_column}”。

我如何重新路由此视图/网址,以便它看起来像那样?这就是我到目前为止所做的:

路线:

Route::resource('fans', 'FansController');

FansController:

public function show($id) {

$fan = Fan::find($id);
return View::make('fans.show', compact('fan'));

}      

所以最终,我希望“url.com/fans/{$id}”能够继续工作,但之后它会被重新路由到“url.com/fans/{$new_column}”。直接进入“url.com/fans/{$new_column”就应该留在那里。

1 个答案:

答案 0 :(得分:0)

如果您能够区分 id 和* new_column *之间的每个参数值,您可以使用 Route :: get声明粉丝路线的所有路线而不是 Route :: resource 并定义正则表达式路由约束,例如,如果您的 id 列仅包含数字且您的* new_column *列具有alpha值:

Route::get('fans/{new_column}', array('as' => 'anotherColumn', function($new_column)
{
    $fan = Fan::where('new_column','=',$new_column);
    return View::make('fans.show', compact('fan'));
}))
->where('new_column', '[A-Za-z]+');

Route::get('fans/{id}', function($id)
{
    // do something with $id or
    return Redirect::route('anotherColumn');
})
->where('id', '[0-9]+');

然后声明其余自动生成的资源路由。