我有一个路由资源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');
希望对大家有所帮助。