Laravel está repleto de métodos y clases llamados helpers que pretenden hacerte la vida más fácil y simplificar proceso habituales en todas las aplicaciones webs. Cosas que repetimos continuamente.

Arr

Uno de los helpers más útiles dentro de Laravel es Arr. Esta pequeña colección de utilidades nos permite manejar los arrays de una forma más cómoda. Por ejemplo, podemos añadir un elemento al final de un array con el método add.

$array = Arr::add(['any' => 'value'], 'newKey', 'newValue');
// ['any' => 'value', 'newKey' => 'newValue']

También tenemos el método collapse, por ejemplo, para unir varios arrays:

$array = Arr::collapse([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

O el croosjoin para unirlos formando todas las combinaciones posibles:

$matrix = Arr::crossJoin([1, 2], ['a', 'b']);
/*
    [
        [1, 'a'],
        [1, 'b'],
        [2, 'a'],
        [2, 'b'],
    ]
*/

Otro método muy útil es dot. Este nos permite formar una clave accesible unida por puntos. Por ejemplo, supongamos que tenemos un array para almacenar las cadenas de traducción de nuestra aplicación. Algo así:

$locale = [
	'en': [
    	'home': [
        	'title': 'Any title string',
            'description': 'Any valid description string',
        ],
    ],
	'es': [
    	'home': [
        	'title': 'El título',
            'description': 'Una descripción cualquiera',
        ],
    ],
];

$flatten = Arr::dot($locale);

echo $flatten['en.home.title'];
// Any title string

Estos son solo unos pocos métodos de este helper Arr, pero en la documentación de Laravel podrás encontrar muchos más.

Fluent Strings

Este helper fue incorporado en la última versión de Laravel y nos permite hacer el trabajo con strings mucho más sencillo y orientado a objetos. Podemos modificarlos añadiendo una cadena al final con append, eliminar caracteres especiales con ascii, o hacer búsquedas con before o after.

Además tenemos la opción de modificar la cadena con camel, kebap o snake, por ejemplo.

Str::of('hola')->ucfirst()->append(' amigo.');

// Hola amigo.

Str::of('Un buen té por la mañana me salva. ¡Me gusta el té!')
   ->replace('té', 'café');
   
// Un buen café por la mañana me salva. ¡Me gusta el café!

URLs

Laravel viene cargado con algunos helpers específicos para facilitarnos el trabajo con las rutas de nuestro proyecto. Por ejemplo, con action podemos generar un enlace directo a una ruta definida en un controlador.

$url = action('HomeController@index');

$url = action([HomeController::class, 'index']);

$url = action('PostConbtroller@post', ['id' => 1]);	

También podemos generar URLs a imágenes o archivos estáticos gracias a assets.

asset('img/logo.png');

secure_asset('img/logo.png'); // ruta segura con https

También podemos obtener información de la ruta actual en la que nos encontramos con:

$current = url()->current();
$full = url()->full();
$previous = url()->previous();

Dump y dump and die

Estos métodos nos permiten debugear de la forma antigua con algo más de estilo al mostrar los arrays y objetos de una forma más visual y entendible. Tenemos dos métodos para hacer esto.

dump()

Este simplemente imprime por pantalla todas las variables que le pasemos.

dump($value);

dump($value1, $value2, $value3, ...);

Si, además de imprimir, queremos parar la ejecución, tenemos el siguiente método.

dd()

dd($value);

dd($value1, $value2, $value3, ...);

Optional

El método optional() es una pequeña maravilla de Laravel que debes conocer. Cuando, con PHP, intentamos acceder a una propiedad o un valor de un array cuando este no está definido o es null, provocamos un error y nos vemos obligados a llenar el código de if con is_null(...) para evitar estos problemas.

Con este helper nos aseguramos de que, este definido o no el objeto en cuestión, obtendremos el valor o un null, pero nunca lanzaremos un error.

return optional($user->address)->street;

// Si address es null, obtendrémos `null`
// Si el usuario tiene address, obtendrémos la calle en cuestión

Esta función también acepta un clousure como segundo parámetro. Este se ejecutará siempre que el valor del primer parámetro no sea null.

return optional(User::find($id), function ($user) {
    return new DummyUser;
});

// Si User::find($id) devuelve null devolvemos un DummyUser

Throw

Lanzar errores es algo común en cualquier aplicación que desarrollamos y hacerlo con un if para lanzarlos, cuando se dan determinadas condiciones, más aún. Con throw_if() y throw_unless() esto es más sencillo.

Ambas funciones aceptan tres parámetros. Un bool, la excepción y, en caso necesario, los parámetros para construir esta excepción.

throw_if(! Auth::user()->isAdmin(), AuthorizationException::class);

throw_if(
    ! Auth::user()->isAdmin(),
    AuthorizationException::class,
    'You are not allowed to access this page'
);
throw_unless(Auth::user()->isAdmin(), AuthorizationException::class);

throw_unless(
    Auth::user()->isAdmin(),
    AuthorizationException::class,
    'You are not allowed to access this page'
);

Fechas

Trabajar con fechas también es muy habitual y, más aún, cuando se trata de coger la hora o fecha actual. Con Laravel es tan sencillo como usar now() o today().

Ambas funciones nos devolverán un objeto Illuminate\Support\Carbon con la hora o la fecha actual.

$today = today();
$now = now();

Abort

En el controlador, lanzar errores HTTP a veces puede ser tedioso y, por ello, Laravel nos ayuda con la función abort().

Este método acepta, tres parámetros: El código HTTP que queremos lanzar. Un mensaje descriptivo, opcional. Y por último, un array de cabeceras, también opcional.

abort(403);

abort(403, 'Unauthorized.', $headers);

Además tenemos la funciónabort_if() y abort_unless() que añade un primer parámetro boolextra para ver si se lanza o no el error.

abort_if(! Auth::user()->isAdmin(), 403);

abort_unless(Auth::user()->isAdmin(), 403);