mercredi 19 juillet 2017

Validation for file upload doesn't work in Laravel 5.0

In laravel 5.0 I'm doing a test to upload a file and I want to the extension would be limited to pdf, doc or docx and a size of max 5MB. In my form I have two inputs of type date and the input type file. If i don't put any file I See the error. But if i upload a type or file distinct of pdf, doc or docx or more than 5MB the page is reload and I don't see any error but in log I see this:

[2017-07-19 12:53:11] local.ERROR: exception 'Exception' with message 'Serialization of 'Symfony\Component\HttpFoundation\File\UploadedFile' is not allowed' in /var/www/html/seguridadehigiene/vendor/laravel/framework/src/Illuminate/Session/Store.php:255
Stack trace:
#0 /var/www/html/seguridadehigiene/vendor/laravel/framework/src/Illuminate/Session/Store.php(255): serialize(Array)
#1 /var/www/html/seguridadehigiene/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(89): Illuminate\Session\Store->save()
#2 /var/www/html/seguridadehigiene/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(135): Illuminate\Session\Middleware\StartSession->terminate(Object(Illuminate\Http\Request), Object(Illuminate\Http\RedirectResponse))
#3 /var/www/html/seguridadehigiene/public/index.php(57): Illuminate\Foundation\Http\Kernel->terminate(Object(Illuminate\Http\Request), Object(Illuminate\Http\RedirectResponse))
#4 /var/www/html/seguridadehigiene/server.php(21): require_once('/var/www/html/s...')
#5 {main}  

This is my blade template:

@extends('pages.client.main')

@section('title')
    Crear una Evaluación Ergonómica
@stop

@section('content')
    <ol class="breadcrumb">
        <li class="active">Del Trabajador</li>
        <li class="active">Ergonomía</li>
        <li><a href="">Evaluaciones Ergonómicas</a></li>
        <li><a href="">Puestos por Establecimiento</a></li>
        <li class="active">Cargar planilla de Evaluación Ergonómica</li>
    </ol>
    <div class="row">
        <div class="col-md-12">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h3 class="panel-title">Cargar una Evaluación Ergonómica</h3>
                </div>
                @include('errors.list')
                {!! Form::open(['files' => 'true', 'url' => 'ergonomicsEstablishments/'.$establishmentId.'/ergonomicsPosts/'.$postId.'/ergonomics', 'onsubmit' => "return confirm('¿Confirma GRABAR los datos ingresados?');"]) !!}
                <div class="panel-body">

    <div class="form-group">
        {!! Form::label('puesto', 'Puesto: '.$postName) !!}
    </div>

    <div class="form-group">
        {!! Form::label('fecha_evaluacion', 'Fecha de Evaluacion:', ['class' => 'required']) !!}
        {!! Form::input('date', 'fecha_evaluacion', null, ['class' => 'form-control', 'autofocus' => 'autofocus'] ) !!}

    </div>

    <div class="form-group">
        {!! Form::label('fecha_renovacion', 'Fecha de Renovación:', ['class' => 'required']) !!}
        {!! Form::input('date', 'fecha_renovacion', null, ['class' => 'form-control']) !!}
    </div>

    <div class="form-group">
        {!! Form::label('evaluacion', 'Planilla 1-IDENTIFICACIÓN DE FACTORES DE RIESGOS:', ['class' => 'required']) !!}
        {!! Form::file('evaluacion', ['class' => 'form-control']) !!}
    </div>


    <div class="form-group">
        {!! Form::submit($buttonText, ['class' => 'btn btn-success ' ] ) !!}
        <a href="" class="btn btn-primary btn-m">
            Cancelar
        </a>
    </div>
</div>

 ['buttonText' => 'Grabar', $establishmentId, $postId])
                {!! Form::close() !!}
            </div>
        </div>
    </div>
@stop

This is the store in my controller:

public function store(Request $request)
    {
        $sector = Sector::findOrFail($this->post->id_sector);
        $establishmentId = $this->establishment->id;
        $postId = $this->post->id;
        $sectorName = str_replace("/","$",$sector->descripcion);
        $post = $this->post;
        $postName = str_replace("/","$",$post->identificacion);

        $now = Date::toValid(Carbon::now());

        $data = $request->all();

        if ($data['fecha_renovacion'] == "") {
            unset($data['fecha_renovacion']);
        }

        if ($data['fecha_evaluacion'] == "") {
            unset($data['fecha_evaluacion']);
        }

        $validator = $this->validateFormErgonomic($data);
        $evaluationDate = Date::toValid($data['fecha_evaluacion']);
        //selecciono la planilla 1
        $sheetName = Planilla886::findOrFail('1')->denominacion;

        $dataErgonomic = [];
        $dataErgonomic['id_cliente'] = ClientAuth::clientId();
        $dataErgonomic['id_puesto'] = $post->id;
        $dataErgonomic['fecha_evaluacion'] = $evaluationDate;
        $dataErgonomic['fecha_renovacion'] = Date::toValid($data['fecha_renovacion']);

        if ($request->hasFile('evaluacion')) {
            //if ($request->file('evaluacion')->isValid()) {
                $evaluacionFileName = ClientAuth::clientId() . '-evaluacion_ergonomica-'.$sectorName.'-'.$postName.'-'. $data['fecha_evaluacion'].'-'.$sheetName.'-'.$request->file('evaluacion')->getClientOriginalName();
                $dir = File::clientPath('ergonomia/evaluaciones_ergonomicas');

                $request->file('evaluacion')->move($dir, $evaluacionFileName);
                $data['evaluacion'] = $dir . $evaluacionFileName;
            /*}
            else{
                Session::flash('error', 'Tipo de archivo incorrecto');
            }*/
        }

       $ergonomic = Ergonomia::create($dataErgonomic);

       $idSheet = Planilla886::where('planilla_codigo', '=', Constants::CODIGO_PLANILLA1)->first()->id;
       DetalleErgonomia::create([
            'id_ergonomia' => $ergonomic->id,
            'id_planillas_886' => $idSheet,
            'evaluacion' => $data['evaluacion'],
            'fecha_planilla' => $evaluationDate
        ]);
        Session::flash('mensaje', 'Evaluación Ergonómica creada con exito');
        return redirect('/ergonomicsEstablishments/'.$establishmentId.'/ergonomicsPosts/'.$postId.'/ergonomics');
    }

And this is my validation:

public function validateFormErgonomic($data) {
        $rules = array(
                'fecha_evaluacion' => 'required',
                'fecha_renovacion' => 'required',
                'evaluacion'       => 'mimes:pdf,doc,docx|required|max:5192'
        );

        $niceNames = array(
                'fecha_evaluacion' => 'Fecha de Evaluación',
                'fecha_renovacion' => 'Fecha de Renovación',
                'evaluacion'       => 'Planilla 1-IDENTIFICACIÓN DE FACTORES DE RIESGOS'
        );

        $validator = Validator::make($data, $rules);

        $validator->setAttributeNames($niceNames);
        $validator->after(function ($validator) {
            $data = $validator->getData();
            if (isset($data['fecha_evaluacion']) && Date::isFuture($data['fecha_evaluacion'])) {
                $validator->errors()->add('fecha_evaluacion', 'La Fecha de Evaluación no puede ser futura');
            }
            if (isset($data['fecha_renovacion']) && Date::isPast($data['fecha_renovacion'])) {
                $validator->errors()->add('fecha_renovacion', 'La Fecha de Renovación no puede ser pasada');
            }

        });

        return $validator;
    }

Any ideas??. Regards!!



from Newest questions tagged laravel-5 - Stack Overflow http://ift.tt/2tq9Nam
via IFTTT

Aucun commentaire:

Enregistrer un commentaire