25. Invoke

En este capítulo, aprenderás cómo utilizar la función __invoke en Laravel 10. __invoke es un método mágico de PHP que permite a una clase ser llamada como una función. Te enseñaremos cómo utilizar la función __invoke en Laravel 10 para crear controladores más simples y legibles.


3 comentarios

Inicia sesión para comentar

Comentarios:

  • Victor Arana Flores

    Victor Arana Flores hace 1 año Destacado

    En algunas ocasiones, la lógica de una acción en particular puede ser lo suficientemente compleja como para justificar la creación de un controlador completo para esa acción en particular. En estos casos, Laravel permite crear controladores de acción única.

    Para crear un controlador de acción única en Laravel, se debe definir el método "__invoke" dentro del controlador. Este método se ejecutará cuando se llame a la acción. A continuación, se muestra un ejemplo de un controlador de acción única para provisionar un nuevo servidor web:

    <?php
    
    namespace App\Http\Controllers;
    
    use App\Models\User;
    use Illuminate\Http\Response;
    
    class ProvisionServer extends Controller
    {
       /**
        * Provision a new web server.
        */
       public function __invoke()
       {
           // ...
       }
    }


    Para registrar una ruta para un controlador de acción única, se debe pasar el nombre del controlador al enrutador, sin especificar el nombre del método. Por ejemplo:

    use App\Http\Controllers\ProvisionServer;
    
    Route::post('/server', ProvisionServer::class);


    También se puede generar un controlador de acción única usando el comando Artisan make:controller con la opción --invokable:

    php artisan make:controller ProvisionServer --invokable

    De esta manera, Laravel permite una mayor flexibilidad en la organización de los controladores y la lógica de las acciones en una aplicación web.
     

  • Alex Labanino

    Alex Labanino hace 1 año

    Borre el index del `→name('about');` y funciona sin problemas! ? Esta bueno el curso, gracias!

    • Sammy Joseph hace 1 año

      Funcionará sin importar el nombre que pongas porque se usa solo para dar referencia a esta ruta.

  • Ramon Batista

    Ramon Batista hace 1 año

    Y en la parte de Web.php se debe dejar la parte que dice -→name(about.index) ? … o sea, la parte de ‘index’ se debe mantener aunque uno use el __invoke ?

    • Victor Arana Flores hace 1 año

      El name es el nombre que tu le quieras dar. Si gustas le puedes poner el nombre “abc”

      Los nombre de las rutas sirven para hacer referencia a ellas, por su nombre, mas no tiene nada que ver con el funcionamiento de Laravel.
       

      En este caso en particular yo suelo nombrarlo con el nombre de la uri, seguido del nombre del metodo que lo administra. Pero eso es simplemente el orden que yo sigo. También organizo mis vistas siguiendo esa sintaxis. Pero eso es una cuestion de como tu decidas organizarte.