使用变量重定向回 URL
Redirect back to URL with variables
我正在使用 Laravel 设置一个 "Do you confirm to terms and conditions?" 类型的页面。用户必须选中该框,填写当前日期并提交。他们得到的 URL 类似于;
example.com/laravel/public/security-agreement/23823jdsjdsreuyr
23823jdsjdsreuyr
部分是 table 中针对该协议的唯一代码。
我的路线文件;
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";
}
}
我的问题是...如果用户犯了错误(如果验证器失败),我该如何 return 并将代码保存在 URL 中?如果有更好的方法,我不会采用这种方式。我只需要一种使查找 ID 不可猜测的方法。
我已经尝试了几种不同的方式来尝试使用路线并在 Redirect::route
点连接 $code
但无法让它工作。
Redirect::route()
采用第二个参数,该参数与您在路线上设置的变量一致,因此在 postAgreement()
中,您需要执行类似 return Redirect::route('security-agreement', array($code));
的操作使用 URL.
中正确设置的代码将用户重定向回该路由
如果您没有该路由中的代码,您可能希望将其添加为路由变量,甚至是页面上的隐藏输入,以便您可以通过 Input::get('code')
.
您也可以只使用 return Redirect::back()
,这会将用户重定向回最后一页。
这应该有效:
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";
}
}
我正在使用 Laravel 设置一个 "Do you confirm to terms and conditions?" 类型的页面。用户必须选中该框,填写当前日期并提交。他们得到的 URL 类似于;
example.com/laravel/public/security-agreement/23823jdsjdsreuyr
23823jdsjdsreuyr
部分是 table 中针对该协议的唯一代码。
我的路线文件;
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";
}
}
我的问题是...如果用户犯了错误(如果验证器失败),我该如何 return 并将代码保存在 URL 中?如果有更好的方法,我不会采用这种方式。我只需要一种使查找 ID 不可猜测的方法。
我已经尝试了几种不同的方式来尝试使用路线并在 Redirect::route
点连接 $code
但无法让它工作。
Redirect::route()
采用第二个参数,该参数与您在路线上设置的变量一致,因此在 postAgreement()
中,您需要执行类似 return Redirect::route('security-agreement', array($code));
的操作使用 URL.
如果您没有该路由中的代码,您可能希望将其添加为路由变量,甚至是页面上的隐藏输入,以便您可以通过 Input::get('code')
.
您也可以只使用 return Redirect::back()
,这会将用户重定向回最后一页。
这应该有效:
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";
}
}