Laravel重定向或查看?

时间:2014-09-21 12:00:44

标签: php laravel laravel-4

我已经制作了一个联系表单,我想将用户发送到感谢页面或返回联系表单,并显示错误消息,说明缺少哪些字段需要填写。

最初我尝试过:

public function submit() {
    if (Input::has('name')) {
        $name = Input::get('name');
    } else {
        return Redirect::to('apply')->with('message', 'Login Failed');
    }
    $this->thanks($name);
}

public function thanks() {
    return View::make('apply.thanks', array('metaTitle' => 'Application Sent | Thank you'));
}

但这给了我一个错误。

所以我用[{1}}

替换了行$this->thanks($name);

它有效。

我的两个问题是:

这是将用户发送到感谢页面的正确方法吗?

如果出现错误,我想发回哪些错误(必填字段未填写)。这是如何实现的?


我试图实现路由名称:

路由文件

return Redirect::to('apply/thanks')->with('message', 'Login Failed');

申请文件

Route::post('apply/submit', array('as' => 'applicationSubmit', 'uses' => 'ApplyController@submit'));
Route::post('apply/thanks', array('as' => 'applicationThanks', 'uses' => 'ApplyController@thanks'));

但是我收到错误public function submit() { $validationErrors = array(); if (Input::has('name')) { $name = Input::get('name'); } else { $validationErrors[] = 'You must enter your name'; } if($validationErrors) { if(Request::ajax()){ } else { return Redirect::to('apply')->with('validationErrors', $validationErrors); } } else { if(Request::ajax()){ } else { return Redirect::route('applicationThanks')->with('name', $name); } } } (我发现了如何打开详细的错误消息:))

1 个答案:

答案 0 :(得分:1)

我想你想要这样的东西:

public function submit() {
    if (Input::has('name')) {
        $name = Input::get('name');
    } else {
        return Redirect::to('apply')->with('message', 'Login Failed');
    }
    return Redirect::to('thanks')->with('name', $name);
}

public function thanks() {
    return View::make('apply.thanks', array('metaTitle' => 'Application Sent | Thank you'));
}

当然,您需要定义到thanks的路线。

但是你可以在不使用thanks方法的情况下简化它:

public function submit() {
    if (Input::has('name')) {
        $name = Input::get('name');
        return View::make('apply.thanks', array('metaTitle' => 'Application Sent | Thank you'));
    }

    return Redirect::to('apply')->with('message', 'Login Failed');
}

我宁愿选择第二种方法(也不需要额外的重定向来显示视图)。

您还可以考虑使用named routes以防将来更改您的网址

修改

thanks的路由需要使用get方法而不发布,因为你重定向它(用户没有将表单数据发送到此路由),所以代替:

Route::post('apply/thanks', array('as' => 'applicationThanks', 'uses' => 'ApplyController@thanks'));

应该是:

Route::get('apply/thanks', array('as' => 'applicationThanks', 'uses' => 'ApplyController@thanks'));

我建议你看看Basic routing - 你应该真正理解动词和路由,如果你不在乎,你可以随时使用Route::any来匹配所有动词:POST,GET, PUT,PATCH和DELETE - 但在我看来,使用正确的动词并不是所有动词都更好。