使用Laravel 4访问视图中的路径参数

时间:2014-02-23 17:30:41

标签: php laravel laravel-4 url-routing

我的路线设置如下:

Route::match(array('GET', 'POST'), '/reset-password/{code}', array('as' => 'reset-password-confirm', 'uses' => 'UserController@resetPasswordConfirm'));

在我的控制器中,我将路由参数传递给我的动作,如下所示:

public function resetPasswordConfirm($code)
{
    // ...
}

然后我可以照常在我的控制器中使用$code

在我看来,我正在构建一个POST到同一个控制器动作的表单,我需要以某种方式将$code放入视图中,以便构造正确的表单动作。目前我有这个:

{{ Form::open(array('route' => array('reset-password-confirm'))) }}

因为我没有提供$code路由参数,所以表单打开如下:

<form method="POST" action="http://site.dev/reset-password/%7Bcode%7D" accept-charset="UTF-8">

显然,这与我定义的路由(由于{code}不存在)不匹配,路由匹配失败。我需要以某种方式将route参数放入我的视图中,以便我可以将其与Form::open()一起使用。我试过这样做:

{{ Form::open(array('route' => array('reset-password-confirm', $code))) }}

但是这只会引发一个异常,说$code未定义。

2 个答案:

答案 0 :(得分:12)

parameter发送到视图的正确方法是:

return View::make('viewname')->with('code', $code);

或者您可以使用:

return View::make('yourview', compact('code'));

因此,$code将在您的视图中提供,您可以在表单中使用它,但您也可以使用以下方法访问视图中的parameter

// Laravel - Latest (use any one)
Route::Input('code');
Route::current()->getParameter('code');
Route::getCurrentRoute()->getParameter('code');

// Laravel - 4.0
Route::getCurrentRoute()->getParameter('code');

答案 1 :(得分:0)

也许我不清楚你的问题,但你可以定期将它传递给视图(因为你会传递任何其他变量,即。)

public function resetPasswordConfirm($code)
{
    return View::make('yourview')->with('code', $code);
}

并在视图中定义$ code:

{{ Form::open(array('route' => array('reset-password-confirm', $code))) }}

直接在您的视图中从Request对象中捕获它:

{{ Form::open(array('route' => array('reset-password-confirm', Request::segment(2) ))) }}

顺便说一句,我认为你也可以这样写你的路线:

Route::any('reset-password/{code}', array('as' => 'reset-password-confirm', 'uses' => 'UserController@resetPasswordConfirm'));