使用变量重定向回URL

时间:2015-01-14 14:08:30

标签: oop laravel routes

我正在设置“你确认条款和条件吗?”用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但无法使其发挥作用。

2 个答案:

答案 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";
  }
}