Personalizar declaraciones IF en Blade - Laravel 5.5

Personalizar declaraciones IF en Blade - Laravel 5.5

Comparte en

Usando Blade podemos definir nuestras propias directivas (directivas personalizadas). Lo logramos utilizando el método Blade::if. Nosotros podríamos crear nuestros @admin, @check, @subscriber y los que necesitemos... Pensar en esto puede hacer que pienses en que es complicado. Por ese motivo, Blade proporciona un método Blade::if, observa es muy rápido utilizando Closures. Veamos cómo lograrlo...


¿Que prefieres en tus vistas...?

¿Esto?

<!doctype html>
<html lang="es">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        @if(auth()->check() && auth()->user()->is_subscriber)
            <p>Hola {{ auth()->user()->name }}, gracias por estar suscrito</p>
        @endif
    </body>
</html>

¿O esto?

<!doctype html>
<html lang="es">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        @subscriber
            <p>Hola {{ auth()->user()->name }}, gracias por estar suscrito</p>
        @endsubscriber
    </body>
</html>

Para el ejemplo usamos is_subscriber y hacemos referencia a que es un campo boolean; true si esta suscrito y false si no lo está.

Seguramente escogiste la segunda opción, pues es mas limpio y se entiende mejor. Crear nuevas directivas IF de Blade (es decir condicionales personalizados) no es algo nuevo. De hecho, puedes crear esta directiva aun teniendo Laravel 5.1, pero el Laravel 5.5 es mucho más fácil, rápido y práctico...

Vamos a enfocarnos en la novedad de Laravel 5.5 que es LTS y de momento nos interesa, como te mencioné es mas fácil crear nuevas directivas IF con el método Blade::if(). Mira este ejemplo que reemplaza el código anterior: Archivo app/Providers/AppServiceProvider.php

<?php

    namespace App\Providers;

    use Illuminate\Support\ServiceProvider;
    use Illuminate\Support\Facades\Blade;

    class AppServiceProvider extends ServiceProvider
    {
        
        public function boot()
        {
            Blade::if('subscriber', function () {
                return auth()->check() && auth()->user()->is_subscriber;
            });
        }

        public function register()
        {
            //
        }
    }

¿Verdad que resulta mas simple y fácil de entender? Este método recibe como primer parámetro el nombre de la nueva directiva (en este caso es subscriber, que podrás usar como @subscriber y @endsubscriber, y como segundo parámetro una función anónima donde se pone la lógica que después debe de retorná true o false. En este caso, la función devolverá true solo si el usuario inicio sesión, y si su propiedad subscriber es true.

Ahora veamos qué mas puede hacer este método.

Digamos que deseas algo así en tu vista.

<!doctype html>
<html lang="es">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        @role('admin')
            <p>Hola eres un admin y todo lo que tenga que ver contigo aparecerá aquí</p>
        @endrole
    </body>
</html>

En la función anónima podemos recibir estos parámetros que pasamos a través de las directiva @role. Veamos el código.

<?php

    namespace App\Providers;

    use Illuminate\Support\ServiceProvider;
    use Illuminate\Support\Facades\Blade;

    class AppServiceProvider extends ServiceProvider
    {
        
        public function boot()
        {
            Blade::if('role', function ($role) {
                return auth()->check() && auth()->user()->role == $role;
            });
        }

        public function register()
        {
            //
        }
    }

Aquí la variable $role recibe lo que pasamos en la directiva @role, en este caso es admin. Si el usuario inicio sesión, y si su role es admin, la función devolverá true y se mostrará el mensaje Hola eres un admin y todo lo que tenga que ver contigo aparecerá aquí, sino entonces no aparecerá nada en la vista.

Ahora no solo tienes las directivas @role (el cual acepta un parámetro) y @endrole , sino tambien la directiva @elserole (que tambien acepta un parámetro). El cual puedes usar de la siguiente manera:

<!doctype html>
<html lang="es">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        @role('admin')
            <p>Soy admin</p>
        @elserole('user')
            <p>Soy usuario</p>
        @else
            <p>
                Inicia sesión <a href="{{ url('login') }}">aquí</a>
            </p>
        @endrole
    </body>
</html>

Blade::if no reemplaza totalmente a Blade::directive (el cual también sirve para crear directivas). Pero a la hora de crear nuevos bloques relacionados con IF, este es más sencillo.

Asi que deja volar tu imaginación y crea nuevas directivas IF para tus proyectos.

Descarga aquí el código, recuerda que todo está en Github, regalanos estrellas :)

Comparte en

Creado por: Venezuela Italo Morales

CEO & Founder de Rimorsoft Online

Más información


Actualizar registros con LARAVEL y VUEjs

Laravel VUE.js VUE.js 2 0 comentarios

Tenemos que continuar con el proceso de edición de un registro y es por esto que en este video vamos a crear el bloque de código necesario para realmente actualizar en la base de datos utilizando la tecnología de Laravel y Vue.

Formulario para Editar con LARAVEL y VUEjs

Laravel VUE.js VUE.js 2 0 comentarios

Vamos a preparar el terreno para la edición de un registro de nuestra lista de tareas, es decir crearemos el formulario y su respectiva ventana flotante con la función edit para preparar los datos en Vue.

Guardar datos con LARAVEL y VUEjs – Método STORE

Laravel VUE.js VUE.js 2 0 comentarios

En este video vamos a continuar con el formulario de creación para añadir una nueva tarea a nuestra base de datos, utilizando Vue para hacer el al llamado al método store() del API creada en Laravel.

Formulario de creación con ventana Modal - Laravel y Vuejs

Laravel VUE.js VUE.js 2 0 comentarios

Vamos a dedicarnos en el diseño para preparar la vista de nuestro formulario de creación, utilizando la tecnología de Bootstrap con una ventana Modal que aparece al hacer clic en el botón para crear una nueva tarea.