2015-07-23 12 views
6

Ho una risorsa di percorso Route::resource('projects', 'ProjectsController'); e quando eseguo route:list, posso vedere POST disponibile.Laravel 5: Impossibile inviare il POST per instradare la risorsa

+--------+----------+--------------------------+------------------+--------------------------------------------------------------+-----------------+ 
| 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   | 
+--------+----------+--------------------------+------------------+--------------------------------------------------------------+-----------------+ 

Quando sono a /projects/create (mostra la mia forma) e ha colpito il mio pulsante di invio, ottengo un errore che dice:

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

E 'forse come mi sto definendo mio tag <form>? Non sto usando l'azione corretta?

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

Ho anche provato <form method="post" action="{{ url('projects/store') }}">

dispiace, io sono un noob a laravel!

+0

Chi ha votato per chiudere la mia domanda perché è fuori tema, spiegare – Ronnie

+0

I percorsi specificano solo i metodi 'GET' e' HEAD' come consentito per '/ projects/create' ma si sta utilizzando un metodo' POST' per inviare la tua forma. Regola il tuo file di rotte per accettare anche il 'POST'. – brezanac

+0

Capisco che ora, grazie. @Zerp ha sottolineato che la mia azione doveva puntare semplicemente a '/ projects' per poter memorizzare – Ronnie

risposta

7

È necessario immettere POST nell'URL della risorsa, non nella risorsa/nella creazione.

In altre parole basta assicurarsi che l'azione del modulo è action="/projects" non action="/projects/create"

Edit: Lascerò questo qui è una specie di rilevante, e perché mi originariamente pubblicato, ma con il preavviso che è un codice eccessivo e irrilevante per qualcuno che sta appena iniziando.

Per esempio, ecco un frammento della lama da uno dei miei siti:

@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

Ah, l'ha fatto! Probabilmente dovrei iniziare a creare le mie forme in questo modo piuttosto che in HTML. Grazie a @Zerp. Accetterò la tua risposta in 5 minuti. – Ronnie

+0

Grazie. Consiglierei la serie "Laravel 5 Fundamentals" su laracasts.com se stai cercando di saperne di più. – Zerp

+0

In realtà ho visto tutti loro un paio di mesi fa quando ho avuto dei tempi di inattività. In realtà sto usando L5 in un progetto reale ora quindi dovrei forse cercare un aggiornamento. – Ronnie

3

laravel lo utilizza method="POST" in tutte le <form> tag.

Quello che vi serve è la seguente:

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

DELETE possono essere sostituiti con gli altri verbi HTTP troppo (PUT, PATCH, UPDATE, ecc)

+0

Oppure potresti usare gli helper del modulo e fa tutto questo per te. – Kyle

+0

Puoi approfondire il motivo per cui avrei bisogno di DELETE se desidero memorizzare qualcosa nel DB? – Ronnie

+0

Non lo fai. Solo un esempio di sintassi. Pensavo che potresti essere stato confuso su come impostare il metodo. Rileggendo la domanda penso che questa risposta sia piuttosto inutile. – Kyle

0

vedo che dopo l'ultima risposta laravel ha stato aggiornato Ad ogni modo, mi sono imbattuto nello stesso problema oggi ed ecco come l'ho risolto.

Fondamentalmente il mio percorso assomiglia a questo ora:

// 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\[email protected]'); 
Route::post('admin/photos/create', 'Admin\[email protected]'); 

Speranza che aiuta qualcuno.

Problemi correlati