Laravel Task

🇬🇧 Here you can find all the documentation in english.
Este paquete te da una forma sencilla de ejecutar ciertas tareas de forma aislada con toda la lógica necesaria organizada, estructurada y aislada. Estas tareas pueden ejecutarse desde un comando, un controlador o desde cualquier otro sitio de la aplicación.
Este es un paquete que creado para cubrir mis propias necesidades y, viendo que me ha sido muy útil y que últimamente lo incorporo en todos mis proyectos, he decido liberarlo. Si te gusta este paquete o te resulta útil puedes colaborar con donaciones o simplemente mejorando el repositorio colaborando directamente desde github.
Instalación
Puedes añadir la librería a tu instalación de Laravel usando composer.
composer require victor-falcon/laravel-task
¿Cómo lanzar y definir tareas?
1. Uso básico
Crea una tarea con el comando de task:make
:
artisan task:make Shop/CreateUserShop
Puedes pasar una ruta como `Shop/CreateUserShop` para crear la tarea en una subcarpeta o directamente el nombre de la clase. La ruta por defecto es app/Tasks
aunque la puedes personalizar publicando y modificando el archivo de configuración.
<?php
declare(strict_types=1);
namespace App\Tasks\Shop;
use VictorFalcon\LaravelTask\Task;
use VictorFalcon\LaravelTask\Taskable;
final class CreateUserShop implements Task
{
use Taskable;
private User $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function handle(ShopCreator $creator): Shop
{
// Create your shop
}
}
Una vez tengas definida tu taréa puedes ejecutarla en cualquier parte del código con:
$shop = CreateUserShop::trigger($user);
2. Pasando datos con validación
Si quieres puedes pasar y validar datos en tus tareas usando el validador incluido en Laravel. Por ejemplo, si necesitas crear un usuario y asegurarte de que el nombre y el email tienen un formato concreto puedes hacer algo así.
final class CreateUser implements Task
{
public function rules(): array
{
return [
'name' => 'required|string|min:5',
'email' => 'required|email|unique:users,email',
];
}
public function handle(): User
{
return User::create($this->data);
}
}
Y luego simplemente lanzar la tarea con datos validados. Todos los datos resultantes de la validación los tendrás disponibles en `$this->data`.
CreateUser::trigger()->withValid([
'name' => 'Víctor Falcón',
'email' => 'hi@victorfalcon.es',
]);
Puedes personalizar los mensajes con el método messages(): array
en tu taréa o añadir atributos personalizados con customAttributes(): array
.
También puedes cambiar la bolsa de errores declarando y modificando la propiedad string $errorBag
en tu tarea.
3. Con autorización
A veces necesitamos validar que un determinado usuario tiene permisos antes de realizar una tarea determinada. Podemos hacer esto usando el método authorize(): bool
en la tarea. Si devuelve false
una excepción del tipo AuthorizationException
será lanzada y la tarea no se ejecutará.
public function authorize(): bool
{
return $this->user()->can('create', Product::class);
}
En cualquier punto de la tarea puedes acceder a $this->user()
que será el usuario autenticado o remplazarlo con cualquier otro usuario:
CreateProduct::trigger()->by($user);
4. Obtener una respuesta
Por defecto las tareas no devuelven ninguna respuesta. Si necesitas obtener el resultado del método handle()
de tu tarea simplemente debes llamar a result()
.
// Esto retorna el resultado del método `handle` de la tarea
$product = CreateProduct::trigger()->withValid($data)->result();
Generar autocompletado en el IDE
Para hacer el desarrollo más sencillo y que el IDE sepa en todo momento los tipos de entrada y salida de nuestras taréas tenemos disponibl el comando artisan task:ide-help
.
Este generará un archivo _ide_helper_tasks.php
con toda la información necesaria de forma automática.