У меня есть ресурс 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') }}">
Извините, я noob to laravel!
Вы должны быть POST
на URL ресурса, а не ресурс / создать.
Другими словами, просто убедитесь, что действие вашей формы – action="/projects"
not 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 фактически использует method="POST"
во всех тегах <form>
.
Вам нужно следующее:
<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');
Надежда помогает кому-то.