6
I’m using the PHP language and the Laravel Framework 5. In the form validation, if it contains a blank field or an unaccepted character size, clicking save shows the validation message, but the fields that were filled are empty. How to keep the data in the form after clicking save when some field is incorrect? Code below the form to register a product.
Productocontroller.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');
}
}
Produtorequest.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>
<script src="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>
In my case this did not serve, so I created a class that saves in its attributes the request data, then in the method I return the instance of this class to the view and display the data in the inputs
– Rafael Santana de Brito