我正在设置“你确认条款和条件吗?”用Laravel打印页面。用户必须选中该框,填写当前日期并提交。它们的URL将是类似的;
example.com/laravel/public/security-agreement/23823jdsjdsreuyr
23823jdsjdsreuyr
部分是针对该协议的表格中的唯一代码。
我的路线档案;
Route::get('/security-agreement/{code}', array('as' => 'security-agreement','uses' => 'SecurityAgreementController@getAgreement'));
Route::post('/security-agreement', array('as' => 'security-agreement','uses' => 'SecurityAgreementController@postAgreement'));
我的控制器;
public function getAgreement($code) {
$client_agreement = ClientAgreement::with('agreements')->where('code', '=', $code)->first();
$client = ClientAgreement::with('clients')->where('code', '=', $code)->first();
return View::make('contracts.index')
->with('client_agreement', $client_agreement)
->with('client', $client);
}
public function postAgreement() {
$validator = Validator::make(Input::all(), array(
'start_date' => 'required|date_format:Y-m-d',
'accept' => 'required|accepted'
));
if($validator->fails()) {
return Redirect::route('security-agreement')
->withErrors($validator);
} else {
print "success";
}
}
我的问题是......如果用户犯了错误(如果验证器失败),我该如何返回用户,并将代码保留在URL中?如果有更好的方法,我不会以这种方式结婚。我只是需要一种方法来使查找ID不可用。
我尝试了几种不同的方式来玩这些路线,并在$code
点连接Redirect::route
但无法使其发挥作用。
答案 0 :(得分:1)
Redirect::route()
会选择与您在路线上设置的变量重合的第二个参数,因此在postAgreement()
中,您需要执行类似return Redirect::route('security-agreement', array($code));
的操作并重定向用户返回到该路由,并在URL中正确设置代码。
如果您没有在该路线中没有代码,您可能希望将其添加为路线变量或甚至是页面上的隐藏输入,以便您可以通过Input::get('code')
获取它。
您也可以只使用return Redirect::back()
,并且应该将用户重定向回最后一页。
答案 1 :(得分:0)
这应该有效:
Route::post('/security-agreement/{code}', array('as' => 'security-agreement','uses' => 'SecurityAgreementController@postAgreement'));
public function postAgreement($code) {
$validator = Validator::make(Input::all(), array(
'start_date' => 'required|date_format:Y-m-d',
'accept' => 'required|accepted'
));
if($validator->fails()) {
return Redirect::route('security-agreement', $code)
->withErrors($validator);
} else {
print "success";
}
}