@extends('layouts.app')
@section('content')
A Bootstrap 5
A
A
Bootstrap 5 rengeteg .text-primary .text-success .text-danger .text-warning .text-info .text-muted .text-decoration-underline .fw-bold .fst-italic Használd
💡 Ehhez A +
Bootstrap 5
🎯 Rács- és Flex rendszer
.container, .row és .col-* osztályokra épül.
A rácsot a flexbox motor működteti, így a d-flex utility-kkel is szabadon kiegészíthető.
Container példa (fix max-szélesség)
Container-fluid példa (teljes szélesség)
💪 Flexbox alapok
.d-flex + .flex-fill = elemek egy sorban, egyenlő szélességgel
Vízszintes igazítás –
justify-content-*Függőleges igazítás –
align-items-* és align-self-*d-flex szülőben az egyes elemek align-self-* osztályokkal önállóan igazíthatók függőlegesen.
Függőleges igazítás – külön sorokban
Irány & tördelés –
flex-row / flex-column / flex-wrap.flex-wrap engedélyezi, hogy az elemek új sorba törjenek.
Gap és sorrend
gap-* spacing a flex-elemek közötti rést szabályozza,
az order-* a megjelenítési sorrendet.🎨 Színek, szöveg és háttér effektek
.text-* és .bg-* utility osztályt kínál.
Szöveg színek
Háttér színek
Keretek és árnyékok
Gradiensek & Átlátszóság
Szöveg vágása (Text truncation)
.text-truncate osztályt a túl hosszú szövegek levágására:display: inline-block vagy block kell, valamint fix szélesség.
Vertical rule (függőleges elválasztó)
.vr elem border-left-ot használ, automatikus magassággal és margin-nal.🧾 Forms – Checks & Radios + Validálás
ℹ️ Hogyan működik a validálás?
novalidate + .needs-validation a formonrequired, minlength, type=email stb..invalid-feedback blokk.was-validated-et@ error + is-invalid + server üzenet
:root változókkalCSS változókkal (--bs-*) kezelhetők.
Ezeket a :root szintjén bármikor bővítheted vagy felülírhatod, és így saját stílusosztályokat hozhatsz létre.
/* resources/sass/_custom.scss */:root { /* Saját színek */ --bs-brand: #7952b3; --bs-accent: #ff5722; /* Saját árnyalatok a dark módhoz (opcionális) */ [data-bs-theme="dark"] { --bs-brand: #b48cff; --bs-accent: #ff8a50; } }/* Új Bootstrap-kompatibilis osztályok */.btn-brand { --bs-btn-bg: var(--bs-brand); --bs-btn-border-color: var(--bs-brand); --bs-btn-hover-bg: color-mix(in oklab, var(--bs-brand) 85%, black); --bs-btn-hover-border-color: color-mix(in oklab, var(--bs-brand) 75%, black); --bs-btn-color: #fff; } .text-accent { color: var(--bs-accent) !important; } .bg-accent { background-color: var(--bs-accent) !important; } .border-accent { border-color: var(--bs-accent) !important; }
A _custom.scss fájl az app.scss fájlba van importálva @import "custom"; így az app.blade.php fájl head tag-ban nem kell további vite importokat alkalmazni.
Most már bármelyik komponensnél használhatod:
Ez egy kiemelt szöveg
Accent keretes doboz
A Bootstrap rengeteg előre definiált változót tartalmaz, amiket te is használhatsz saját komponensekhez:
.card-custom {
background-color: var(--bs-body-bg);
color: var(--bs-body-color);
border: 1px solid var(--bs-border-color);
box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.1);
transition: background-color 0.3s, color 0.3s;
}
.card-custom:hover {
background-color: var(--bs-body-bg);
color: var(--bs-primary);
}
Ez a doboz a Bootstrap változókat használja — automatikusan vált a Dark / Light mód között!
:root-ban a --bs-* változókat, hogy ne kelljen a Bootstrap forrást módosítanod.color-mix()-et árnyalatok előállításához.resources/css/app.css vagy custom.css végére, hogy felülírja az alapot.[data-bs-theme="dark"] blokkban újra beállíthatod a változókat.A bootstrap-icons csomag több mint 1800 ikont tartalmaz.
Használat: <i class="bi bi-ikon-név"></i>
bi-alarm
bi-arrow-up-circle
bi-bell
bi-box
bi-braces
bi-bug
bi-camera
bi-check-circle
bi-cloud-sun
bi-cpu
bi-github
bi-bootstrap-fill
.fs-* osztályokkal
.text-* osztályokkal
🔗 Teljes lista: icons.getbootstrap.com
collapse-szal.Primary Secondary Success Danger Warning Info Light Dark
Kép nélkül is működik. Tetszés szerint bővíthető listákkal, gombokkal.
A választott beállításokat elmentjük, és újratöltés után is megmaradnak.
composer require laravel/sanctum →
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" →
php artisan migrate. Az api middleware-csoportban legyen az EnsureFrontendRequestsAreStateful is, ha SPA auth-ot használsz.
// routes/api.php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::post('/login', [\App\Http\Controllers\AuthTokenController::class, 'login']);
Route::middleware('auth:sanctum')->group(function () {
Route::get('/user', function (Request $request) {
return $request->user();
});
Route::post('/logout', [\App\Http\Controllers\AuthTokenController::class, 'logout']);
});
// app/Http/Controllers/AuthTokenController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthTokenController extends Controller
{
public function login(Request $request)
{
$credentials = $request->validate([
'email' => ['required','email'],
'password' => ['required'],
]);
if (! Auth::attempt($credentials)) {
return response()->json(['message' => 'Invalid credentials'], 401);
}
$user = $request->user();
$token = $user->createToken('api-token')->plainTextToken;
return response()->json([
'token' => $token,
'token_type' => 'Bearer',
]);
}
public function logout(Request $request)
{
// aktuális token visszavonása
$request->user()->currentAccessToken()->delete();
return response()->json(['message' => 'Logged out']);
}
}
# LOGIN → token visszaadása
curl -X POST http://localhost:8000/api/login \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"secret"}'
# VÉDETT ENDPOINT → Bearer tokennel
curl http://localhost:8000/api/user \
-H "Authorization: Bearer <TOKEN>"
Route::middleware('auth:sanctum') védi a route-okat.
Tokenes módnál az Authorization: Bearer <token> fejléc szükséges.
SPA cookie-s módnál állítsd be a config/sanctum.php stateful domainjeit (pl. app.example.com, api.example.com).
Bearer token fejléccel hitelesít külső/mobil klienseknél.personal_access_tokens táblában, hash-elve.auth:sanctum middleware-védelem route-okra.Laravel verzió: {{ app()->version() }}
PHP verzió: {{ PHP_VERSION }}
Sanctum telepítve: {{ class_exists('Laravel\\Sanctum\\Sanctum') ? 'igen ✅' : 'nem ❌' }}
@php $stateful = config('sanctum.stateful') ?? []; $hasTokens = \Illuminate\Support\Facades\Schema::hasTable('personal_access_tokens'); @endphpToken tábla: {{ $hasTokens ? 'rendben ✅' : 'hiányzik ❌' }}
Stateful domainek:
{{ implode(', ', (array) $stateful) ?: '— nincs beállítva —' }}
Token:
Mail facáddal és Mailable osztályokkal végzi.
Fejlesztéshez ajánlott: Mailtrap vagy HELO.
# .env (példa Mailtrap smtp-hez)
MAIL_MAILER=smtp
MAIL_HOST=sandbox.smtp.mailtrap.io
MAIL_PORT=587
MAIL_USERNAME=YOUR_USER
MAIL_PASSWORD=YOUR_PASS
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@example.com
MAIL_FROM_NAME="Demo App"
// Terminál:
php artisan make:mail DemoMail --markdown=emails.demo
// app/Mail/DemoMail.php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class DemoMail extends Mailable
{
use Queueable, SerializesModels;
public function __construct(public string $name, public string $messageText) {}
public function build()
{
return $this->subject('Üdv a Demo App-ban')
->markdown('emails.demo', [
'name' => $this->name,
'messageText' => $this->messageText,
]);
}
}
{{-- resources/views/emails/demo.blade.php --}}
{{-- @component('mail::message')--}}
{{-- # Szia, {{$name}}!--}}
{{-- {{$messageText}}--}}
{{-- @component('mail::button', ['url' => config('app.url')])--}}
{{-- Ugorj az oldalra--}}
{{-- @endcomponent--}}
{{-- Üdv,
--}}
{{-- {{ config('app.name') }}--}}
{{-- @endcomponent--}}
// routes/web.php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Mail\DemoMail;
Route::post('/mail-test', function (Request $req) {
$validated = $req->validate([
'email' => ['required','email'],
'name' => ['required','string'],
'message' => ['required','string'],
]);
Mail::to($validated['email'])->send(
new DemoMail(name: $validated['name'], messageText: $validated['message'])
);
return back()->with('status','Mail elküldve!');
})->name('mail.test');
// (Opcionális) Előnézet böngészőben:
Route::get('/mail-preview', function () {
return new DemoMail(name: 'István', messageText: 'Ez egy előnézeti üzenet.');
});
# cURL példa (ha a form még nincs kész):
curl -X POST http://localhost:8000/mail-test \
-H "Content-Type: application/x-www-form-urlencoded" \
--data "email=you@example.com&name=Istvan&message=Szia%2C%20ez%20egy%20teszt!"
# vagy böngésző:
http://localhost:8000/mail-preview
Ez egy elrejthető/megnyitható oldalsáv.