Me gustaría crear un proveedor de blades personalizado para limpiar mi código.

public function boot() {
    Blade::if ('hasError', function ($field) {
        return session('errors')->has($field);
    });
}

Así es como lo uso a la vista:

@hasError('email') has-error @endif

Pero recibo este mensaje de error:

La llamada a una función miembro tiene () en nulo ...

¿Alguien tiene idea?

2
Levente Otta 19 ene. 2018 a las 17:47

3 respuestas

La mejor respuesta

En lugar de:

return session('errors')->has($field);

Haga esto:

return session()->has('errors.' . $field);
0
Alexey Mezenin 19 ene. 2018 a las 14:49

Esto sería actualmente lo mismo que esto en la vista:

@if (session('errors')->has('email'))
 has-error
@endif

Usando la directiva Blade :: if, si quieres tener esto en tu vista:

@hasError('email')
 has-error
@endhasError

Debería tener algo como esto en su método de arranque a partir de Laravel 5.5:

use Illuminate\Support\Facades\Blade;
public function boot() {

Blade::if('hasError', function ($field) {
    if(session()->has($field){
        /* some validation code 
         if(validation){return true}else{return false;}
        */
    }else{
       return false;
    }
});

Ejemplo

Documentación

0
Daniel Gale 19 ene. 2018 a las 15:17
if($validator->fails()) {
   return session()->has('errors.' . $field);

Puede ver el error en su vista usando

@if ($errors->any())
        {{ implode('', $errors->all('<div>:message</div>')) }}
@endif

Actualizar

Para mostrar el error debajo de cada campo, puede hacer esto.

<input type="text" name="firstname">
@if ($errors->has('firstname'))
    <div class="error">{{ $errors->first('firstname') }}</div>
@endif
0
Paulo Rodrigues 19 ene. 2018 a las 14:51