3
respostas

Status 419 - Post editaNome

Olá pessoal,

Ao enviar o post para o editaNome estou recebendo o status 419 de retorno. O que estou fazendo errado?

index.blade.php

@extends('layout')

@section('cabecalho')
Séries
@endsection

@section('conteudo')
@if(!empty($mensagem))
<div class="alert alert-success">
{{$mensagem}}
</div>
@endif

<a href="{{ route ('form_criar_serie') }}" class="btn btn-dark mb-2">Adicionar</a>

<ul class="list-group">
    @foreach ($series as $serie)
        <li class="list-group-item d-flex justify-content-between align-items-center">
            <span id="nome-serie-{{ $serie->id }}">{{ $serie->nome }}</span>
            <div class="input-group w-50" hidden id="input-nome-serie-{{ $serie->id }}">
                <input type="text" class="form-control" value="{{ $serie->nome }}">
                <div class="input-group-append">
                    <button class="btn btn-primary" onclick="editarSerie({{ $serie->id }})">
                        <i class="fas fa-check"></i>
                    </button>
                    @csrf
                </div>
            </div>
            <span class="d-flex">
                <button class="btn btn-info btn-sm mr-1" onclick="toggleInput({{ $serie->id }})">
                        <i class="far fa-edit"></i>
                </button>
                <a href="/series/{{$serie->id}}/temporadas" class="btn btn-info btn-sm mr-1">
                    <i class="fas fa-external-link-alt"></i>
                </a>
                <form method="post" action="/series/remover/{{ $serie->id}}" onsubmit="return confirm('Tem certeza que deseja remover {{ addslashes( $serie->nome )}}?')">
                    @csrf
                    @method('DELETE')
                    <button class="btn btn-danger btn-sm">
                        <i class="far fa-trash-alt"></i>
                    </button>
                </form>
            </span>
        </li>
    @endforeach
</ul>
<script>
    function toggleInput(serieId) {
        const nomeSerieEl = document.getElementById(`nome-serie-${serieId}`);
        const inputSerieEl = document.getElementById(`input-nome-serie-${serieId}`);
        if (nomeSerieEl.hasAttribute('hidden')) {
            nomeSerieEl.removeAttribute('hidden');
            inputSerieEl.hidden = true;
        } else {
            inputSerieEl.removeAttribute('hidden');
            nomeSerieEl.hidden = true;
        }
    }
    function editarSerie(serieId) {
        let formData = new FormData();
        const nome = document
            .querySelector(`#input-nome-serie-${serieId} > input`)
            .value;
        const token = document
            .querySelector(`input[name="_token"]`)
            .value;
        formData.append('nome', nome);
        formData.append('_token', token);
        const url = `/series/${serieId}/editaNome`;
        fetch(url, {
            method: 'POST',
            body: formData
        }).then(() => {
            toggleInput(serieId);
            document.getElementById(`nome-serie-${serieId}`).textContent = nome;
        });
    }
</script> 
@endsection

web.php

<?php

Route::get('/series', 'SeriesController@index')->name('listar_series');
Route::get('/series/criar', 'SeriesController@create')->name('form_criar_serie');
Route::post('/series/criar', 'SeriesController@store');
Route::post('/series/{id}/editaNome', 'SeriesController@2');
Route::delete('/series/remover/{id}', 'SeriesController@destroy');
Route::get('/series/{serieid}/temporadas', 'TemporadasController@index');

SeriesController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Routing\Controller as BaseController;
use Illuminate\Http\Request;
use App\Serie;
//use App\Temporada;
//use App\Episodio;
use App\Http\Requests\SeriesFormRequest;
use App\Services\CriadorDeSeries;
use App\Services\RemovedorDeSeries;

class SeriesController extends Controller
{

    public function index(Request $request){
        $series = Serie::query()->orderBy('nome')->get();
        $mensagem = $request->session()->get('mensagem');
        return view('series.index', compact('series','mensagem'));

    }

    public function create()
    {
        return view('series.create');
    }

    public function store(SeriesFormRequest $request, CriadorDeSeries $criadorDeSerie)
    {
        $serie = $criadorDeSerie->criarSerie($request->nome, $request->qtd_temporadas, $request->ep_por_temporadas );
        $request->session()->flash('mensagem',"Série com id {$serie->id} e suas temporadas e episodios criada com sucesso: {$serie->nome}");
        return redirect()->route('listar_series');
    }

    public function destroy(Request $request, RemovedorDeSeries $removedorDeSeries)
    {
        $nomeSerie = $removedorDeSeries->removerSerie($request->id);
        $request->session()->flash('mensagem',"A Série $nomeSerie foi removida com sucesso");
        return redirect()->route('listar_series');
    }

    public function editaNome($id, Request $request)
    {
        $nomeNome = $request->nome;
        $serie = Serie::find($id);
        $serie->nome = $novoNome;
        $serie->save();
    }
}
3 respostas

Essa definição de rota está errada:

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

Desculpa Vinicius,

Eu havia colocado esse '2' apenas para teste. Na verdade está assim:

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

E continua dando o erro 419. O que será que é?

Você consegue colocar seu código no GitHub pra eu poder subir aqui no meu ambiente e testar?