MethodNotAllowedHttpException laravel-4

时间:2013-07-06 09:41:10

标签: php forms exception laravel laravel-4

表格:

{{ Form::open(array('url' => 'user/create', 'files' => true)) }}

路线:

Route::resource('user', 'UserController');

UserController.php

  class UserController extends BaseController {

    public function index()
    {
        return 'hi11';
        //return View::make('home.index');
    }
    public function create()
    {
        return 'hi22';
        //return View::make('home.index');
    }

}

此代码给出了 Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException

4 个答案:

答案 0 :(得分:13)

我只想在这些方面添加我自己的发现......也许这会让其他人在我刚刚执行过的时候搔痒。

我也实现了Route :: resource机制。我无法弄清楚为什么我的创建工作但我的更新不是。事实证明,您不能完全重用相同的表单代码,执行更新的表单必须使用方法PUT或PATCH。为什么更新不能是POST超出我的范围。

也就是说,更新的开始表单标记必须如下所示:

Form::model($thing, array(
    'method' => 'PUT', 
    'route' => array('things.update', $thing->id)
    )

不指定方法=> PUT,你得到这个无用的错误。

答案 1 :(得分:3)

因为在您使用资源控制器的路径中,您只能使用文档http://laravel.com/docs/controllers#resource-controllers中描述的特定路径和操作。

user / create(UserController :: create)是您需要显示添加新用户的表单的地方。

用户的实际存储应该在用户/商店中完成,即您的表单必须将数据发送到UserController :: store()方法。

在您的情况下,如果您仅将表单发布到'url'=> 'user',这应该自动将数据发送到正确的方法。

答案 2 :(得分:2)

Laravel 4 resources have named routes - 只需使用:

{{ Form::open(array('route' => 'user.create', 'files' => true)) }}

答案 3 :(得分:0)

这就是我这样做的方式,它可以帮助某些人,可以改进,但这是主要的想法。

@if(isset($data))
    {{ Form::open(['route'=>['blog.update', isset($data) ? $data->slug : null],'method' => 'patch','role' => 'form', 'class' => 'blog-form form-horizontal']) }}
@else
    {{ Form::open(['route'=>'blog.store','role' => 'form', 'class' => 'blog-form form-horizontal']) }}
@endif