
当你想把一个属性应用于所有的路由时,路由组是有帮助的。
Laravel 8 路由组
Laravel 8路由组 允许你将所有与你的模块相关的路由分组。路由组采取一个数组,可以采取属性和回调函数。路由组允许你共享属性,如中间件,前缀,或命名空间,而无需在每个路由上定义这些属性。
这些共享的属性可以以数组的形式作为第一个参数传给**Route::group()**函数。
例如,如果你想对不同的路由应用一个命名空间,你可以创建一个路由组,然后对该组使用命名空间。
语法
Route::group( [ ] , callback);
参数
group()函数接收一个传递给group方法的数组作为第一个参数。第二个参数是回调 函数。
在Laravel 8中定义路由组
在定义路由组之前, 让我们为我们的项目创建一个命名空间.
第1步: 定义命名空间.
Laravel命名空间被定义为一个元素类,其中每个元素都有一个唯一的名字,与相关的类。
要在Laravel中创建一个自定义的命名空间, 使用下面的命令创建一个单独的控制器,用正斜线(/)。
php artisan make:controller Admin/UserController --resource --model=User
UserController将被创建在Admin目录下的app >> Http >> Controllers文件夹内。
在UserController的 index()方法中添加以下代码。
// UserController.php
public function index()
{
return 'Yes!! Admin namespace is working successfully';
}
第2步:定义group()函数。
要编写Admin命名空间路由,打开路由>>web.php 文件并添加以下代码。
// web.php
Route::namespace('Admin')->group(function() {
Route::resource('users', 'UserController');
});
在这里,我们为路由用户分配了一个命名空间Admin。你可以在这里看到,我们使用group()方法将路由分组。 我们也可以把这段代码写得更好,像下面这样。
// web.php
Route::group(['namespace' => 'Admin'], function() {
Route::resource('users', 'UserController');
});
这里,我们使用了group()函数,它需要两个参数,正如语法中提到的。
- 数组
- 回调函数
第一个参数是一个关联数组,包含路由组的命名空间、前缀 或 中间件 。保存文件并进入http://localhost:8000/users。 你会看到`是的!管理命名空间正在成功工作`。
在这里, 你可以添加尽可能多的路由, 归类到管理命名空间下.
// web.php
Route::group(['namespace' => 'Admin'], function() {
Route::resource('users', 'UserController');
Route::resource('sales', 'SalesController');
Route::resource('marketings', 'MarketingController');
});
Laravel 8 路径前缀
当我们想提供一个标准的URL结构时,路径前缀是很有用的。例如, 在我们的应用程序中, 我们正在为管理模块创建功能, 这意味着我们可以为管理功能下的所有路由创建一个标准前缀admin 。
为了增加路径前缀,在路由组的关联数组参数中增加一个项目,称为prefix 作为键,admin 作为值。
// web.php
Route::group(['namespace' => 'Admin', 'prefix' => 'admin'], function() {
Route::resource('users', 'UserController');
});
现在, 你的URL应该是http://localhost:8000/admin/users**而不是**http://localhost:8000/users.
Laravel 8中间件
中间件提供了一个方便的机制来过滤进入你的应用程序的HTTP请求。我们也可以将中间件分配给一个组内的所有路由。我们可以在关联数组中增加一个属性,其键是middleware ,值是**'middleware name** '。
在这个例子中, 我们将使用 auth 中间件, 所以在你的终端键入以下命令,以scaffold Laravel提供的 auth 模块。
php artisan ui:auth
现在我们要保护管理路线,所以我们将使用auth中间件 来管理 路线。要做到这一点, 在web.php 文件中写下以下代码.
// web.php
Route::group(['namespace' => 'Admin',
'prefix' => 'admin',
'middleware' => 'auth'], function() {
Route::resource('users', 'UserController');
});
现在, 我们的管理路线是受保护的, 如果你已经登录到应用程序, 你将能够看到内容。否则,你将会被重定向到登录页面。
进入这个URL**:http://localhost:8000/admin/users,**你将被重定向到**http://localhost:8000/** 登录页面。因此,这就是你如何可以多个路由,并将它们分配到一个共享命名空间、前缀和中间件的路由的公共组。