Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

Duvida aula 6 parte 3

Verifiquei meu codigo e esta identico ao do professor, mas me volta o erro: "TokenMismatchException in VerifyCsrfToken.php line 67:" Quando tento adicionar um novo produto. Estou usando a versao 5.2 do Laravel.

11 respostas

Fábio

Posta o código da sua view, o controller e seu DAO por favor.

Codigo Formulario:

@extends('layout.principal')

@section('conteudo')

<div class="container">
<form action="/produtos/adiciona" method="post">

<inpu type="hidden" name="_token" value="{{csrf_token()}}">

<div class="form-group">

<label>Nome</label>
<input name="nome" class="form-control">
</div>

<div class="form-group">

<label>Valor</label>
<input name="valor" class="form-control">
</div>

<div class="form-group">

<label>Quantidade</label>
<input Quantidade name="quantidade" class="form-control">
</div>

<div class="form-group">

<label>Descricao</label>
<textarea name="descricao" class="form-control"></textarea>
</div>

<button class="btn btn-success" type="submit">Adicionar</button>

</form>
</div>

@stop"

codigo controller:

"<?php namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Request;

class ProdutoController extends Controller {

    public function lista(){
        $produtos = DB::select('select * from produtos');

       return view('produtos.listagem')->with('produtos', $produtos);
    }

    public function mostra(){
        $id = Request::route('id'); //o 1 ai esta setado como o padrao, caso nao passe parametro
        $produto = DB::select('select * from produtos where id = ?', [$id]);
        return view('detalhes')->with('p', $produto[0]);

    }

    public function novo(){
        return view('formulario');
    }


    public function adiciona(){
        $nome = Request::input('nome');
        $valor = Request::input('valor');
        $quantidade = Request::input('quantidade');
        $descricao = Request::input('descricao');


        DB::insert('insert into produtos (nome, quantidade, valor, descricao) values (?,?,?,?)', array($nome, $quantidade, $valor, $descricao));
        return view('adicionado')->with('nome', $nome);
    }
}

?>"

Oi Fabio

deve ser por causa do erro de syntax no HTML:

<inpu type="hidden" name="_token" value="{{csrf_token()}}">

está com inpu, sem o t do final (;

olá , para evitar erros de escrita sempre recomendo usar dessa forma

{{ csrf_field() }}

erro persiste "TokenMismatchException in VerifyCsrfToken.php line 67:"

coloca sua view aqui novamente e verifique se dentro do seu arquivo .env tem o app_key

fora isso, clica com o botão direito na janela do seu navegador e depois em "view page source".

Confere como está o input do _token na sua view, se ele está aparecendo, se está dentro do form, se não tem nada fora do normal.

@extends('layout.principal')

@section('conteudo')

Nome

Valor

Quantidade

Descricao

@stop

No meu .env tem sim a app_key

Reparei que ao atualizar a pagina o token nao muda.

@extends('layout.principal')

@section('conteudo')

<div class="container">
<form action="/produtos/adiciona" method="post">

<input type="hidden" name="_token" value=" {{ csrf_token() }} " />

<div class="form-group">

<label>Nome</label>
<input name="nome" class="form-control">
</div>

<div class="form-group">

<label>Valor</label>
<input name="valor" class="form-control">
</div>

<div class="form-group">

<label>Quantidade</label>
<input Quantidade name="quantidade" class="form-control">
</div>

<div class="form-group">

<label>Descricao</label>
<textarea name="descricao" class="form-control"></textarea>
</div>

<button class="btn btn-success" type="submit">Adicionar</button>

</form>
</div>

@stop
solução!

Oi Fábio

Repara que você está colocando um espaço em branco dentro do campo valuedo input:

value=" {{ csrf_token() }} "

Não pode ter esse espaço, se não o token fica com espaço ni inicio e final também. Experimenta assim:

value="{{csrf_token()}}"

Dessa forma funcionou. Obrigado Rodrigo :)