我的路线设置如下:
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
未定义。
答案 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'));