Le coin geek • Laravel 8, disponible !

Laravel 8, disponible !

Laravel 8 est disponible depuis quelque temps déjà, il apporte son lot de nouveautés, notamment Laravel JetStream ainsi qu'un répertoire pour les models, les « Models Factory Classes », des assistants de temps pour vos test unitaires, des composants dynamique et bien d’autre fonctionnalitées.

Laravel Jetstream

Laravel Jetstream est votre nouveau point de départ. Comme l’a été Laravel/ui. Il vous offre, comme fonctionnalités :

  • La connexion
  • L’enregistrement
  • La gestion de session
  • Le support du votre API via Laravel Sanctum
  • La gestion d’équipe

Quelques obligations cependant quant à son utilisation. En effet, Laravel Jetstream à été conçu avec le framework css tailwindcss et le package vous demandera de choisir entre Livewire ou Inertia.js lors de la création de votre application.

Répertoire des models

Le squelette de votre application contient désormais un dossier « Models » dans le répertoire app/ . Toutes les commandes de laravel supposent que le dossier models existe, cependant si celui n’est pas présent, le framework supposera que les models sont placés directement à la racine du dossier app/

Les « Model Factory Classes »

Ces modèles sont maintenant basés sur des classes, souvenez vous, dans les versions précédentes de laravel, nous écrivions nos « factory » comme cela :

// LARAVEL 7 OR BEFORE

use Faker\Generator as Faker;
use Illuminate\Support\Str;

$factory->define(App\User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
        'remember_token' => Str::random(10),
    ];
});

Aujourd’hui nos Factory ressemblerons à ça :

<?php
// LARAVEL 8

namespace Database\Factories;

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class UserFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = User::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'name' => $this->faker->name,
            'email' => $this->faker->unique()->safeEmail,
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
            'remember_token' => Str::random(10),
        ];
    }
}

Il faudra cependant vérifier que votre model utilise bien le trait HasFactory

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use HasFactory;
}

Gérer le temps pendant vos tests

Vous allez désormais pouvoir contrôler le temps facilement lors de vos tests puisque Laravel fournis maintenant des aides pratiques :

// Voyage dans le future
$this->travel(5)->milliseconds();
$this->travel(5)->seconds();
$this->travel(5)->minutes();
$this->travel(5)->hours();
$this->travel(5)->days();
$this->travel(5)->weeks();
$this->travel(5)->years();

// Voyage dans le passé
$this->travel(-5)->hours();

// Voyage à un moment précis.
$this->travelTo(now()->subHours(6));

// Retour au présent
$this->travelBack();