使用变量重定向回 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";
  }
}