Laravel 5.7 continua las mejoras realizadas en Laravel 5.6 introduciendo Laravel Nova, verificación opcional por email a la generación automática de autenticación, soporte para usuarios invitados en políticas y puertas de acceso, mejoras en pruebas para comandos de consola, integración del servidor de prueba de Symfony, notificaciones localizables, y una variedad de correcciones y mejoras de usabilidad.

Laravel Nova

Laravel Nova es un panel de administración para aplicaciones Laravel. Por supuesto, la principal característica de Nova es la habilidad de administrar tus registros de base de datos a través de Eloquent. Adicionalmente, Nova ofrece soporte para filtros, lentes, acciones, acciones encoladas, métricas, autorización, herramientas personalizadas, tarjetas personalizadas, campos personzalidos y más.

Para aprender más acerca de Laravel Nova, revisa el sitio en el siguiente enlace: Laravel Nova

Email Verification

Laravel 5.7 introduce verificación por email opcional a la generación automática de autenticación incluída en el framework. Para permitir esta funcionalidad, se agregó una columna email_verified del tipo timestamp a la tabla de usuarios incluída por defecto.

Para requerir que los usuarios recién registrados validen su email, el modelo User debería marcarse con la interfaz MustVerifyEmail:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements MustVerifyEmail
{
    // ...
}

Una vez que el usuario User es marcada con la interfaz, los usuarios registrados recibirán un email que contiene un enlace de verificación firmado.
Una vez que se hace clic en el enlace, Laravel automáticamente va a guardar el tiempo actual en la base de datos y va a redirigir al usuario a una ubicación de tu elección.

Un middleware verified se agregó al Kernel HTTP de la aplicación por defecto.
Este middleware puede agregarse a las rutas que solo puedan ser accedidos por usuarios verificados.

'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

Para aprender más sobre verificación por email, revisa la documentación completa en el siguiente enlace: Verificación por email

Politicas y puertas para usuarios invitados

En versiones previas de Laravel, las puertas y políticas automaticamente retornaban falso para los usuarios no-autenticados en tu aplicación. Sin embargo, ahora puedes permitir que tus usuarios invitados pasen las validaciones de autorización declarando un "type-hint" opcional o utilizando un valor nulo por defecto en la definición del argumento del usuario:

Gate::define('update-post', function (?User $user, Post $post) {
    // ...
});

Servidor de prueba de Symfony

Laravel 5.7 ofrece integración con el servidor de prueba de Symfony, a través del paquete de Marcel Pociot. Para comenzar, utiliza el comando de Artisan:

php artisan dump-server

Una vez que el servidor está corriendo, todos los pedidos de "dump" serán mostrados en el servidor en la ventana de la consola en lugar de en tu navegador, permitiendote inspeccionar los valores sin tener que luchar con el resultado de la respuesta HTTP.

Localización de las notificaciones

Laravel ahora permite enviar notificaciones en otra localización que la actual, y permite recordar la localización cuando la notificación es encolada.

Para conseguir esto, la clase Illuminate\Notifications\Notification ahora ofrece un método locale para setear el lenguaje deseado. La aplicación cambia a este locale cuando la notificación está siendo formateada, y vuelve al locale anterior una vez que termina de formatearlo:

$user->notify((new InvoicePaid($invoice))->locale('es'));

La localización de múltiples notificaciones puede realizarse mediante la fachada Notification:

Notification::locale('es')->send($users, new InvoicePaid($invoice));

Pruebas de comandos de consola

Laravel 5.7 te permite fácilmente "mockear" información suministrada por el usuario para tus comandos de consola usando el método expectsQuestion. Además, puedes especificar un código de salida y un texto esperado como resultado del comando para validar con los métodos assertExitCode y expectsOutput. Por ejemplo, considera el siguiente comando de consola:

Artisan::command('question', function () {
    $name = $this->ask('What is your name?');

    $language = $this->choice('Which language do you program in?', [
        'PHP',
        'Ruby',
        'Python',
    ]);

    $this->line('Your name is '.$name.' and you program in '.$language.'.');
});

Puedes probar este comando con la siguiente prueba que utiliza los métodos mencionados anteriormente:

/**
 * Test a console command.
 *
 * @return void
 */
public function test_console_command()
{
    $this->artisan('laracon')
         ->expectsQuestion('What is your name?', 'Taylor Otwell')
         ->expectsQuestion('Which language do you program in?', 'PHP')
         ->expectsOutput('Your name is Taylor Otwell and you program in PHP.')
         ->assertExitCode(0);
}

Sintáxis de Callables en el generador de URLs

En lugar de aceptar solamente strings, el generador de URLs de Laravel ahora acepta sintáxis callable cuando genera URLs en sus acciones de controlador:

action([UserController::class, 'index']);

Laravel 5.7 te permite controlar cuantos enlaces adicionales mostrar a cada lado de la botonera de tu paginador. Por defecto, tres enlaces se mostraran a cada lado. Sin embargo, puedes controlar este número usando el método onEachSide:

{{ $paginator->onEachSide(5)->links() }}

Streams de lectura y escritura para el Filesystem

La integración Flysystem de Laravel ahora ofrece los métodos readStream y writeStream:

Storage::disk('s3')->writeStream(
    'remote-file.zip',
    Storage::disk('local')->readStream('local-file.zip')
);