Boa tarde, estou com problema, não estou conseguindo salvar meu produto no banco, está dando problema de TokenMismatchException, mas no formulário eu já estou usando o input com csrf, para poder funcionar normal, porém continua da mesma maneira
Boa tarde, estou com problema, não estou conseguindo salvar meu produto no banco, está dando problema de TokenMismatchException, mas no formulário eu já estou usando o input com csrf, para poder funcionar normal, porém continua da mesma maneira
Thiago, você pode mandar a parte do código que é responsável por salvar o produto no banco? É legal você mandar do form até chegar no DAO.
Model
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Produto extends Model
{
//
protected $table = 'produtos';
protected $fillable = array('nome','descricao','quantidade','valor','tamanho','categoria_id');
public $timestamps = false;
}
Form
@extends('layout.principal')
@section('conteudo')
<div id="app">
<div class="container">
<br><br>
<form v-on:submit.prevent="enviaForm" method="post" action="store">
<input type="hidden" name="_token" value="{{{ csrf_token() }}}" />
<div class="form-group">
<label >Nome
<input class="form-control" v-model="produto.nome" type="text" name="nome">
</label>
</div>
<div class="form-group">
<label >Valor
<input class="form-control" v-model="produto.valor" type="text" name="valor">
</label>
</div>
<div class="form-group">
<label >Quantidade
<input class="form-control" v-model="produto.quantidade" type="text" name="quantidade">
</label>
</div>
<div class="form-group">
<label >Tamanho
<input class="form-control" v-model="produto.tamanho" type="text" name="tamanho">
</label>
</div>
<div class="form-group">
<label>Categoria</label>
<select class="form-control" v-model="produto.categoria_id" name="categoria_id" class="form-control">
<option value="1">111</option>
<option value="2">222</option>
<option value="3">333</option>
</select>
</div>
<div class="form-group">
<label>Descricao
<textarea class="form-control" v-model="produto.descricao" name="descricao"></textarea>
</label>
</div>
<button class="btn btn-primary" type="submit">Salvar</button>
</form>
</div>
</div>
<script src="/js/vue.min.js"></script>
<script src="/js/vueresource.min.js"></script>
<script src="/js/produtos/formadd.js"></script>
@stop
Controller
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Produto;
class pController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
return view('produto.lista');
}
public function lista()
{
//
return Produto::all();
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('produto.form');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
//dd($request->input('nome'));
Produto::create($request->all());
return redirect()->action('pController@index');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
Requisição Ajax usando o vue-resource
new Vue({
el:'#app',
data:{
produtos:{}
},
created: function(){
this.pegarForm();
},
methods:{
pegarForm(){
this.$http.get('http://127.0.0.1:8000/lista').then(res => res.json()).then(produtos => this.produtos = produtos);
//console.log(this.produtos);
}
}
});
oi, Thiago
Consegue conferir se nesse seu ajax, do vue-resource, o parametro _token está sendo enviado junto com os dados do produto na requisiçao?
Esse erro normalmente acontece quando:
1- o _token
não está sendo enviado
2- está indo com nome errado, algum espaço antes/depois do token, etc.
Se ainda assim não funcionar, pode passar mais detalhes sobre a sua versão do PHP e Laravel?
abracos
Ao atualizar o php e mudar do vue-resource para o axios deu tudo certo, vlw ai.