I'm using the PHP language and the Laravel Framework 5. In the validation of the form, if it contains some blank field or with sizes of characters not accepted, when clicking save the system shows the message of validation, however the fields that were filled up are blank. How to keep data in form after clicking save when any field is incorrect? Code below the form to register a product.
ProductController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\ProdutoRequest;
use App\Categoria;
use App\Produto;
class ProdutoController extends Controller
{
public function index(){
return view('produto', array('categorias' => Categoria::all(),
'produtos' => Produto::all()));
}
public function enviar(ProdutoRequest $request){
$produto = new Produto();
$produto->nome = $request->get('nome');
$produto->preco = $request->get('preco');
$produto->descricao = $request->get('descricao');
$produto->categoria_id = $request->get('categoria');
$produto->save();
return redirect('/produtos');
}
public function detalhe($id) {
$produto = Produto::find($id);
return view('produto_detalhe', array('produto' => $produto));
}
public function formEditar($id){
$produto = Produto::find($id);
$categorias = Categoria::all();
return view('produto_editar', array('produto' => $produto, 'categorias' => $categorias));
}
public function editar(ProdutoRequest $request){
$produto = Produto::find($request->get('id'));
$produto->nome = $request->get('nome');
$produto->preco = $request->get('preco');
$produto->descricao = $request->get('descricao');
$produto->categoria_id = $request->get('categoria');
$produto->save();
return redirect('/produtos');
}
public function excluir($id){
Produto::destroy($id);
return redirect('/produtos');
}
}
ProductRequest.php
<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
class ProdutoRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'nome' => 'min:3|max:100|required',
'preco' => 'required',
'descricao' => 'min:3|max:255|required',
'categoria_id' => 'required',
];
}
public function messages()
{
return[
'nome.required' => 'Preencha o nome',
'nome.min' => 'O nome deve ter no mínimo 3 caracteres',
'nome.max' => 'O nome deve ter no máximo 100 caracteres',
'preco.required' => 'Preencha o preço',
'descricao.required' => 'Preencha a descrição',
'descricao.min' => 'A descrição deve ter no mínimo 3 caracteres',
'descricao.max' => 'A descrição deve ter no máximo 255 caracteres',
'categoria_id.required' => 'Escolha uma categoria',
];
}
}
product.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Produtos</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
</head>
<body>
<div class="container-fluid">
<div class="jumbotron">
<h1>Produtos</h1>
</div>
@if(count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="row">
<div class="col-md-6 col-md-offset-3">
<form action="/produtos" method="POST">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<label>Nome</label>
<input type="text" name="nome" class="form-control" id="nome">
</div>
<div class="form-group">
<label>Preço</label>
<input type="text" name="preco" class="form-control" id="preco">
</div>
<div class="form-group">
<label>Descrição</label>
<textarea class="form-control" name="descricao" id="descricao"></textarea>
</div>
<div class="form-group">
<label>Categoria</label>
<select class="form-control" name="categoria" id="categoria">
<option value="null">Selecione uma categoria</option>
@foreach($categorias as $row)
<option value="{{ $row->id }}">
{{ $row->nome }}
</option>
@endforeach
</select>
</div>
<input type="submit" class="btn btn-primary" value="Salvar">
</form>
</div>
</div>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<table class="table table-striped">
<thead>
<tr>
<th>#</th>
<th>Nome</th>
<th>Preço</th>
<th>Categoria</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($produtos as $row)
<tr>
<th scope="row">{{ $row->id }}</th>
<td>{{ $row->nome }}</td>
<td>{{ $row->preco }}</td>
<td>{{ $row->categoria->nome }}</td>
<td><a class="btn btn-warning" href="/produtos/{{ $row->id }}/editar">Editar</a></td>
<td><button class="btn btn-danger btn-excluir" value="{{ $row->id }}">Excluir</button></td>
<td><a href="/produtos/{{ $row->id }}">Ver mais</a></td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script><scriptsrc="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script type="text/javascript" src="{{ URL::asset('js/scriptsProduto.js') }}"></script>
</body>
</html>