Documentación de Laravel 10.x
Aquí encontrarás fragmentos de código de Laravel y consejos útiles sobre desarrollo web.
Laravel incluye una variedad de funciones globales "helper" de PHP. Muchas de estas funciones son utilizadas por el propio marco; sin embargo, eres libre de usarlas en tus propias aplicaciones si las encuentras convenientes.
Arr::accessible Arr::add Arr::collapse Arr::crossJoin Arr::divide Arr::dot Arr::except Arr::exists Arr::first Arr::flatten Arr::forget Arr::get Arr::has Arr::hasAny Arr::isAssoc Arr::isList Arr::join Arr::keyBy Arr::last Arr::map Arr::mapWithKeys Arr::only Arr::pluck Arr::prepend Arr::prependKeysWith Arr::pull Arr::query Arr::random Arr::set Arr::shuffle Arr::sort Arr::sortDesc Arr::sortRecursive Arr::sortRecursiveDesc Arr::toCssClasses Arr::toCssStyles Arr::undot Arr::where Arr::whereNotNull Arr::wrap data_fill data_get data_set data_forget head last
abort abort_if abort_unless app auth back bcrypt blank broadcast cache class_uses_recursive collect config cookie csrf_field csrf_token decrypt dd dispatch dispatch_sync dump encrypt env event fake filled info logger method_field now old optional policy redirect report report_if report_unless request rescue resolve response retry session tap throw_if throw_unless today trait_uses_recursive transform validator value view with
Arr::accessible()
El método Arr::accessible
determina si el valor dado es accesible como array:
use Illuminate\Support\Arr;use Illuminate\Support\Collection; $isAccessible = Arr::accessible(['a' => 1, 'b' => 2]); // true $isAccessible = Arr::accessible(new Collection); // true $isAccessible = Arr::accessible('abc'); // false $isAccessible = Arr::accessible(new stdClass); // false
Arr::add()
El método Arr::add
agrega un par clave / valor dado a un array si la clave dada aún no existe en el array o está establecida en null
:
use Illuminate\Support\Arr; $array = Arr::add(['name' => 'Desk'], 'price', 100); // ['name' => 'Desk', 'price' => 100] $array = Arr::add(['name' => 'Desk', 'price' => null], 'price', 100); // ['name' => 'Desk', 'price' => 100]
Arr::collapse()
El método Arr::collapse
colapsa un array de arrays en un solo array:
use Illuminate\Support\Arr; $array = Arr::collapse([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
Arr::crossJoin()
El método Arr::crossJoin
realiza un cruce entre los arrays dados, devolviendo un producto cartesiano con todas las posibles permutaciones:
use Illuminate\Support\Arr; $matrix = Arr::crossJoin([1, 2], ['a', 'b']); /* [ [1, 'a'], [1, 'b'], [2, 'a'], [2, 'b'], ]*/ $matrix = Arr::crossJoin([1, 2], ['a', 'b'], ['I', 'II']); /* [ [1, 'a', 'I'], [1, 'a', 'II'], [1, 'b', 'I'], [1, 'b', 'II'], [2, 'a', 'I'], [2, 'a', 'II'], [2, 'b', 'I'], [2, 'b', 'II'], ]*/
Arr::divide()
El método Arr::divide
devuelve dos arrays: uno que contiene las claves y el otro que contiene los valores del array dado:
use Illuminate\Support\Arr; [$keys, $values] = Arr::divide(['name' => 'Desk']); // $keys: ['name'] // $values: ['Desk']
Arr::dot()
El método Arr::dot
aplana un array multidimensional en un array de un solo nivel que utiliza la notación "punto" para indicar la profundidad:
use Illuminate\Support\Arr; $array = ['products' => ['desk' => ['price' => 100]]]; $flattened = Arr::dot($array); // ['products.desk.price' => 100]
Arr::except()
El método Arr::except
elimina los pares clave / valor dados de un array:
use Illuminate\Support\Arr; $array = ['name' => 'Desk', 'price' => 100]; $filtered = Arr::except($array, ['price']); // ['name' => 'Desk']
Arr::exists()
El método Arr::exists
comprueba que la clave dada existe en el array proporcionado:
use Illuminate\Support\Arr; $array = ['name' => 'John Doe', 'age' => 17]; $exists = Arr::exists($array, 'name'); // true $exists = Arr::exists($array, 'salary'); // false
Arr::first()
El método Arr::first
devuelve el primer elemento de un array que pasa una prueba de verdad dada:
use Illuminate\Support\Arr; $array = [100, 200, 300]; $first = Arr::first($array, function (int $value, int $key) { return $value >= 150;}); // 200
También se puede pasar un valor predeterminado como tercer parámetro al método. Este valor se devolverá si ningún valor pasa la prueba de verdad:
use Illuminate\Support\Arr; $first = Arr::first($array, $callback, $default);
Arr::flatten()
El método Arr::flatten
aplana un array multidimensional en un array de un solo nivel:
use Illuminate\Support\Arr; $array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']]; $flattened = Arr::flatten($array); // ['Joe', 'PHP', 'Ruby']
Arr::forget()
El método Arr::forget
elimina un par clave / valor dado de un array profundamente anidado utilizando la notación "punto":
use Illuminate\Support\Arr; $array = ['products' => ['desk' => ['price' => 100]]]; Arr::forget($array, 'products.desk'); // ['products' => []]
Arr::get()
El método Arr::get
recupera un valor de un array profundamente anidado utilizando la notación "punto":
use Illuminate\Support\Arr; $array = ['products' => ['desk' => ['price' => 100]]]; $price = Arr::get($array, 'products.desk.price'); // 100
El método Arr::get
también acepta un valor predeterminado, que se devolverá si la clave especificada no está presente en el array:
use Illuminate\Support\Arr; $discount = Arr::get($array, 'products.desk.discount', 0); // 0
Arr::has()
El método Arr::has
comprueba si un elemento o elementos dados existen en un array utilizando la notación "punto":
use Illuminate\Support\Arr; $array = ['product' => ['name' => 'Desk', 'price' => 100]]; $contains = Arr::has($array, 'product.name'); // true $contains = Arr::has($array, ['product.price', 'product.discount']); // false
Arr::hasAny()
El método Arr::hasAny
comprueba si algún elemento en un conjunto dado existe en un array utilizando la notación "punto":
use Illuminate\Support\Arr; $array = ['product' => ['name' => 'Desk', 'price' => 100]]; $contains = Arr::hasAny($array, 'product.name'); // true $contains = Arr::hasAny($array, ['product.name', 'product.discount']); // true $contains = Arr::hasAny($array, ['category', 'product.discount']); // false
Arr::isAssoc()
El método Arr::isAssoc
devuelve true
si el array dado es un array asociativo. Un array se considera "asociativo" si no tiene claves numéricas secuenciales que comiencen desde cero:
use Illuminate\Support\Arr; $isAssoc = Arr::isAssoc(['product' => ['name' => 'Desk', 'price' => 100]]); // true $isAssoc = Arr::isAssoc([1, 2, 3]); // false
Arr::isList()
El método Arr::isList
devuelve true
si las claves del array dado son enteros secuenciales que comienzan desde cero:
use Illuminate\Support\Arr; $isList = Arr::isList(['foo', 'bar', 'baz']); // true $isList = Arr::isList(['product' => ['name' => 'Desk', 'price' => 100]]); // false
Arr::join()
El método Arr::join
une los elementos del array con una cadena. Usando el segundo argumento de este método, también puedes especificar la cadena de unión para el último elemento del array:
use Illuminate\Support\Arr; $array = ['Tailwind', 'Alpine', 'Laravel', 'Livewire']; $joined = Arr::join($array, ', '); // Tailwind, Alpine, Laravel, Livewire $joined = Arr::join($array, ', ', ' and '); // Tailwind, Alpine, Laravel and Livewire
Arr::keyBy()
El método Arr::keyBy
indexa el array por la clave dada. Si varios elementos tienen la misma clave, solo aparecerá el último en el nuevo array:
use Illuminate\Support\Arr; $array = [ ['product_id' => 'prod-100', 'name' => 'Desk'], ['product_id' => 'prod-200', 'name' => 'Chair'],]; $keyed = Arr::keyBy($array, 'product_id'); /* [ 'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'], 'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'], ]*/
Arr::last()
El método Arr::last
devuelve el último elemento de un array que pasa una prueba de verdad dada:
use Illuminate\Support\Arr; $array = [100, 200, 300, 110]; $last = Arr::last($array, function (int $value, int $key) { return $value >= 150;}); // 300
Se puede pasar un valor predeterminado como tercer argumento al método. Este valor se devolverá si ningún valor pasa la prueba de verdad:
use Illuminate\Support\Arr; $last = Arr::last($array, $callback, $default);
Arr::map()
El método Arr::map
itera a través del array y pasa cada valor y clave al retorno de llamada dado. El valor del array se reemplaza por el valor devuelto por el retorno de llamada:
use Illuminate\Support\Arr; $array = ['first' => 'james', 'last' => 'kirk']; $mapped = Arr::map($array, function (string $value, string $key) { return ucfirst($value);}); // ['first' => 'James', 'last' => 'Kirk']
Arr::mapWithKeys()
El método Arr::mapWithKeys
itera a través del array y pasa cada valor al retorno de llamada dado. El retorno de llamada debe devolver un array asociativo que contenga un solo par clave / valor:
use Illuminate\Support\Arr; $array = [ [ 'name' => 'John', 'department' => 'Sales', ], [ 'name' => 'Jane', 'department' => 'Marketing', ]]; $mapped = Arr::mapWithKeys($array, function (array $item, int $key) { return [$item['email'] => $item['name']];}); /* [ '[email protected]' => 'John', '[email protected]' => 'Jane', ]*/
Arr::only()
El método Arr::only
devuelve solo los pares clave / valor especificados del array dado:
use Illuminate\Support\Arr; $array = ['name' => 'Desk', 'price' => 100, 'orders' => 10]; $slice = Arr::only($array, ['name', 'price']); // ['name' => 'Desk', 'price' => 100]
Arr::pluck()
El método Arr::pluck
recupera todos los valores de una clave dada de un array:
use Illuminate\Support\Arr; $array = [ ['developer' => ['id' => 1, 'name' => 'Taylor']], ['developer' => ['id' => 2, 'name' => 'Abigail']],]; $names = Arr::pluck($array, 'developer.name'); // ['Taylor', 'Abigail']
También puedes especificar cómo deseas que se clave la lista resultante:
use Illuminate\Support\Arr; $names = Arr::pluck($array, 'developer.name', 'developer.id'); // [1 => 'Taylor', 2 => 'Abigail']
Arr::prepend()
El método Arr::prepend
agregará un elemento al principio de un array:
use Illuminate\Support\Arr; $array = ['one', 'two', 'three', 'four']; $array = Arr::prepend($array, 'zero'); // ['zero', 'one', 'two', 'three', 'four']
Si es necesario, puedes especificar la clave que se debe usar para el valor:
use Illuminate\Support\Arr; $array = ['price' => 100]; $array = Arr::prepend($array, 'Desk', 'name'); // ['name' => 'Desk', 'price' => 100]
Arr::prependKeysWith()
El método Arr::prependKeysWith
agrega un prefijo a todos los nombres de clave de un array asociativo:
use Illuminate\Support\Arr; $array = [ 'name' => 'Desk', 'price' => 100,]; $keyed = Arr::prependKeysWith($array, 'product.'); /* [ 'product.name' => 'Desk', 'product.price' => 100, ]*/
Arr::pull()
El método Arr::pull
devuelve y elimina un par clave / valor de un array:
use Illuminate\Support\Arr; $array = ['name' => 'Desk', 'price' => 100]; $name = Arr::pull($array, 'name'); // $name: Desk // $array: ['price' => 100]
Se puede pasar un valor predeterminado como tercer argumento al método. Este valor se devolverá si la clave no existe:
use Illuminate\Support\Arr; $value = Arr::pull($array, $key, $default);
Arr::query()
El método Arr::query
convierte el array en una cadena de consulta:
use Illuminate\Support\Arr; $array = [ 'name' => 'Taylor', 'order' => [ 'column' => 'created_at', 'direction' => 'desc' ]]; Arr::query($array); // name=Taylor&order[column]=created_at&order[direction]=desc
Arr::random()
El método Arr::random
devuelve un valor aleatorio de un array:
use Illuminate\Support\Arr; $array = [1, 2, 3, 4, 5]; $random = Arr::random($array); // 4 - (retrieved randomly)
También puedes especificar la cantidad de elementos a devolver como segundo argumento opcional. Ten en cuenta que proporcionar este argumento devolverá un array incluso si solo se desea un elemento:
use Illuminate\Support\Arr; $items = Arr::random($array, 2); // [2, 5] - (retrieved randomly)
Arr::set()
El método Arr::set
establece un valor dentro de un array profundamente anidado utilizando la notación "punto":
use Illuminate\Support\Arr; $array = ['products' => ['desk' => ['price' => 100]]]; Arr::set($array, 'products.desk.price', 200); // ['products' => ['desk' => ['price' => 200]]]
Arr::shuffle()
El método Arr::shuffle
mezcla aleatoriamente los elementos en el array:
use Illuminate\Support\Arr; $array = Arr::shuffle([1, 2, 3, 4, 5]); // [3, 2, 5, 1, 4] - (generated randomly)
Arr::sort()
El método Arr::sort
ordena un array por sus valores:
use Illuminate\Support\Arr; $array = ['Desk', 'Table', 'Chair']; $sorted = Arr::sort($array); // ['Chair', 'Desk', 'Table']
También puedes ordenar el array por los resultados de un cierre dado:
use Illuminate\Support\Arr; $array = [ ['name' => 'Desk'], ['name' => 'Table'], ['name' => 'Chair'],]; $sorted = array_values(Arr::sort($array, function (array $value) { return $value['name'];})); /* [ ['name' => 'Chair'], ['name' => 'Desk'], ['name' => 'Table'], ]*/
Arr::sortDesc()
El método Arr::sortDesc
ordena un array en orden descendente por sus valores:
use Illuminate\Support\Arr; $array = ['Desk', 'Table', 'Chair']; $sorted = Arr::sortDesc($array); // ['Table', 'Desk', 'Chair']
También puedes ordenar el array por los resultados de un cierre dado:
use Illuminate\Support\Arr; $array = [ ['name' => 'Desk'], ['name' => 'Table'], ['name' => 'Chair'],]; $sorted = array_values(Arr::sortDesc($array, function (array $value) { return $value['name'];})); /* [ ['name' => 'Table'], ['name' => 'Desk'], ['name' => 'Chair'], ]*/
Arr::sortRecursive()
El método Arr::sortRecursive
ordena recursivamente un array utilizando la función sort
para subarrays indexados numéricamente y la función ksort
para subarrays asociativos:
use Illuminate\Support\Arr; $array = [ ['Roman', 'Taylor', 'Li'], ['PHP', 'Ruby', 'JavaScript'], ['one' => 1, 'two' => 2, 'three' => 3],]; $sorted = Arr::sortRecursive($array); /* [ ['JavaScript', 'PHP', 'Ruby'], ['one' => 1, 'three' => 3, 'two' => 2], ['Li', 'Roman', 'Taylor'], ]*/
Si deseas que los resultados se ordenen en orden descendente, puedes usar el método Arr::sortRecursiveDesc
.
$sorted = Arr::sortRecursiveDesc($array);
Arr::toCssClasses()
El método Arr::toCssClasses
compila condicionalmente una cadena de clases CSS. El método acepta un array de clases donde la clave del array contiene la clase o clases que deseas agregar, mientras que el valor es una expresión booleana. Si el elemento del array tiene una clave numérica, siempre se incluirá en la lista de clases renderizadas:
use Illuminate\Support\Arr; $isActive = false;$hasError = true; $array = ['p-4', 'font-bold' => $isActive, 'bg-red' => $hasError]; $classes = Arr::toCssClasses($array); /* 'p-4 bg-red'*/
Arr::toCssStyles()
El método Arr::toCssStyles
compila condicionalmente una cadena de estilos CSS. El método acepta un array de estilos donde la clave del array contiene el estilo o estilos que deseas agregar, mientras que el valor es una expresión booleana. Si el elemento del array tiene una clave numérica, siempre se incluirá en la lista de estilos renderizados:
$hasColor = true; $array = ['background-color: blue', 'color: blue' => $hasColor]; $classes = Arr::toCssStyles($array); /* 'background-color: blue; color: blue;'*/
Este método impulsa la funcionalidad de Laravel que permite fusionar clases con la bolsa de atributos de un componente Blade así como la directiva Blade @class
.
Arr::undot()
El método Arr::undot
expande un array unidimensional que utiliza la notación "punto" en un array multidimensional:
use Illuminate\Support\Arr; $array = [ 'user.name' => 'Kevin Malone', 'user.occupation' => 'Accountant',]; $array = Arr::undot($array); // ['user' => ['name' => 'Kevin Malone', 'occupation' => 'Accountant']]
Arr::where()
El método Arr::where
filtra un array utilizando el cierre dado:
use Illuminate\Support\Arr; $array = [100, '200', 300, '400', 500]; $filtered = Arr::where($array, function (string|int $value, int $key) { return is_string($value);}); // [1 => '200', 3 => '400']
Arr::whereNotNull()
El método Arr::whereNotNull
elimina todos los valores null
del array dado:
use Illuminate\Support\Arr; $array = [0, null]; $filtered = Arr::whereNotNull($array); // [0 => 0]
Arr::wrap()
El método Arr::wrap
envuelve el valor dado en un array. Si el valor dado ya es un array, se devolverá sin modificación:
use Illuminate\Support\Arr; $string = 'Laravel'; $array = Arr::wrap($string); // ['Laravel']
Si el valor dado es null
, se devolverá un array vacío:
use Illuminate\Support\Arr; $array = Arr::wrap(null); // []
data_fill()
La función data_fill
establece un valor faltante dentro de un array o objeto anidado utilizando la notación "punto":
$data = ['products' => ['desk' => ['price' => 100]]]; data_fill($data, 'products.desk.price', 200); // ['products' => ['desk' => ['price' => 100]]] data_fill($data, 'products.desk.discount', 10); // ['products' => ['desk' => ['price' => 100, 'discount' => 10]]]
Esta función también acepta asteriscos como comodines y llenará el destino en consecuencia:
$data = [ 'products' => [ ['name' => 'Desk 1', 'price' => 100], ['name' => 'Desk 2'], ],]; data_fill($data, 'products.*.price', 200); /* [ 'products' => [ ['name' => 'Desk 1', 'price' => 100], ['name' => 'Desk 2', 'price' => 200], ], ]*/
data_get()
La función data_get
recupera un valor de un array o objeto anidado utilizando la notación "punto":
$data = ['products' => ['desk' => ['price' => 100]]]; $price = data_get($data, 'products.desk.price'); // 100
La función data_get
también acepta un valor predeterminado, que se devolverá si no se encuentra la clave especificada:
$discount = data_get($data, 'products.desk.discount', 0); // 0
La función también acepta comodines usando asteriscos, que pueden apuntar a cualquier clave del array u objeto:
$data = [ 'product-one' => ['name' => 'Desk 1', 'price' => 100], 'product-two' => ['name' => 'Desk 2', 'price' => 150],]; data_get($data, '*.name'); // ['Desk 1', 'Desk 2'];
data_set()
La función data_set
establece un valor dentro de un array o objeto anidado utilizando la notación "punto":
$data = ['products' => ['desk' => ['price' => 100]]]; data_set($data, 'products.desk.price', 200); // ['products' => ['desk' => ['price' => 200]]]
Esta función también acepta comodines usando asteriscos y establecerá valores en el destino en consecuencia:
$data = [ 'products' => [ ['name' => 'Desk 1', 'price' => 100], ['name' => 'Desk 2', 'price' => 150], ],]; data_set($data, 'products.*.price', 200); /* [ 'products' => [ ['name' => 'Desk 1', 'price' => 200], ['name' => 'Desk 2', 'price' => 200], ], ]*/
Por defecto, se sobrescriben los valores existentes. Si deseas establecer un valor solo si no existe, puedes pasar false
como cuarto argumento a la función:
$data = ['products' => ['desk' => ['price' => 100]]]; data_set($data, 'products.desk.price', 200, overwrite: false); // ['products' => ['desk' => ['price' => 100]]]
data_forget()
La función data_forget
elimina un valor dentro de un array o un objeto anidado utilizando la notación "dot":
$data = ['products' => ['desk' => ['price' => 100]]]; data_forget($data, 'products.desk.price'); // ['products' => ['desk' => []]]
Esta función también acepta comodines usando asteriscos y eliminará valores en el destino en consecuencia:
$data = [ 'products' => [ ['name' => 'Desk 1', 'price' => 100], ['name' => 'Desk 2', 'price' => 150], ],]; data_forget($data, 'products.*.price'); /* [ 'products' => [ ['name' => 'Desk 1'], ['name' => 'Desk 2'], ], ]*/
head()
La función head
devuelve el primer elemento en el array dado:
$array = [100, 200, 300]; $first = head($array); // 100
last()
La función last
devuelve el último elemento en el array dado:
$array = [100, 200, 300]; $last = last($array); // 300
app_path()
La función app_path
devuelve la ruta completamente calificada al directorio app
de tu aplicación. También puedes usar la función app_path
para generar una ruta completamente calificada a un archivo relativo al directorio de la aplicación:
$path = app_path(); $path = app_path('Http/Controllers/Controller.php');
base_path()
La función base_path
devuelve la ruta completamente calificada al directorio raíz de tu aplicación. También puedes usar la función base_path
para generar una ruta completamente calificada a un archivo dado relativo al directorio raíz del proyecto:
$path = base_path(); $path = base_path('vendor/bin');
config_path()
La función config_path
devuelve la ruta completamente calificada al directorio config
de tu aplicación. También puedes usar la función config_path
para generar una ruta completamente calificada a un archivo dado dentro del directorio de configuración de la aplicación:
$path = config_path(); $path = config_path('app.php');
database_path()
La función database_path
devuelve la ruta completamente calificada al directorio database
de tu aplicación. También puedes usar la función database_path
para generar una ruta completamente calificada a un archivo dado dentro del directorio de la base de datos:
$path = database_path(); $path = database_path('factories/UserFactory.php');
lang_path()
La función lang_path
devuelve la ruta completamente calificada al directorio lang
de tu aplicación. También puedes usar la función lang_path
para generar una ruta completamente calificada a un archivo dado dentro del directorio:
$path = lang_path(); $path = lang_path('en/messages.php');
Nota Por defecto, el esqueleto de la aplicación Laravel no incluye el directorio
lang
. Si deseas personalizar los archivos de idioma de Laravel, puedes publicarlos mediante el comando Artisanlang:publish
.
mix()
La función mix
devuelve la ruta a un archivo Mix versionado:
$path = mix('css/app.css');
public_path()
La función public_path
devuelve la ruta completamente calificada al directorio public
de tu aplicación. También puedes usar la función public_path
para generar una ruta completamente calificada a un archivo dado dentro del directorio público:
$path = public_path(); $path = public_path('css/app.css');
resource_path()
La función resource_path
devuelve la ruta completamente calificada al directorio resources
de tu aplicación. También puedes usar la función resource_path
para generar una ruta completamente calificada a un archivo dado dentro del directorio de recursos:
$path = resource_path(); $path = resource_path('sass/app.scss');
storage_path()
La función storage_path
devuelve la ruta completamente calificada al directorio storage
de tu aplicación. También puedes usar la función storage_path
para generar una ruta completamente calificada a un archivo dado dentro del directorio de almacenamiento:
$path = storage_path(); $path = storage_path('app/file.txt');
action()
La función action
genera una URL para la acción dada del controlador:
use App\Http\Controllers\HomeController; $url = action([HomeController::class, 'index']);
Si el método acepta parámetros de ruta, puedes pasarlos como segundo argumento al método:
$url = action([UserController::class, 'profile'], ['id' => 1]);
asset()
La función asset
genera una URL para un recurso utilizando el esquema actual de la solicitud (HTTP o HTTPS):
$url = asset('img/photo.jpg');
Puedes configurar el host de la URL del recurso estableciendo la variable ASSET_URL
en tu archivo .env
. Esto puede ser útil si alojas tus recursos en un servicio externo como Amazon S3 u otro CDN:
// ASSET_URL=http://example.com/assets $url = asset('img/photo.jpg'); // http://example.com/assets/img/photo.jpg
route()
La función route
genera una URL para una ruta con nombre dada:
$url = route('route.name');
Si la ruta acepta parámetros, puedes pasarlos como segundo argumento a la función:
$url = route('route.name', ['id' => 1]);
Por defecto, la función route
genera una URL absoluta. Si deseas generar una URL relativa, puedes pasar false
como tercer argumento a la función:
$url = route('route.name', ['id' => 1], false);
secure_asset()
La función secure_asset
genera una URL para un recurso utilizando HTTPS:
$url = secure_asset('img/photo.jpg');
secure_url()
La función secure_url
genera una URL HTTPS completamente calificada para el camino dado. Se pueden pasar segmentos de URL adicionales en el segundo argumento de la función:
$url = secure_url('user/profile'); $url = secure_url('user/profile', [1]);
to_route()
La función to_route
genera una respuesta HTTP de redirección para una ruta con nombre dada:
return to_route('users.show', ['user' => 1]);
Si es necesario, puedes pasar el código de estado HTTP que se asignará a la redirección y cualquier encabezado de respuesta adicional como tercer y cuarto argumento al método to_route
:
return to_route('users.show', ['user' => 1], 302, ['X-Framework' => 'Laravel']);
url()
La función url
genera una URL completamente calificada para el camino dado:
$url = url('user/profile'); $url = url('user/profile', [1]);
Si no se proporciona ningún camino, se devuelve una instancia de Illuminate\Routing\UrlGenerator
:
$current = url()->current(); $full = url()->full(); $previous = url()->previous();
abort()
La función abort
lanza una excepción HTTP que será renderizada por el manejador de excepciones:
abort(403);
También puedes proporcionar el mensaje de la excepción y encabezados de respuesta HTTP personalizados que se enviarán al navegador:
abort(403, 'Unauthorized.', $headers);
abort_if()
La función abort_if
lanza una excepción HTTP si una expresión booleana dada se evalúa como true
:
abort_if(! Auth::user()->isAdmin(), 403);
Al igual que el método abort
, también puedes proporcionar el texto de respuesta de la excepción como tercer argumento y un array de encabezados de respuesta personalizados como cuarto argumento a la función.
abort_unless()
La función abort_unless
lanza una excepción HTTP si una expresión booleana dada se evalúa como false
:
abort_unless(Auth::user()->isAdmin(), 403);
Al igual que el método abort
, también puedes proporcionar el texto de respuesta de la excepción como tercer argumento y un array de encabezados de respuesta personalizados como cuarto argumento a la función.
app()
La función app
devuelve la instancia del contenedor de servicios:
$container = app();
Puedes pasar un nombre de clase o interfaz para resolverlo desde el contenedor:
$api = app('HelpSpot\API');
auth()
La función auth
devuelve una instancia autenticadora. Puedes usarla como alternativa a la fachada Auth
:
$user = auth()->user();
Si es necesario, puedes especificar qué instancia de guardia te gustaría acceder:
$user = auth('admin')->user();
back()
La función back
genera una respuesta HTTP de redirección a la ubicación anterior del usuario:
return back($status = 302, $headers = [], $fallback = '/'); return back();
bcrypt()
La función bcrypt
hashes el valor dado utilizando Bcrypt. Puedes usar esta función como alternativa a la fachada Hash
:
$password = bcrypt('my-secret-password');
blank()
La función blank
determina si el valor dado está "en blanco":
blank('');blank(' ');blank(null);blank(collect()); // true blank(0);blank(true);blank(false); // false
Para la inversa de blank
, consulta el método filled
.
broadcast()
La función broadcast
transmite el evento dado a sus escuchadores:
broadcast(new UserRegistered($user)); broadcast(new UserRegistered($user))->toOthers();
cache()
La función cache
se puede utilizar para obtener valores de la caché. Si la clave dada no existe en la caché, se devolverá un valor predeterminado opcional:
$value = cache('key'); $value = cache('key', 'default');
Puedes agregar elementos a la caché pasando un array de pares clave / valor a la función. También debes pasar el número de segundos o la duración durante la cual se considerará válido el valor almacenado en caché:
cache(['key' => 'value'], 300); cache(['key' => 'value'], now()->addSeconds(10));
class_uses_recursive()
La función class_uses_recursive
devuelve todos los traits utilizados por una clase, incluyendo traits utilizados por todas sus clases padre:
$traits = class_uses_recursive(App\Models\User::class);
collect()
La función collect
crea una instancia de colección a partir del valor dado:
$collection = collect(['taylor', 'abigail']);
config()
La función config
obtiene el valor de una variable de configuración. Los valores de configuración se pueden acceder mediante la sintaxis "dot", que incluye el nombre del archivo y la opción que deseas acceder. Se puede especificar un valor predeterminado y se devolverá si la opción de configuración no existe:
$value = config('app.timezone'); $value = config('app.timezone', $default);
Puedes establecer variables de configuración en tiempo de ejecución pasando un array de pares clave / valor. Sin embargo, ten en cuenta que esta función solo afecta al valor de configuración para la solicitud actual y no actualiza tus valores de configuración reales:
config(['app.debug' => true]);
cookie()
La función cookie
crea una nueva instancia de cookie:
$cookie = cookie('name', 'value', $minutes);
csrf_field()
La función csrf_field
genera un campo de entrada HTML hidden
que contiene el valor del token CSRF. Por ejemplo, usando sintaxis de Blade:
{{ csrf_field() }}
csrf_token()
La función csrf_token
obtiene el valor del token CSRF actual:
$token = csrf_token();
decrypt()
La función decrypt
descifra el valor dado. Puedes usar esta función como alternativa a la fachada Crypt
:
$password = decrypt($value);
dd()
La función dd
muestra las variables dadas y finaliza la ejecución del script:
dd($value); dd($value1, $value2, $value3, ...);
Si no deseas detener la ejecución de tu script, usa la función dump
en su lugar.
dispatch()
La función dispatch
coloca el trabajo dado en la cola de trabajos de Laravel:
dispatch(new App\Jobs\SendEmails);
dispatch_sync()
La función dispatch_sync
coloca el trabajo dado en la cola sync para que se procese inmediatamente:
dispatch_sync(new App\Jobs\SendEmails);
dump()
La función dump
muestra las variables dadas:
dump($value); dump($value1, $value2, $value3, ...);
Si deseas detener la ejecución del script después de mostrar las variables, usa la función dd
en su lugar.
encrypt()
La función encrypt
cifra el valor dado. Puedes usar esta función como alternativa a la fachada Crypt
:
$secret = encrypt('my-secret-value');
env()
La función env
obtiene el valor de una variable de entorno o devuelve un valor predeterminado:
$env = env('APP_ENV'); $env = env('APP_ENV', 'production');
Advertencia Si ejecutas el comando
config:cache
durante tu proceso de implementación, asegúrate de que solo estás llamando a la funciónenv
desde tus archivos de configuración. Una vez que la configuración ha sido almacenada en caché, el archivo.env
no se cargará y todas las llamadas a la funciónenv
devolveránnull
.
event()
La función event
despacha el evento dado a sus escuchadores:
event(new UserRegistered($user));
fake()
La función fake
resuelve una instancia de Faker desde el contenedor, lo cual puede ser útil al crear datos falsos en fábricas de modelos, en la siembra de la base de datos, en pruebas y en prototipos de vistas:
@for($i = 0; $i < 10; $i++) <dl> <dt>Name</dt> <dd>{{ fake()->name() }}</dd> <dt>Email</dt> <dd>{{ fake()->unique()->safeEmail() }}</dd> </dl>@endfor
Por defecto, la función fake
utilizará la opción de configuración app.faker_locale
en tu archivo de configuración config/app.php
; sin embargo, también puedes especificar el idioma pasándolo a la función fake
. Cada idioma resolverá un singleton individual:
fake('nl_NL')->name()
filled()
La función filled
determina si el valor dado no está "en blanco":
filled(0);filled(true);filled(false); // true filled('');filled(' ');filled(null);filled(collect()); // false
Para la inversa de filled
, consulta el método blank
.
info()
La función info
escribirá información en el registro de tu aplicación:
info('Some helpful information!');
También se puede pasar un array de datos contextuales a la función:
info('User login attempt failed.', ['id' => $user->id]);
logger()
La función logger
se puede utilizar para escribir un mensaje de nivel debug
en el registro:
logger('Debug message');
También se puede pasar un array de datos contextuales a la función:
logger('User has logged in.', ['id' => $user->id]);
Se devolverá una instancia de registro si no se pasa ningún valor a la función:
logger()->error('You are not allowed here.');
method_field()
La función method_field
genera un campo de entrada HTML hidden
que contiene el valor simulado del verbo HTTP del formulario. Por ejemplo, usando sintaxis de Blade:
<form method="POST"> {{ method_field('DELETE') }}</form>
now()
La función now
crea una nueva instancia de Illuminate\Support\Carbon
para la hora actual:
$now = now();
old()
La función old
recupera un valor de entrada antiguo intermitente en la sesión:
$value = old('value'); $value = old('value', 'default');
Dado que el "valor predeterminado" proporcionado como segundo argumento a la función old
suele ser un atributo de un modelo Eloquent, Laravel te permite simplemente pasar el modelo Eloquent completo como segundo argumento a la función old
. Al hacerlo, Laravel asumirá que el primer argumento proporcionado a la función old
es el nombre del atributo Eloquent que debe considerarse como el "valor predeterminado":
{{ old('name', $user->name) }} // Equivalente a... {{ old('name', $user) }}
optional()
La función optional
acepta cualquier argumento y te permite acceder a propiedades o llamar a métodos en ese objeto. Si el objeto dado es null
, las propiedades y métodos devolverán null
en lugar de causar un error:
return optional($user->address)->street; {!! old('name', optional($user)->name) !!}
La función optional
también acepta un cierre como segundo argumento. El cierre se invocará si el valor proporcionado como primer argumento no es nulo:
return optional(User::find($id), function (User $user) { return $user->name;});
policy()
El método policy
recupera una instancia de política para una clase dada:
$policy = policy(App\Models\User::class);
redirect()
La función redirect
devuelve una respuesta HTTP de redirección o devuelve la instancia de redirección si se llama sin argumentos:
return redirect($to = null, $status = 302, $headers = [], $https = null); return redirect('/home'); return redirect()->route('route.name');
report()
La función report
informará de una excepción usando tu manejador de excepciones:
report($e);
La función report
también acepta una cadena como argumento. Cuando se proporciona una cadena a la función, la función creará una excepción con la cadena dada como su mensaje:
report('Something went wrong.');
report_if()
La función report_if
informará de una excepción usando tu manejador de excepciones si la condición dada es true
:
report_if($shouldReport, $e); report_if($shouldReport, 'Something went wrong.');
report_unless()
La función report_unless
informará de una excepción usando tu manejador de excepciones si la condición dada es false
:
report_unless($reportingDisabled, $e); report_unless($reportingDisabled, 'Something went wrong.');
request()
La función request
devuelve la instancia actual de request u obtiene el valor de un campo de entrada desde la solicitud actual:
$request = request(); $value = request('key', $default);
rescue()
La función rescue
ejecuta el cierre dado y captura cualquier excepción que ocurra durante su ejecución. Todas las excepciones capturadas se enviarán a tu manejador de excepciones; sin embargo, la solicitud continuará procesándose:
return rescue(function () { return $this->method();});
También puedes pasar un segundo argumento a la función rescue
. Este argumento será el valor "predeterminado" que se debe devolver si ocurre una excepción al ejecutar el cierre:
return rescue(function () { return $this->method();}, false); return rescue(function () { return $this->method();}, function () { return $this->failure();});
Se puede proporcionar un argumento report
a la función rescue
para determinar si la excepción debe informarse mediante la función report
:
return rescue(function () { return $this->method();}, report: function (Throwable $throwable) { return $throwable instanceof InvalidArgumentException;});
resolve()
La función resolve
resuelve un nombre de clase o interfaz dado a una instancia utilizando el contenedor de servicios:
$api = resolve('HelpSpot\API');
response()
La función response
crea una instancia de respuesta o obtiene una instancia del generador de respuestas:
return response('Hello World', 200, $headers); return response()->json(['foo' => 'bar'], 200, $headers);
retry()
La función retry
intenta ejecutar el cierre dado hasta que se alcance el umbral máximo de intentos dado. Si el cierre no genera una excepción, se devolverá su valor de retorno. Si el cierre genera una excepción, se intentará automáticamente de nuevo. Si se supera el recuento máximo de intentos, se lanzará la excepción:
return retry(5, function () { // Intento 5 veces con un descanso de 100 ms entre intentos...}, 100);
Si deseas calcular manualmente el número de milisegundos a dormir entre intentos, puedes pasar un cierre como tercer argumento a la función retry
:
use Exception; return retry(5, function () { // ...}, function (int $attempt, Exception $exception) { return $attempt * 100;});
Para mayor comodidad, puedes proporcionar un array como primer argumento a la función retry
. Este array se utilizará para determinar cuántos milisegundos dormir entre intentos sucesivos:
return retry([100, 200], function () { // Duerme durante 100 ms en el primer reintento, 200 ms en el segundo reintento...});
Para intentar solo bajo condiciones específicas, puedes pasar un cierre como cuarto argumento a la función retry
:
use Exception; return retry(5, function () { // ...}, 100, function (Exception $exception) { return $exception instanceof RetryException;});
session()
La función session
se puede utilizar para obtener o establecer valores de sesión:
$value = session('key');
Puedes establecer valores pasando un array de pares clave / valor a la función:
session(['chairs' => 7, 'instruments' => 3]);
Se devolverá el almacén de sesiones si no se pasa ningún valor a la función:
$value = session()->get('key'); session()->put('key', $value);
tap()
La función tap
acepta dos argumentos: un $value
arbitrario y un cierre. El $value
se pasará al cierre y luego se devolverá por la función tap
. El valor de retorno del cierre es irrelevante:
$user = tap(User::first(), function (User $user) { $user->name = 'taylor'; $user->save();});
Si no se pasa un cierre a la función tap
, puedes llamar a cualquier método en el $value
dado. El valor de retorno del método que llames siempre será $value
, independientemente de lo que realmente devuelva el método en su definición. Por ejemplo, el método update
de Eloquent suele devolver un entero. Sin embargo, podemos forzar al método a que devuelva el modelo mismo encadenando la llamada al método update
a través de la función tap
:
$user = tap($user)->update([ 'name' => $name, 'email' => $email,]);
Para agregar un método tap
a una clase, puedes agregar el rasgo Illuminate\Support\Traits\Tappable
a la clase. El método tap
de este rasgo acepta un cierre como su único argumento. La instancia del objeto en sí se pasará al cierre y luego se devolverá por el método tap
:
return $user->tap(function (User $user) { // ...});
throw_if()
La función throw_if
lanza la excepción dada si una expresión booleana dada se evalúa como true
:
throw_if(! Auth::user()->isAdmin(), AuthorizationException::class); throw_if( ! Auth::user()->isAdmin(), AuthorizationException::class, 'You are not allowed to access this page.');
throw_unless()
La función throw_unless
lanza la excepción dada si una expresión booleana dada se evalúa como false
:
throw_unless(Auth::user()->isAdmin(), AuthorizationException::class); throw_unless( Auth::user()->isAdmin(), AuthorizationException::class, 'You are not allowed to access this page.');
today()
La función today
crea una nueva instancia de Illuminate\Support\Carbon
para la fecha actual:
$today = today();
trait_uses_recursive()
La función trait_uses_recursive
devuelve todos los traits utilizados por un trait:
$traits = trait_uses_recursive(\Illuminate\Notifications\Notifiable::class);
transform()
La función transform
ejecuta un cierre en un valor dado si el valor no está en blanco y luego devuelve el valor de retorno del cierre:
$callback = function (int $value) { return $value * 2;}; $result = transform(5, $callback); // 10
Se puede pasar un valor predeterminado o un cierre como tercer argumento a la función. Este valor se devolverá si el valor dado está en blanco:
$result = transform(null, $callback, 'The value is blank'); // El valor está en blanco
validator()
La función validator
crea una nueva instancia de validador con los argumentos dados. Puedes usarla como alternativa a la fachada Validator
:
$validator = validator($data, $rules, $messages);
value()
La función value
devuelve el valor que se le da. Sin embargo, si pasas un cierre a la función, se ejecutará el cierre y se devolverá su valor de retorno:
$result = value(true); // true $result = value(function () { return false;}); // false
Se pueden pasar argumentos adicionales a la función value
. Si el primer argumento es un cierre, los parámetros adicionales se pasarán al cierre como argumentos; de lo contrario, se ignorarán:
$result = value(function (string $name) { return $name;}, 'Taylor'); // 'Taylor'
view()
La función view
recupera una instancia de vista:
return view('auth.login');
with()
La función with
devuelve el valor que se le da. Si se pasa un cierre como segundo argumento a la función, se ejecutará el cierre y se devolverá su valor de retorno:
$callback = function (mixed $value) { return is_numeric($value) ? $value * 2 : 0;}; $result = with(5, $callback); // 10 $result = with(null, $callback); // 0 $result = with(5, null); // 5
A veces puede que desees probar rápidamente el rendimiento de ciertas partes de tu aplicación. En esas ocasiones, puedes utilizar la clase de soporte Benchmark
para medir la cantidad de milisegundos que tardan en completarse las devoluciones de llamada dadas:
<?php use App\Models\User;use Illuminate\Support\Benchmark; Benchmark::dd(fn () => User::find(1)); // 0.1 ms Benchmark::dd([ 'Scenario 1' => fn () => User::count(), // 0.5 ms 'Scenario 2' => fn () => User::all()->count(), // 20.0 ms]);
Por defecto, las devoluciones de llamada dadas se ejecutarán una vez (una iteración), y su duración se mostrará en el navegador / consola.
Para invocar una devolución de llamada más de una vez, puedes especificar el número de iteraciones que se debe invocar la devolución de llamada como segundo argumento al método. Al ejecutar una devolución de llamada más de una vez, la clase Benchmark
devolverá la cantidad promedio de milisegundos que tardó en ejecutar la devolución de llamada en todas las iteraciones:
Benchmark::dd(fn () => User::count(), iterations: 10); // 0.5 ms
A veces, es posible que desees probar el rendimiento de la ejecución de una devolución de llamada mientras aún obtienes el valor devuelto por la devolución de llamada. El método value
devolverá una tupla que contiene el valor devuelto por la devolución de llamada y la cantidad de milisegundos que tardó en ejecutar la devolución de llamada:
[$count, $duration] = Benchmark::value(fn () => User::count());
Laravel incluye Carbon, una potente biblioteca de manipulación de fechas y horas. Para crear una nueva instancia de Carbon
, puedes invocar la función now
. Esta función está disponible globalmente dentro de tu aplicación Laravel:
$now = now();
O puedes crear una nueva instancia de Carbon
usando la clase Illuminate\Support\Carbon
:
use Illuminate\Support\Carbon; $now = Carbon::now();
Para obtener una discusión detallada de Carbon y sus características, consulta la documentación oficial de Carbon.
La clase de lotería de Laravel se puede utilizar para ejecutar devoluciones de llamada según un conjunto de probabilidades dados. Esto puede ser particularmente útil cuando solo deseas ejecutar código para un porcentaje de tus solicitudes entrantes:
use Illuminate\Support\Lottery; Lottery::odds(1, 20) ->winner(fn () => $user->won()) ->loser(fn () => $user->lost()) ->choose();
Puedes combinar la clase de lotería de Laravel con otras características de Laravel. Por ejemplo, es posible que desees informar solo un pequeño porcentaje de consultas lentas a tu manejador de excepciones. Y, dado que la clase de lotería es invocable, podemos pasar una instancia de la clase a cualquier método que acepte funciones llamables:
use Carbon\CarbonInterval;use Illuminate\Support\Facades\DB;use Illuminate\Support\Lottery; DB::whenQueryingForLongerThan( CarbonInterval::seconds(2), Lottery::odds(1, 100)->winner(fn () => report('Querying > 2 seconds.')),);
Laravel proporciona algunos métodos simples que te permiten probar fácilmente las invocaciones de lotería de tu aplicación:
// La lotería siempre ganará...Lottery::alwaysWin(); // La lotería siempre perderá...Lottery::alwaysLose(); // La lotería ganará, luego perderá y finalmente volverá al comportamiento normal...Lottery::fix([true, false]); // La lotería volverá al comportamiento normal...Lottery::determineResultsNormally();
La fachada Pipeline
de Laravel proporciona una forma conveniente de "conducir" una entrada dada a través de una serie de clases invocables, cierres o funciones llamables, brindando a cada clase la oportunidad de inspeccionar o modificar la entrada e invocar la siguiente función llamable en la canalización:
use Closure;use App\Models\User;use Illuminate\Support\Facades\Pipeline; $user = Pipeline::send($user) ->through([ function (User $user, Closure $next) { // ... return $next($user); }, function (User $user, Closure $next) { // ... return $next($user); }, ]) ->then(fn (User $user) => $user);
Como puedes ver, cada clase invocable o cierre en la canalización recibe la entrada y un cierre $next
. Invocar el cierre $next
llamará a la siguiente función llamable en la canalización. Como habrás notado, esto es muy similar a middleware.
Cuando la última función llamable en la canalización invoca el cierre $next
, se invocará la función llamable proporcionada al método then
. Típicamente, esta función llamable simplemente devolverá la entrada dada.
Por supuesto, como se discutió anteriormente, no estás limitado a proporcionar cierres a tu canalización. También puedes proporcionar clases invocables. Si se proporciona un nombre de clase, la clase se instanciará a través del contenedor de servicios de Laravel, lo que permitirá inyectar dependencias en la clase invocable:
$user = Pipeline::send($user) ->through([ GenerateProfilePhoto::class, ActivateSubscription::class, SendWelcomeEmail::class, ]) ->then(fn (User $user) => $user);
La clase Sleep
de Laravel es un envoltorio ligero alrededor de las funciones nativas sleep
y usleep
de PHP, ofreciendo una mayor testabilidad y, al mismo tiempo, exponiendo una API amigable para el desarrollador para trabajar con el tiempo:
use Illuminate\Support\Sleep; $waiting = true; while ($waiting) { Sleep::for(1)->second(); $waiting = /* ... */;}
La clase Sleep
ofrece una variedad de métodos que te permiten trabajar con diferentes unidades de tiempo:
// Pausa la ejecución durante 90 segundos...Sleep::for(1.5)->minutes(); // Pausa la ejecución durante 2 segundos...Sleep::for(2)->seconds(); // Pausa la ejecución durante 500 milisegundos...Sleep::for(500)->milliseconds(); // Pausa la ejecución durante 5,000 microsegundos...Sleep::for(5000)->microseconds(); // Pausa la ejecución hasta un tiempo dado...Sleep::until(now()->addMinute()); // Alias de la función "sleep" nativa de PHP...Sleep::sleep(2); // Alias de la función "usleep" nativa de PHP...Sleep::usleep(5000);
Para combinar fácilmente unidades de tiempo, puedes usar el método and
:
Sleep::for(1)->second()->and(10)->milliseconds();
Al probar código que utiliza la clase Sleep
o las funciones nativas de sueño de PHP, tu prueba pausará la ejecución. Como puedes imaginar, esto hace que tu suite de pruebas sea significativamente más lenta. Por ejemplo, imagina que estás probando el siguiente código:
$waiting = /* ... */; $seconds = 1; while ($waiting) { Sleep::for($seconds++)->seconds(); $waiting = /* ... */;}
Normalmente, probar este código llevaría al menos un segundo. Afortunadamente, la clase Sleep
nos permite "simular" el sueño para que nuestra suite de pruebas se mantenga rápida:
public function test_it_waits_until_ready(){ Sleep::fake(); // ...}
Cuando falsificas la clase Sleep
, se pasa por alto la pausa real de la ejecución, lo que conduce a una prueba sustancialmente más rápida.
Una vez que la clase Sleep
ha sido falsificada, es posible hacer afirmaciones sobre los "sueños" esperados que deberían haber ocurrido. Para ilustrar esto, imaginemos que estamos probando código que pausa la ejecución tres veces, con cada pausa aumentando en un segundo. Usando el método assertSequence
, podemos afirmar que nuestro código "durmió" durante la cantidad adecuada de tiempo mientras mantenemos nuestra prueba rápida:
public function test_it_checks_if_ready_four_times(){ Sleep::fake(); // ... Sleep::assertSequence([ Sleep::for(1)->second(), Sleep::for(2)->seconds(), Sleep::for(3)->seconds(), ]);}
Por supuesto, la clase Sleep
ofrece una variedad de otras afirmaciones que puedes usar al hacer pruebas:
use Carbon\CarbonInterval as Duration;use Illuminate\Support\Sleep; // Asegura que sleep fue llamado 3 veces...Sleep::assertSleptTimes(3); // Asegura contra la duración de sleep...Sleep::assertSlept(function (Duration $duration): bool { return /* ... */;}, times: 1); // Asegura que la clase Sleep nunca fue invocada...Sleep::assertNeverSlept(); // Asegura que, incluso si Sleep fue llamado, no ocurrió ninguna pausa en la ejecución...Sleep::assertInsomniac();
A veces puede ser útil realizar una acción cada vez que ocurre un falso sueño en el código de tu aplicación. Para lograr esto, puedes proporcionar un retorno de llamada al método whenFakingSleep
. En el siguiente ejemplo, usamos las herramientas de manipulación de tiempo de Laravel para avanzar instantáneamente en el tiempo por la duración de cada sueño:
use Carbon\CarbonInterval as Duration; $this->freezeTime(); Sleep::fake(); Sleep::whenFakingSleep(function (Duration $duration) { // Avanza el tiempo al fingir el sleep... $this->travel($duration->totalMilliseconds)->milliseconds();});
Laravel utiliza la clase Sleep
internamente siempre que pausa la ejecución. Por ejemplo, el ayudante retry
utiliza la clase Sleep
al dormir, lo que permite una mejor testabilidad al usar ese ayudante.