2015-07-23 6 views
6

У меня есть ресурс маршрута Route::resource('projects', 'ProjectsController'); и когда я запускаю route:list Я вижу, что POST доступен.Laravel 5: Не удается POST для маршрутизации ресурса

+--------+----------+--------------------------+------------------+--------------------------------------------------------------+-----------------+ 
| Domain | Method | URI      | Name    | Action              | Middleware  | 
+--------+----------+--------------------------+------------------+--------------------------------------------------------------+-----------------+ 
|  | GET|HEAD | projects     | projects.index | App\Http\Controllers\[email protected]    | auth   | 
|  | POST  | projects     | projects.store | App\Http\Controllers\[email protected]    | auth   | 
|  | GET|HEAD | projects/create   | projects.create | App\Http\Controllers\[email protected]    | auth   | 
|  | GET|HEAD | projects/{projects}  | projects.show | App\Http\Controllers\[email protected]     | auth   | 
|  | PUT  | projects/{projects}  | projects.update | App\Http\Controllers\[email protected]    | auth   | 
|  | PATCH | projects/{projects}  |     | App\Http\Controllers\[email protected]    | auth   | 
|  | DELETE | projects/{projects}  | projects.destroy | App\Http\Controllers\[email protected]    | auth   | 
|  | GET|HEAD | projects/{projects}/edit | projects.edit | App\Http\Controllers\[email protected]     | 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') }}">

Извините, я нуб в Laravel!

+0

Кто бы ни проголосовал за закрытие моего вопроса, потому что это не в тему, объясните, пожалуйста, – Ronnie

+0

В ваших маршрутах указываются только методы 'GET' и' HEAD', как разрешено для '/ projects/create', но вы используете метод' POST' для отправки ваша форма. Отрегулируйте файл маршрутов, чтобы принять 'POST' тоже. – brezanac

+0

Я понимаю это сейчас, спасибо. @Zerp указал, что мое действие нужно указывать на просто '/ projects', чтобы я мог хранить – Ronnie

ответ

7

Вы должны быть POST Ввод URL ресурса, а не ресурса/создания.

Другими словами просто убедитесь, что действие вашей формы является action="/projects" не action="/projects/create"

Edit: Я оставлю это здесь, поскольку это своего рода отношение, и потому что я первоначально отправил это, но с предварительного предупреждения, что это излишний и много нерелевантного кода для кого-то, кто только начинает.

Например, вот лезвие отрывок из одного из моих сайтов:

@extends('layouts.master') 

@section('title', 'Create a Project') 

@section('content') 

    <h3>Create a Project</h3> 

    <hr/> 

    {!! Form::open(['action'=>'[email protected]']) !!} 

     @include('forms/partials/edit_form', ['submit_button_label' => 'Add Project']) 

    {!! Form::close() !!} 


    @include('errors.list') 

@endsection 
+0

Ах, вот и все! Я должен, вероятно, начать создавать свои формы, а не HTML. Спасибо @ Zerp. Я отвечу вам через 5 минут. – Ronnie

+0

Спасибо. Я бы рекомендовал серию «Laravel 5 Fundamentals» на laracasts.com, если вы хотите узнать больше. – Zerp

+0

Я действительно наблюдал за всеми ними пару месяцев назад, когда у меня было время простоя. Я фактически использую L5 в реальном проекте, поэтому я должен, возможно, следить за обновлением. – Ronnie

3

Laravel фактически использует method="POST" во всех <form> тегов.

Что вам нужно следующее:

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

DELETE могут быть заменены на другие HTTP глаголы тоже (PUT, PATCH, UPDATE и т.д.)

+0

Или вы можете использовать помощники формы, и он делает все, что для вас. – Kyle

+0

Можете ли вы рассказать о том, почему мне нужен DELETE, если я хочу что-то хранить в БД? – Ronnie

+0

У вас нет. Просто пример синтаксиса. Думал, что вы, возможно, были в замешательстве относительно того, как установить метод. Перечитывая вопрос, я думаю, что этот ответ довольно бессмыслен. – Kyle

0

я вижу, что с момента последнего ответа 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\AdminPhotosCon[email protected]'); 
Route::post('admin/photos/create', 'Admin\[email protected]'); 

Надежда, что помогает кому-то.

Смежные вопросы