16
respostas

The PUT method is not supported for this route. Supported methods: POST.

Prezados estou utilizando o mesmo formulário para criação e editar os dados . O Formulario de Criação funciona normalmente para gravar , mas quando vou alterar apresenta a mensagem citada acima e não consigo validar os campos com o mesmo FormRequest de criação ? .Estou usando um if para form alterar e criar.

@if(isset($processos)) 
    <form method="POST" action="{{route('processos.update')}}">

    @method('PUT')

    @else  
    <form method="post" action="{{route('processos.store')}}">
    @endif



          @csrf   
 public function update(ProcIntenoFormRequest $request)
    {

        echo "ESTOU AQUII";
        echo"<pre>";
        print($request);
    }
Route::get('processos/gravar','ProcInternoController@create')->name('form_gravar_processos');
Route::post('/processos/editar','ProcInternoController@edit')->name('form_editar_processos');
Route::post('processos/alterar','ProcInternoController@update')->name('processos.update');
16 respostas

Você criou a rota como post (Route::post) e está tentando enviar a requisição como PUT. Por isso não funciona. :-)

Então Vinicius deixa eu ser mais claro,pois ainda está dando erro. O meu formulário de criação e de edição são os mesmo certo ?

Para validar os campos também na alteração criei um novo formRequest certo ?? ou tenho que validar de outra maneira no UPDATE?

E quando clico no botão alterar não passa pela validação do FormRequest que eu criei e apresenta o seguinte erro : The GET method is not supported for this route. Supported methods: POST.

public function update(ProcInternoAlteraFormRequest $request, $id) {

    echo "ESTOU AQUII";
    echo"<pre>";
    print($request);
}
insira seu código aqui

Seu problema é essa linha:

Route::post('processos/alterar','ProcInternoController@update')->name('processos.update');

Troque por:

Route::put('/processos/alterar', 'ProcInternoController@update')->name('processos.update');

O erro que você está citando não tem nenhuma relação com a classe de Request criada.

:-)

Então Vinícius Muito obrigado pela ajuda , mas continua não validando o formulário de edição e olha que fiz do jeito que falou . Apresenta os seguintes erros :

The GET method is not supported for this route. Supported methods: POST. Illuminate\Routing\RouteCollection::methodNotAllowed :256 vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php:256

Eu Inspecionei o elemento do meu formulário e está reconhecendo o method PUT e também já fiz a alteração da minha rota.

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

 <input type="hidden" name="_token" value="JecNrLo7KliNFDRCukxd7YxegyJXhZtNh2teIo3z">   
public function update(ProcIntenoFormRequest $request, $id) 
{
    //print_r($_POST);   
    //echo "ESTOU AQUII";

}
Route::put('/processos/alterar/{$id}', 'ProcInternoController@update')->name('processos.update');

Vinícius vc pode me ajudar ainda ??Lembrando que sem o formRequest o UPDATE funciona normalmente

Fala, Rafael! Desculpa a demora. Esse post acabou se perdendo aqui.

Você consegue colocar seu código completo no github ou algum outro lugar onde eu possa testar?

SEGUE O PROJETO https://github.com/rafaeldenis/cja?files=1

O Form request funciona normalmente na inclusão , mas no UPDATE não e já fiz a rota de update como PUT

Rafael, eu ainda não rodei o proejto aqui, mas no seu código você tem um problema:

No parâmetro você tá esperando uma instância de ProcInternoFormRequest mas sua classe se chama ProcIntenoFormRequest. Está escrito errado, entende? Falta um r ali. rs

Corrige aí rapidinho e vê se resolve, enquanto eu vou subindo o ambiente aqui na minha máquina.

Aparentemente vc tá usando Oracle como banco e não colocou nenhum Dockerfile no GitHub, então fica difícil pra eu subir o ambiente rápido aqui. =/

Mas, tá aqui o erro, aparentemente: https://imgur.com/a/Dg3w5aA

Print

Então Vinicius contniua dando erro mesmo acertando o R . ERRO :Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException No Metodo store faz a validação no formulário e no update não que estranho. Abaixo meu formulário quando é alteração coloquei @method('PUT') e a minha rota de update

Route::put('/processos/alterar/{id}', 'ProcInternoController@update')->name('processos.update');
@if(isset($processos)) 
    <form method="POST" action="{{route('processos.update')}}">

    @method('PUT')

    @else  
    <form method="post" action="{{route('processos.store')}}">
    @endif

Você consegue subir um docker-compose.yml ou só um Dockerfile com o ambiente necessário pra eu testar aqui? Como você tá usando Oracle, fica difícil pra eu montar o ambiente pra testar.

Infelizmente ainda não tenho conhecimento no Docker garoto

Rafael, a menos que tenha algum javascript te redirecionando quando você faz o submit do formulário, eu realmente não estou entendendo o motivo pra você estar recebendo esse erro.

=/

Dá uma olhada nos logs do Laravel. Vê se você tá sendo direcionado pra rota correta.

Então meu garoto se eu tiro o FORM REQUEST e mando sem a validação faz a rotina de UPDATE normal , só não entra na validação.

Estou com uma suspeita , pois pesquisei e o programador com o mesmo problema do meu :

https://pt.stackoverflow.com/questions/352808/throw-new-methodnotallowedhttpexceptionothers-laravel-5-7-envio-de-formul%C3%A1ri

Ele fala que o jeito correto de passar a rota é dessa maneira ? Tá passando com um array os parametros vc viu ?

{!! Form::model($colaboration, array('route' => array('colaboradores.update', $colaboration->id))) !!} @method('PUT').

No meu código não estou utilizando o Form do blade será que pode ser isso ?

@if(isset($processos)) 
    <form  method="POST" action="{{route('processos.update', $processos[0]->numero_proc )}}">    

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

    @else  
    <form method="post" action="{{route('processos.store')}}"> 
    @endif     insira seu código aqui

Rafael, não custa tentar. Eu nunca esbarrei nesse erro, então tenta isso. Muda sua abertura de form pra usar a classe Form e vê se vai.