Laravel 10.x pamoka. Maršrutai

Maršrutai yra aprašomi faile ../library/routes/web.php.
Kaip jau buvo aptarta anksčiau, maršrutai gali grąžinti vaizdą. Tam naudojamas view() metodas:
Route::view('/', 'pages.home');
Route::view('/home', 'pages.home');
Route::view('/about', 'pages.about');
Route::view('/contacts', 'pages.contacts');
Tuomet Blade šablone atitinkamai galima naudoti HTML nuorodas:
<ul>
    <li>
        <a href="/">Home</a>
    </li>
    <li>
        <a href="/about">About us</a>
    </li>
    <li>
        <a href="/contacts">Contacts</a>
    </li>
</ul>
arba url() funkciją:
<ul>
    <li>
        <a href="{{ url('home') }}">Home</a>
    </li>
    <li>
        <a href="{{ url('about') }}">About us</a>
    </li>
    <li>
        <a href="{{ url('contacts') }}">Contacts</a>
    </li>
</ul>
Tačiau maršrutams galima kurti pavadinimus, panaudojant metodą name():
Route::get('/', function () {
    return view('pages.home');
})->name('home');
Route::get('/home', function () {
    return view('pages.home');
})->name('home');
Route::get('/about', function () {
    return view('pages.about');
})->name('about');
Route::get('/contacts', function () {
    return view('pages.contacts');
})->name('contacts');
Tuomet Blade šablone atitinkamai galima naudoti route() funkciją ir perduoti jai parametrą - maršruto pavadinimą:
<ul>
    <li>
        <a href="{{ route('home') }}">Home</a>
    </li>
    <li>
        <a href="{{ route('about') }}">About us</a>
    </li>
    <li>
        <a href="{{ route('contacts') }}">Contacts</a>
    </li>
</ul>
Tai yra patogu, nes pasikeitus nuorodoms, jums užteks jas pataisyti maršrutų faile, neredaguojant nuorodų Blade šablonuose.
Kaip jau žinote, standartiniai maršrutai yra tokie:
Route::get('/admin/authors', [App\Http\Controllers\Admin\AuthorsController::class, 'index']);
Route::get('/admin/authors/create', [App\Http\Controllers\Admin\AuthorsController::class, 'create']);
Route::post('/admin/authors', [App\Http\Controllers\Admin\AuthorsController::class, 'store']);
Route::get('/admin/authors/{id}', [App\Http\Controllers\Admin\AuthorsController::class, 'show']);
Route::get('/admin/authors/{id}/edit', [App\Http\Controllers\Admin\AuthorsController::class, 'edit']);
Route::patch('/admin/authors/{id}', [App\Http\Controllers\Admin\AuthorsController::class, 'update']);
Route::delete('/admin/authors/{id}', [App\Http\Controllers\Admin\AuthorsController::class, 'destroy']);
Tačiau visus šiuos maršrutus galima aprašyti viena eilute:
Route::resource('admin/authors', App\Http\Controllers\Admin\AuthorsController::class);
Atitinkamai pakeiskite ir visus kitus maršrutus.

Naudotojų nukreipimas į skirtingus puslapius priklausomai nuo rolės

Atsidarykite failą ../library/app/Providers/RouteServiceProvider.php ir eilutę:
public const HOME = '/dashboard';
pakeiskite į:
public const HOME = 'redirects';
Komandinėje eilutėje sukurkite Home valdiklį su --invokable parametru:
php artisan make:controller HomeController --invokable
Home valdikliui nurodykite, kad naudosite klasę Auth:
use Illuminate\Support\Facades\Auth;
Taip pat šio valdiklio metode __invoke() įrašykite kodą:
if (Auth::user()->hasRole(['admin', 'librarian'])) {
    return redirect('/admin');
}
else {
    return redirect('/');
}
Šis kodas reiškia, kad jeigu naudotojas turi rolę admin arba librarian, tai jis bus nukreiptas į administravimo panelę.
Maršrutams aprašyti naudosime tarpinę programinę įrangą (angl. middleware), t. y. Spatie laravel-permission paketą, kurį jau įsidiegėme anksčiau, bet dabar turime tai nurodyti Laravel karkasui. Atsidarykite failą ../library/app/Http/Kernel.php ir įrašykite jame šias eilutes:
protected $routeMiddleware = [
    ...
    'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
    'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
    'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
];
Maršrutų faile sugrupuokime visus maršrutus pagal roles. Tam yra naudojamas metodas group():
Route::get('redirects', App\Http\Controllers\HomeController::class);
Route::group(['middleware' => ['role:admin|librarian']], function () {
    Route::get('/admin', function () {
        return view('admin.dashboard');
    });

    Route::resource('admin/authors', App\Http\Controllers\Admin\AuthorsController::class);
    Route::resource('admin/publishers', App\Http\Controllers\Admin\PublishersController::class);
    Route::resource('admin/books', App\Http\Controllers\Admin\BooksController::class);
    Route::resource('admin/genres', App\Http\Controllers\Admin\GenresController::class);
});

Route::group(['middleware' => ['role:admin']], function () {
    Route::resource('admin/roles', App\Http\Controllers\Admin\RolesController::class);
    Route::resource('admin/users', App\Http\Controllers\Admin\UsersController::class);
});
Daugiau apie maršrutus skaitykite oficialioje Laravel 10.x dokumentacijoje, skiltyje Routing.

Paskutinį kartą puslapis keistas 2023-04-24

© Joana Katina 2016-2024. Visos teisės saugomos