Próbuję uzyskać coś bardzo podstawowego do biegania. Jestem przyzwyczajony do CI, a teraz uczę się Laravel 4, a ich doktorzy nie ułatwiają tego! W każdym razie próbuję utworzyć formularz logowania i upewnić się, że dane zostały przesłane pomyślnie, drukując je w kolejnym formularzu. Otrzymuję ten wyjątek:
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
i mój MemberController.php:
public function index()
{
if (Session::has('userToken'))
{
/*Retrieve data of user from DB using token & Load view*/
return View::make('members/profile');
}else{
return View::make('members/login');
}
}
public function validateCredentials()
{
if(Input::post())
{
$email = Input::post('email');
$password = Input::post('password');
return "Email: " . $email . " and Password: " . $password;
}else{
return View::make('members/login');
}
}
a trasy mają:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
i wreszcie mój widok login.php ma ten kierunek formularza:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Każda pomoc będzie bardzo mile widziana.
url
otrzymujesz błąd?php artisan dump-autoload
?Odpowiedzi:
Otrzymujesz ten błąd, ponieważ publikujesz na
GET
trasie.Podzieliłbym twój routing
validate
na osobneGET
iPOST
trasy.Nowe trasy:
Wtedy twoja metoda kontrolera może być po prostu
źródło
Podejrzewam, że problem leży w twojej definicji trasy.
Zdefiniowałeś trasę jako
GET
żądanie, ale prawdopodobnie formularz wysyłaPOST
żądanie. Zmień definicję trasy.Generalnie lepszą praktyką jest używanie nazwanych tras (pomaga skalować, jeśli zmieni się metoda / klasa kontrolera).
W formularzu użyj następujących
źródło
Problem polega na tym, że używasz,
POST
ale w rzeczywistości musisz wykonać,PATCH
aby naprawić ten dodatekZaraz za
Form::model
liniąźródło
{{ method_field('PATCH') }}
w swoim szablonie.Dzieje się tak, ponieważ publikujesz dane za pomocą metody get.
Zamiast
Spróbuj tego
źródło
I napotkał ten problem, jak również i inne odpowiedzi tutaj były pomocne, ale używam
Route::resource
który opiekujeGET
,POST
oraz inne wnioski.W moim przypadku zostawiłem trasę tak, jak jest:
I po prostu zmodyfikowałem mój formularz, aby był zgodny z
store
funkcją w myFilesController
To rozwiązało problem i pomyślałem, że warto wskazać na osobną odpowiedź, ponieważ różne inne odpowiedzi sugerują dodanie nowej
POST
trasy. To jest opcja, ale nie jest to konieczne.źródło
Zwykle
MethodNotAllowedHttpException
dzieje się, gdyZałóżmy, że definiujesz
POST
plik trasy żądania, ale wysyłaszGET
żądanie do trasy.źródło
domyślnie
Form::open()
zakładaPOST
metodę.masz
GET
na swoich trasach. zmień go naPOST
w odpowiedniej trasie.lub jeśli chcesz użyć tej
GET
metody, dodajmethod
parametr.na przykład
źródło
Napotkałem błąd,
problem dotyczył FORMULARZA
Tak powinno być
źródło
W moim przypadku wysyłałem
POST
żądanieHTTP
do serwera, na którym ustawiłemNginx
przekierowanie wszystkich żądań do portu80
na port, na443
którym obsługiwałem aplikacjęHTTPS
.Wysłanie żądania do właściwego portu bezpośrednio rozwiązało problem. W moim przypadku, wszystko, co musiałem zrobić, to zastąpić
http://
w adresie URL żądania dohttps://
ponieważ używałem domyślne porty80
i443
odpowiednio.źródło
Generalnie występuje błąd w używanym czasowniku HTTP, np .:
PUT
Trasa dzwoniąca zPOST
prośbąźródło
Mój problem nie polegał na tym, że moje trasy były ustawione nieprawidłowo, ale na tym, że odwoływałem się do niewłaściwej
Form
metody (którą skopiowałem z innego formularza). Ja robiłem...(bez określonego modelu). Ale powinienem był użyć zwykłej
open
metody ...Ponieważ pierwszym parametrem, który
model
oczekiwał rzeczywistego modelu, nie był uzyskiwanie żadnej z moich opcji, które określałem. Mam nadzieję, że pomoże to komuś, kto wie, że ich trasy są prawidłowe, ale coś innego jest nie tak.źródło
Miałem również ten sam błąd, ale miałem inną poprawkę, w moim
XYZ.blade.php
miałem:co dało mi błąd - nadal nie wiem dlaczego - ale kiedy zmieniłem to na
Zadziałało!
Pomyślałem, że warto się tym podzielić :)
źródło
Laravel czasami nie obsługuje
{!! Form::open(['url' => 'posts/store']) !!}
ze względów bezpieczeństwa. Dlatego wystąpił błąd. Możesz rozwiązać ten błąd, zastępując poniższy kodKod błędu Kod
{!! Form::open(['url' => 'posts/store']) !!}
poprawny
{!! Form::open(array('route' => 'posts.store')) !!}
źródło
W moim przypadku było tak, ponieważ mój formularz wysyłał na trasę z innym oprogramowaniem pośredniczącym. Więc zablokował wysyłanie informacji na tę konkretną trasę.
źródło
dobrze, kiedy miałem ten problem, napotkałem 2 błędy kodu
poprawiłem to, robiąc to
więc żeby się rozpracować, zmieniłem formę
model
na,open
a także trasę, która została źle umieszczona w nawiasach kwadratowych.źródło
źródło