Laravel4:使用put方法提交表单时路由missingMethod(解决了,我的错误)

时间:2014-02-11 02:30:41

标签: php laravel-4

我在这样的页面上制作表格:

{{ Form::open(array('method'=>'put', 'url'=>URL::to('users/update').'/'.Auth::user()->id, 'class'=>'form-horizontal')) }}

我尝试更新数据而不转到新页面(获取数据),然后在该页面上发布以进行更新。

然后我使用此路由来映射处理请求的方法:

Route::put('users/update/{id}', array('before'=>'csrf', 'uses'=>'UserController@updateProfile'));

但我得到的控制器缺少例外。

任何帮助都会感激不尽:)

修改

一些补充:如果我使用post方法而不是put,我仍然会得到 missingMethod 。如果我在路由中使用get方法并在表单提交时使用post方法,则提交的表单数据将会消失,然后抛出 tokenNotMatch 异常。

更新

UserController

中的一些相关代码
public function updateProfile($id)
{
    if (Auth::check() && $id == Auth::user()->id) {
        /*
        if (Request::ajax()) {
            Debugbar::info('ajax');
        }*/
        $input = array(
            'username' => Input::get('username'),
            'email' => Input::get('email')
        );
        $rules = array(
            'username' => 'required|min:4|unique:users',
            'email' => 'required|email|unique:users'
        );

        $validator = Validator::make($input, $rules);
        if ($validator->fails()) {
            return Redirect::refresh()->with('validator', $validator->messages()->all());
        } else {
            $this->user->username = $input['username'];
            $this->user->email = $input['email'];
            $this->user->save();
            return Redirect::refresh()->with('message', Lang::get('user/message.profile_updated'));
        }
    } else {
        return Redirect::to('users/login')->with('message', Lang::get('user/message.login_first'));
    }
}

路线信息(已添加)

当我使用post提交表单并在路线上设置帖子时,Debugbar生成的路由信息​​如下所示:

  • 主持人 -
  • uri GET users / {_ missing}
  • 名称 -
  • action UserController @ missingMethod
  • 之前 -
  • 之后 -

请求 GET ,为什么?

解决

感谢大家查看并回答了我的问题。抱歉,我犯了一个错误,在我的控制器中,当我在表单请求的页面上时,我使用Redirect::refresh()而不是Redirect::back()。因此,在完成发布请求后,它会请求 GET 处理此新请求。

无论如何,它让我更了解路线和其他东西。并非所有坏事。 ; - )

2 个答案:

答案 0 :(得分:1)

它的含义是您的控制器中没有updateProfile功能。或者你在某个地方有一个拼写错误,但它在UserController中找不到该功能。

答案 1 :(得分:0)

您的第一个问题是HTML表单除了GETPOST之外不支持任何表单方法。您可以看到规范here和另一个Programmers StackExchange解决方案here

可能导致持续错误的原因可能是您的routes.php文件仍在使用Route::put()而不是Route::post()。如果您希望它的工作方式,您的路由方法必须与您的表单方法匹配。如果您已正确更改了所有内容并仍然出现错误,您是否可以更新原始帖子中的所有信息以反映这一点?