Laravel Breeze
Com instal·lar i personalitzar Laravel Breeze per a autenticació ràpida amb Blade, React o Vue.
Què és Breeze?#
Laravel Breeze és un starter kit d'autenticació minimalista que proporciona una implementació completa de registre, login, restabliment de contrasenya, verificació d'email i confirmació de contrasenya. A diferència d'altres solucions, Breeze publica tot el codi a la teva aplicació: controladors, vistes, rutes i tests. Això significa que tens control total sobre cada aspecte de l'autenticació i pots modificar qualsevol cosa.
Breeze és la opció recomanada per a la majoria de projectes nous. Si necessites funcionalitats més avançades com autenticació de dos factors o gestió d'equips, pots considerar Jetstream.
Instal·lació#
Primer, instal·la el paquet amb Composer en un projecte Laravel nou:
composer require laravel/breeze --devDesprés, executa l'instal·lador que et preguntarà quin stack de frontend vols utilitzar:
php artisan breeze:installLes opcions disponibles són:
# Blade amb Tailwind CSS (el més senzill)
php artisan breeze:install blade
# Livewire amb components Volt
php artisan breeze:install livewire
# Inertia amb React
php artisan breeze:install react
# Inertia amb Vue
php artisan breeze:install vue
# Només API (sense vistes, ideal per SPAs separades)
php artisan breeze:install apiDesprés de la instal·lació, compila els assets i executa les migracions:
npm install && npm run dev
php artisan migrateL'opció blade és la més senzilla i directa: genera vistes Blade amb Tailwind CSS. Les opcions React i Vue utilitzen Inertia.js per crear SPAs amb routing del servidor. L'opció api és per quan el frontend està completament separat (per exemple, un projecte Next.js o Nuxt).
Què genera Breeze?#
Breeze crea els fitxers següents a la teva aplicació:
app/Http/Controllers/Auth/
├── AuthenticatedSessionController.php // Login/Logout
├── ConfirmablePasswordController.php // Confirmació de contrasenya
├── EmailVerificationNotificationController.php
├── EmailVerificationPromptController.php
├── NewPasswordController.php // Nova contrasenya
├── PasswordController.php // Canviar contrasenya
├── PasswordResetLinkController.php // Enviar link de reset
├── RegisteredUserController.php // Registre
└── VerifyEmailController.php // Verificació d'email
resources/views/auth/
├── confirm-password.blade.php
├── forgot-password.blade.php
├── login.blade.php
├── register.blade.php
├── reset-password.blade.php
└── verify-email.blade.php
routes/auth.php // Totes les rutes d'autenticació
tests/Feature/Auth/ // Tests complets per a cada funcionalitat
Les rutes d'autenticació es registren automàticament al fitxer routes/auth.php, que s'inclou des de routes/web.php.
Personalitzar el registre#
Un dels avantatges de Breeze és que pots modificar directament el controlador de registre per afegir camps o canviar la lògica:
// app/Http/Controllers/Auth/RegisteredUserController.php
public function store(Request $request): RedirectResponse
{
$request->validate([
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'confirmed', Rules\Password::defaults()],
// Afegir camps personalitzats
'phone' => ['nullable', 'string', 'max:20'],
'company' => ['nullable', 'string', 'max:255'],
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
'phone' => $request->phone,
'company' => $request->company,
]);
event(new Registered($user));
Auth::login($user);
return redirect(route('dashboard', absolute: false));
}De la mateixa manera, pots modificar les vistes a resources/views/auth/ per afegir els nous camps al formulari, canviar l'estil o afegir informació addicional.
Personalitzar el login#
Pots modificar el controlador de login per afegir condicions, lògica addicional o canviar la redirecció:
// app/Http/Controllers/Auth/AuthenticatedSessionController.php
public function store(LoginRequest $request): RedirectResponse
{
$request->authenticate();
$request->session()->regenerate();
// Redirigir segons el rol
if ($request->user()->role === 'admin') {
return redirect()->route('admin.dashboard');
}
return redirect()->intended(route('dashboard', absolute: false));
}Personalitzar les vistes#
Les vistes de Breeze utilitzen Tailwind CSS per defecte i tenen un disseny net i responsiu. Pots personalitzar-les completament:
{{-- resources/views/auth/login.blade.php --}}
<x-guest-layout>
<form method="POST" action="{{ route('login') }}">
@csrf
<div>
<x-input-label for="email" :value="__('Correu electrònic')" />
<x-text-input
id="email"
type="email"
name="email"
:value="old('email')"
required
autofocus
autocomplete="username"
/>
<x-input-error :messages="$errors->get('email')" class="mt-2" />
</div>
<div class="mt-4">
<x-input-label for="password" :value="__('Contrasenya')" />
<x-text-input
id="password"
type="password"
name="password"
required
autocomplete="current-password"
/>
<x-input-error :messages="$errors->get('password')" class="mt-2" />
</div>
<div class="flex items-center justify-between mt-4">
<label class="flex items-center">
<input type="checkbox" name="remember" class="rounded">
<span class="ml-2 text-sm">{{ __('Recorda\'m') }}</span>
</label>
@if (Route::has('password.request'))
<a href="{{ route('password.request') }}" class="text-sm hover:underline">
{{ __('Has oblidat la contrasenya?') }}
</a>
@endif
</div>
<div class="mt-4">
<x-primary-button class="w-full justify-center">
{{ __('Iniciar sessió') }}
</x-primary-button>
</div>
</form>
</x-guest-layout>Breeze genera components Blade reutilitzables a resources/views/components/ com text-input, input-label, input-error i primary-button que pots modificar per adaptar-los al disseny de la teva aplicació.
Tests inclosos#
Breeze genera tests complets per a totes les funcionalitats d'autenticació a tests/Feature/Auth/. Això inclou tests per al registre, login, logout, restabliment de contrasenya, verificació d'email i confirmació de contrasenya:
php artisan test --filter=Auth
# Tests inclosos:
# RegistrationTest
# AuthenticationTest
# PasswordResetTest
# EmailVerificationTest
# PasswordConfirmationTest
# PasswordUpdateTestAquests tests són un punt de partida excel·lent i s'haurien de mantenir actualitzats quan modifiquis la lògica d'autenticació.