Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Não consigo editar uma serie no formulário

Pessoal, após execuatr os passos descritos no video... o nome da série é editado no formulário mas não é persistido no banco.

Notei que ele consegue fazer a requisição mapeada no route (Route::post('/series/{id}/editaNome', 'SeriesController@editaNome');)

No entanto, é dado um erro 500.

O codigo segue abaixo para melhor análise

https://github.com/DWA-GIT/controle_series

9 respostas

Danyllo, qual a mensagem de erro exibida?

Veja as imagens: https://ibb.co/bLMyJ8B e https://ibb.co/MfmhWfZ

Aparentemente ele esta chamando a rota corretamente. O controler tb esta sendo chamado... No entanto, a Serie não esta com o nome sendo alterado e persistido no banco.

Ele muda na visão. Mas após dar um "refresh" na pagina... ele volta ao antigo nome.

Vejam os trechos de código a seguir:

web.php

Route::get('/series', 'App\Http\Controllers\SeriesController@index') ->name('listar_series'); Route::get('/series/adicionar', 'App\Http\Controllers\SeriesController@create') ->name('form_criar_serie'); Route::post('/series/adicionar', 'App\Http\Controllers\SeriesController@store'); Route::post('/series/remover/{id}', 'App\Http\Controllers\SeriesController@destroy'); Route::delete('/series/remover/{id}', 'App\Http\Controllers\SeriesController@destroy'); Route::get('/series/{serieId}/{temporadas}', 'App\Http\Controllers\TemporadasController@index'); Route::post('/series/{id}/editaNome', 'SeriesController@editaNome');

SeriesController.php

public function editaNome(int $id, Request $request) { $novoNome = $request->name; $serie = Serie::find($id); $serie->name = $novoNome; $serie->save(); }

index.blade.php

Mas Danyllo, na resposta dessa requisição que retorna 500, provavelmente existe uma mensagem de erro. Se não tiver lá, com certeza no servidor web (console do artisan) tem. Qual a mensagem exibida?

Olá Vinícius,

Conferi isso. Não dá nenhum erro.

:-(

No post anterior eu mandei o código completo. Estou usando as versões mais atuais do PHP e Laravel

Para facilitar... reproduzi o erro nesse vídeo:

https://youtu.be/kyojmmx1fdI

Mas nesse vídeo você não mostrou a saída do artisan nem a resposta do endpoint editaNome.

Olá Vinicius, reitero que não tem saída. O código está disponível (https://github.com/DWA-GIT/controle_series). Você pode reproduzir o erro...

solução!

Olá Danyllo,

Uma dica é conferir também o arquivo storage/logs/laravel.log para ver se teve alguma mensagem de erro, e mesmo que não apareça nenhum erro no console do artisan é legal mostrar também (acho que não apareceu no vídeo porque tava gravando apenas uma janela). Nesse caso parece que é apenas a rota que foi definida sem passar o namespace completo do controller (como é a regra em novas versões do Laravel):

// Antes
Route::post('/series/{id}/editaNome', 'SeriesController@editaNome');

// Depois
Route::post('/series/{id}/editaNome', 'App\Http\Controllers\SeriesController@editaNome');

Tem um segundo erro no controller, esse column: e key: são apenas ajudas visuais da IDE não são parte do código, então basta apagar:

// Antes
$series = Serie::query()->orderBy(column: 'name')->get();
$mensagem = $request->session()->get(key: 'mensagem');

// Depois
$series = Serie::query()->orderBy('name')->get();
$mensagem = $request->session()->get('mensagem');

Obs.: Você não precisa chamar o query() no seu index, basta chamar o orderBy() direto: Serie::orderBy('name')->get();

Espero ter ajudado, se ainda tiver algum problema é só falar!

Muitissimo obrigado, Lucas.

O problema era o "namespace completo do controller"

Como estou numa versão recente... daí ele cobra!