How to keep the data already filled in the input after submitting a form?

5

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>
    
asked by anonymous 30.05.2016 / 05:50

1 answer

6

Use helper old , example:

<input type="text" name="setor" value="{{old('setor')}}">

In value put old in parentheses the same tag name as in this case is sector. If there is validation and return, the last value entered will be loaded.

In textarea it would look like this:

<textarea name="texto">{{old('texto')}}</textarea>

In select like this:

<label>Categoria</label>
<select class="form-control" name="categoria" id="categoria">
    <option value="null">Selecione uma categoria</option>
    @foreach($categorias as $row)
    <option @if(old('categoria')==$row->id) {{'selected="selected"'}} @endif value="{{ $row->id }}">
       {{ $row->nome }}
    </option>
    @endforeach
</select>

For your studies and upcoming forms html use this package it will mainly help you in select : laravelcollective / html .

    
30.05.2016 / 06:09