[英]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"
而不是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');
希望能幫助別人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.