Laravel 5:不能POST到路由资源


Laravel 5: Can't POST to route resource

我有一个路由资源Route::resource('projects', 'ProjectsController');,当我运行route:list时,我可以看到POST可用。

+--------+----------+--------------------------+------------------+--------------------------------------------------------------+-----------------+
| Domain | Method   | URI                      | Name             | Action                                                       | Middleware      |
+--------+----------+--------------------------+------------------+--------------------------------------------------------------+-----------------+
|        | GET|HEAD | projects                 | projects.index   | App'Http'Controllers'ProjectsController@index                | auth            |
|        | POST     | projects                 | projects.store   | App'Http'Controllers'ProjectsController@store                | auth            |
|        | GET|HEAD | projects/create          | projects.create  | App'Http'Controllers'ProjectsController@create               | auth            |
|        | GET|HEAD | projects/{projects}      | projects.show    | App'Http'Controllers'ProjectsController@show                 | auth            |
|        | PUT      | projects/{projects}      | projects.update  | App'Http'Controllers'ProjectsController@update               | auth            |
|        | PATCH    | projects/{projects}      |                  | App'Http'Controllers'ProjectsController@update               | auth            |
|        | DELETE   | projects/{projects}      | projects.destroy | App'Http'Controllers'ProjectsController@destroy              | auth            |
|        | GET|HEAD | projects/{projects}/edit | projects.edit    | App'Http'Controllers'ProjectsController@edit                 | auth            |
+--------+----------+--------------------------+------------------+--------------------------------------------------------------+-----------------+

当我在/projects/create(显示我的表单),并点击我的提交按钮,我得到一个错误说:

MethodNotAllowedHttpException in RouteCollection.php line 201:
  at RouteCollection->methodNotAllowed(array('GET', 'HEAD', 'PUT', 'PATCH', 'DELETE')) in RouteCollection.php line 188

也许我是如何定义我的<form>标签?我没有使用正确的动作吗?

<form method="post" action="">

我也试过<form method="post" action="{{ url('projects/store') }}">

对不起,我是个旅行新手!

您应该POST到资源url,而不是资源/创建。

换句话说就是确保表单的动作是action="/projects"而不是action="/projects/create"

编辑:我将把它留在这里,因为它是相关的,因为我最初发布了它,但预先警告它是多余的,并且对于刚开始的人来说有很多不相关的代码。

例如,下面是我的一个站点的刀片代码片段:

@extends('layouts.master')
@section('title', 'Create a Project')
@section('content')
    <h3>Create a Project</h3>
    <hr/>
    {!! Form::open(['action'=>'ProjectController@store']) !!}
        @include('forms/partials/edit_form', ['submit_button_label' => 'Add Project'])
    {!! Form::close() !!}

    @include('errors.list')
@endsection

Laravel实际上在所有的<form>标签中都使用了method="POST"

你需要的是:

<input type="hidden" name="_method" value="DELETE">

DELETE也可以用其他HTTP动词(PUT, PATCH, UPDATE等)代替

我看到自从上次回复Laravel已经更新了。不管怎样,我今天遇到了同样的问题,下面是我如何解决它的。

基本上我的路由现在看起来像这样:

// Resourcing routes: https://laravel.com/docs/5.3/controllers#resource-controllers
Route::resource('admin/photos', 'Admin'AdminPhotosController');
// need to do this to enable the store method on the following route (otherwise POST is on index when resourcing controllers)
Route::any('admin/photos/create', 'Admin'AdminPhotosController@create');
Route::post('admin/photos/create', 'Admin'AdminPhotosController@store');

希望对大家有所帮助。