Estou tentando fazer algo muito básico funcionar. Estou acostumado com CI e agora aprendendo Laravel 4, e seus documentos não estão facilitando! De qualquer forma, estou tentando criar um formulário de login e apenas garantir que os dados sejam postados com sucesso imprimindo-o no próximo formulário. Estou recebendo esta exceção:
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
e meu 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');
}
}
e as rotas tem:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
e, finalmente, minha visão login.php tem esta direção de formulário:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Qualquer ajuda será muito apreciada.
url
você está recebendo o erro?php artisan dump-autoload
?Respostas:
Você está recebendo esse erro porque está postando em uma
GET
rota.Gostaria de dividir o seu encaminhamento para
validate
em um separadoGET
ePOST
rotas.Novas rotas:
Então, seu método de controle pode ser apenas
fonte
Minha suspeita é que o problema está na definição de sua rota.
Você definiu a rota como uma
GET
solicitação, mas o formulário provavelmente está enviando umaPOST
solicitação. Mude sua definição de rota.Geralmente é uma prática melhor usar rotas nomeadas (ajuda a escalar se o método / classe do controlador mudar).
No formulário, use o seguinte
fonte
O problema é o que você está usando,
POST
mas na verdade você precisa executarPATCH
Para corrigir este addLogo depois da
Form::model
linhafonte
{{ method_field('PATCH') }}
em seu template.Isso ocorre porque você está postando dados por meio de um método get.
Ao invés de
Tente isto
fonte
Eu encontrei este problema tão bem e as outras respostas aqui foram úteis, mas eu estou usando um
Route::resource
que cuida deGET
,POST
e outras solicitações.No meu caso, deixei minha rota como está:
E simplesmente modifiquei meu formulário para submeter à
store
função em meuFilesController
Isso corrigiu o problema e achei que valia a pena apontar como uma resposta separada, já que várias outras respostas sugerem a adição de uma nova
POST
rota. Esta é uma opção, mas não é necessária.fonte
Normalmente
MethodNotAllowedHttpException
acontece quandoSuponha que você defina o
POST
arquivo de rota de solicitação, mas está enviando umaGET
solicitação para a rota.fonte
por padrão,
Form::open()
assume umPOST
método.você tem
GET
em suas rotas. altere-o paraPOST
na rota correspondente.ou se você quiser usar o
GET
método, adicione omethod
parâmetro.por exemplo
fonte
Encontrei o erro, o
problema era FORM METHOD
Deveria ser assim
fonte
No meu caso, eu estava enviando uma
POST
solicitaçãoHTTP
para um servidor onde havia configuradoNginx
para redirecionar todas as solicitações de porta80
para porta443
onde eu estava servindo o aplicativoHTTPS
.Fazer a solicitação à porta correta corrigiu diretamente o problema. No meu caso, tudo o que tive que fazer foi substituir
http://
na URL de solicitação para,https://
já que estava usando as portas padrão80
e443
respectivamente.fonte
Geralmente, há um erro no verbo HTTP usado, por exemplo:
PUT
Rota de chamada comPOST
pedidofonte
Meu problema não era que minhas rotas estavam configuradas incorretamente, mas que eu estava me referindo ao
Form
método errado (que copiei de um formulário diferente). Eu estava fazendo...(sem modelo especificado). Mas eu deveria estar usando o
open
método normal ...Porque o primeiro parâmetro para
model
esperar um modelo real, ele não estava recebendo nenhuma das minhas opções que eu estava especificando. Espero que isso ajude alguém que sabe que suas rotas estão corretas, mas algo mais está errado.fonte
Eu também tive o mesmo erro, mas tive uma correção diferente, no meu
XYZ.blade.php
:que me deu o erro - ainda não sei por quê - mas quando mudei para
Funcionou!
Achei que valia a pena compartilhar :)
fonte
Laravel às vezes não oferece suporte
{!! Form::open(['url' => 'posts/store']) !!}
por razões de segurança. É por isso que o erro aconteceu. Você pode resolver esse erro simplesmente substituindo o código abaixoCódigo de Erro Código
{!! Form::open(['url' => 'posts/store']) !!}
Correto
{!! Form::open(array('route' => 'posts.store')) !!}
fonte
No meu caso, foi porque meu formulário estava enviando para uma rota com um middleware diferente. Portanto, ele bloqueou o envio de informações para esta rota específica.
fonte
bem, quando eu tive esses problemas, encontrei 2 erros de código
eu corrigi fazendo isso
então, apenas para explicar, mudei a forma
model
paraopen
e também a rota onde foi colocada incorretamente entre colchetes.fonte
fonte