📜  laravel 同路由不同组 - PHP (1)

📅  最后修改于: 2023-12-03 15:17:14.262000             🧑  作者: Mango

Laravel 同路由不同组

在 Laravel 中,我们可以使用同一个路由但在不同的组中运行不同的操作。这在开发时非常有用,因为它可以让我们快速轻松地对不同的请求和权限进行操作。

定义路由

要定义带有多个组的路由,我们可以按照以下方式来定义:

Route::prefix('admin')
    ->middleware(['auth', 'admin'])
    ->group(function () {
        // 该组下的路由需要认证和管理员权限
        Route::get('/dashboard', 'Admin\DashboardController@index');
        
        Route::prefix('users')
            ->group(function () {
                // 该组下的路由需要认证,但不需要管理员权限
                Route::get('/', 'Admin\UserController@index');
                
                // 该组下的路由仅需要认证和特定角色权限
                Route::get('/{user}', 'Admin\UserController@show')
                    ->middleware('can:view,user');
            });
    });

Route::middleware('auth')
    ->group(function () {
        // 该组下的路由仅需要认证
        Route::get('/profile', 'ProfileController@index');
    });

在上面的示例中,我们有两个路由组,/admin/(不带前缀)。/admin 组要求身份验证和管理员权限,而 /profile/admin/users 仅需要身份验证。

注意在定义路由时使用 Route::prefixRoute::middlewareRoute::group 方法,以便为每个路由定义组。

在控制器中定义操作

现在,我们已经定义了路由组,下一步就是在控制器中定义每个路由的操作。为了示例,我们将创建两个控制器,并将其放置在不同的命名空间中:

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;

class DashboardController extends Controller
{
    public function index()
    {
        return view('admin.dashboard');
    }
}

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;

class UserController extends Controller
{
    public function index()
    {
        return view('admin.users.index');
    }

    public function show(User $user)
    {
        return view('admin.users.show', compact('user'));
    }
}

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class ProfileController extends Controller
{
    public function index()
    {
        return view('profile');
    }
}

在上面的示例中,我们为每个路由定义了不同的控制器和操作。注意在定义 UserController@show 时使用了 Route 模型绑定。

结论

通过使用 Laravel 的路由组和控制器,我们可以轻松地为每个路由定义不同的操作和权限。使用这些技术,我们可以在短时间内构建强大的 Web 应用程序,满足多种需求和要求。