Laravel request validation

Asked

Viewed 7,692 times

1

Well I’m having problems with validations on laravel, in real it is validating correctly but need to inform the user which field X is required or not.

Today the system simply sends to same screen cleaning all my form this would not be ideal for me.

I need my program to inform the fields that are failing so stay in the same location with the data filled in yet.

I have a partilview where I show these massages:

<div id="alert-box" class="alert alert-danger"{!! $errors->any() ? '' : "style='display: none'" !!}>

<b>Ops...</b>
 <ul>
    @if($errors->any())
        @foreach($erros->any() as $erro)
            <li>{{$erro}}</li>
        @endforeach
    @endif
 </ul>
</div>
@if(Session::has('flash_message'))
    <div class="alert alert-success">
        <i class="icon fa fa-check"></i>
        {{Session::get('flash_message')}}
        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
    </div>
@endif

On the pages where I want this validation to appear I simply do:

@include('shared.alert')

In my model I have the store function that would save my data she, I programmed so:

public function store(ProdutoRequest $resquest){
    $produto = Produto::create($resquest->all());
    session()->flash('flash_message', 'Produto criado com sucesso');
    $produtos = Produto::all();

    if(Request::wantsJson()){
        return $produto;
    }else{
        return view('Produto.listProduto', compact('produtos'));
    }
}

The cool that inside her I use the session-flash and it works perfectly but for the mistakes not.

Ja mine ProdutoRequest I programmed it like this:

class ProdutoRequest extends Request
{
   public function authorize()
   {
       return true;
   }

   public function rules()
   {
     return [
        'CdSubCategoria' => 'required',
        'NmProduto' => 'required|min:1',
        'VlUnit' => 'required|min:1',
        'FlgDescontinuado' => 'required',
        'FlgProdutoVisivel' => 'required',
        'FlgPontua' => 'required',
     ];
   }
}

my view form:

@include('shared.alert')
{{dump($errors)}}
<div class="box-body">
    <div class="form-group{{ $errors->has('CdSubCategoria') ? ' has-error' : '' }}">
        {!! Form::label('nmSubCategoria', 'Sub Categoria') !!}
        {!! Form::select('CdSubCategoria', $subcategorias , $produto->CdSubCategoria, ['class' => 'form-control select2']) !!}
    </div>
    <div class="form-group{{ $errors->has('NmProduto') ? ' has-error' : '' }}">
        {!! Form::label('nmProduto', 'Nome do produto') !!}
        {!! Form::text('NmProduto', null, ['class' => 'form-control nomeProduto']) !!}
    </div>
    <div class="form-group{{ $errors->has('DscProduto') ? ' has-error' : '' }}">
        {!! Form::label('dscProduto', 'Descrição do produto') !!}
        {!! Form::textarea('DscProduto', null, ['class' => 'form-control', 'id' => 'editor1']) !!}
    </div>
    {!! Form::label('vlProduto', 'Valor') !!}
    <div class="form-group{{ $errors->has('VlUnit') ? ' has-error' : '' }}">
        <div class="input-group">
            <span class="input-group-addon">R$</span>
            {!! Form::text('VlUnit', null, ['class' => 'form-control','data-inputmask' => '"mask": "999.99"', 'data-mask']) !!}
            <?php echo $errors->first('VlUnit'); ?>
        </div>
    </div>
    <div class="form-group">
        {!! Form::label('flgAdicionarEstoque', 'Adicionar estoque?') !!}
        {!! Form::radio('FlgAdicionarEstoque', '1', false, ['class' => 'form-control estoqueVisivel minimal']) !!}
        {!! Form::label('flgAdicionarEstoque', 'Sim') !!}
        {!! Form::radio('FlgAdicionarEstoque', '0', true, ['class' => 'form-control estoqueVisivel Inativo minimal']) !!}
        {!! Form::label('flgAdicionarEstoque', 'Não') !!}
    </div>
    <div class="camposEstoque">
        <div class="form-group">
            {!! Form::label('qtdEmEstoque', 'Estoque') !!}
            {!! Form::number('UnitEmEstoque', null, ['class' => 'form-control']) !!}
        </div>
    </div>
    <div class="form-group">
        {!! Form::label('flgDescontinuado', 'Produto descontinuado ?') !!}
        {!! Form::radio('FlgDescontinuado', '1', false, ['class' => 'form-control minimal']) !!}
        {!! Form::label('flgDescontinuado', 'Sim') !!}
        {!! Form::radio('FlgDescontinuado', '0', true, ['class' => 'form-control Inativo minimal']) !!}
        {!! Form::label('flgDescontinuado', 'Não') !!}
    </div>
    <div class="form-group">
        {!! Form::label('flgProdutoVisivel', 'Produto visivel ?') !!}
        {!! Form::radio('FlgProdutoVisivel', '1', false, ['class' => 'form-control produtoVisivel minimal']) !!}
        {!! Form::label('flgProdutoVisivel', 'Sim') !!}
        {!! Form::radio('FlgProdutoVisivel', '0', true, ['class' => 'form-control produtoVisivel Inativo minimal']) !!}
        {!! Form::label('flgProdutoVisivel', 'Não') !!}
    </div>
    <div class="camposVisivel">
        <div class="form-group">
            {!! Form::label('visivel_Ini', 'Inicio da visualização') !!}
            {!! Form::datetime('Visivel_Ini', \Carbon\Carbon::create()->format('d/m/Y H:i:s'), ['class' => 'form-control datepicker', 'id' => 'datInic']) !!}
        </div>
        <div class="form-group">
            {!! Form::label('visivel_Fim', 'Fim da visualização') !!}
            {!! Form::datetime('Visivel_Fim', null, ['class' => 'form-control datepicker']) !!}
        </div>
    </div>

    <div class="form-group">
        {!! Form::label('flgPontua', 'Produto pontua ?') !!}
        {!! Form::radio('FlgPontua', '1', false, ['class' => 'form-control FlgPontua minimal']) !!}
        {!! Form::label('flgPontua', 'Sim') !!}
        {!! Form::radio('FlgPontua', '0', true, ['class' => 'form-control FlgPontua Inativo minimal']) !!}
        {!! Form::label('flgPontua', 'Não') !!}
    </div>
    <div class="camposExtras">
        <div class="form-group">
            {!! Form::label('qtdPontos', 'Quantos pontos ?') !!}
            {!! Form::number('QtdPontos', null, ['class' => 'form-control']) !!}
        </div>
        <div class="form-group">
            {!! Form::label('maxPontosPorSubCategoria', 'máximo de pontos ?') !!}
            {!! Form::number('MaxPontosPorSubCategoria', null, ['class' => 'form-control']) !!}
        </div>
    </div>
    <div class="form-group">
        {!! Form::submit($submitButton, ['class' => 'btn btn-success']) !!}
        {!! link_to_route('produtos.index', 'Voltar', '', ['class' =>  'btn btn-warning' ]) !!}
    </div>
</div>
<!-- /.box-body -->

And here’s my main view:

@section('conteudo')
<div class="box box-primary">
    <div class="box-header with-border">
        <h3 class="box-title">Cadastro de <a  class="nameCadastro">produtos</a></h3>
        </div>
        <!-- /.box-header -->
        <!-- form start -->
        {!! Form::open(['route' => 'produtos.store', 'id' => 'produtos-form']) !!}
            @include('Produto.form', array('submitButton' => 'Enviar'))
        {!! Form::close()  !!}
    </div>
@stop

What’s missing for me? How to get to the point I need, specified in bold ?

1 answer

1


I don’t quite know how it was set up your Framework Laravel, but, I will try to clarify with an example:

ChamadoRequest

In class ChamadoRequest has validation for nome that is obligatory and email that is obligatory and it has to be a valid email.


<?php

namespace App\Http\Requests;

use App\Models\Pedido;
use Illuminate\Foundation\Http\FormRequest;

class ChamadoRequest extends FormRequest
{   
    public function authorize()
    {
        return true;
    }
    public function rules()
    {
        return [            
            'nome' => 'required',
            'email' => 'required|email'
        ];
    }
    public function messages()
    {
        return [            
            'nome.required' => 'O nome do cliente é requerido',
            'email.required' => 'O e-mail do cliente é requerido',
            'email.email' => 'O e-mail é inválido'
        ];
    }
}

controller ChamadoRequest


In the controller ChamadoController in the method save, make the class injection ChamadoRequest, which will have a key role of testing the data before executing this method, if it is not satisfactory it goes back to View with the mistakes

public function save(ChamadoRequest $request)
{
    //operações
    return redirect()->route('chamados.index');
}

View index.blade.php


@extends('layout._layout')
@section('content')
    <h3>Cadastro de Chamados</h3>    
    @include('errors',['errors'=>$errors])
    <hr />
    {{ Form::open(array('route' => 'chamados.save', 'role'=>'form', 'id' =>'form1','name' =>'form1' )) }}    
    <hr />
    <div class="form-group has-feedback">
        {{ Form::label('email', 'E-mail do cliente:', array('class' => 'awesome')) }}
        {{ Form::text('email', old('email'), array('class'=>'form-control','placeholder'=>'E-mail do cliente', 'maxlength' => '70')) }}
        <?php echo $errors->first('email'); ?>
    </div>
    <div class="form-group has-feedback">
        {{ Form::label('nome', 'Nome do cliente:', array('class' => 'awesome')) }}
        {{ Form::text('nome', old('nome'), array('class'=>'form-control','placeholder'=>'Nome do cliente','maxlength'=>'50')) }}
        <?php echo $errors->first('nome'); ?>
    </div>
    <hr />
    <button type="submit" class="btn btn-success"><span class="glyphicon glyphicon-save"></span> Salvar</button>
    {{ Form::close() }}
@stop

and the View errors.blade.php which is called with include na View index.blade.php.

@if (isset($errors) && count($errors) > 0)
 <div class="alert alert-danger">
  <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
  <strong>Erros encontrados!</strong>
  <ul>
  @foreach($errors->all() as $error)
    <li>{{$error}}</li>
  @endforeach
 </ul>
</div>
@endif

In the main form (index.blade.php) exite a

<?php echo $errors->first('nome'); ?>

if there is any error of validation in the name field it comes back and shows you the error.

  • still yes it is not returning me the errors on the page.

  • I made the appropriate changes but it’s still the same, which could be @Virgilio

  • Post in your question to your main View?! your route too!

  • I updated my question

  • @Renanrodrigues <div class="form-group{{ $errors->has('NmProduto') ? ' has-error' : '' }}">&#xA; {!! Form::label('nmProduto', 'Nome do produto') !!}&#xA; {!! Form::text('NmProduto', null, ['class' => 'form-control nomeProduto']) !!}&#xA; </div> you did not put the tag the same I said in the reply! It also has tag that is not being checked! Do the following, create a simple form with 1 field and test to see if it’s working mirror my example!

  • 2

    taking a look at your code @foreach($erros->any() as $erro) should be @foreach($erros->all() as $erro) note has syntax error... !

Show 1 more comment

Browser other questions tagged

You are not signed in. Login or sign up in order to post.