Laravel 10.x pamoka. Maršrutai
Maršrutai yra aprašomi faile
Kaip jau buvo aptarta anksčiau, maršrutai gali grąžinti vaizdą. Tam naudojamas
Kaip jau žinote, standartiniai maršrutai yra tokie:
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/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.