📜  laravel 8 路由命名空间 - PHP (1)

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

Laravel 8 路由命名空间

介绍

在 Laravel 8 中,路由命名空间是一项全新功能。它允许你将控制器放置在指定的命名空间下,使你可以更好地组织和管理项目中的控制器。

在使用命名空间时,你可以配置不同的命名空间来处理相似请求的不同变体。例如,你可以使用不同的命名空间来处理 Web 和 API 请求。

配置

首先,你需要对控制器进行命名空间配置。在控制器中,可以使用 namespace 进行设置。

例如,我们可以将 HomeController 的命名空间配置为 App\Http\Controllers\Home,如下所示:

namespace App\Http\Controllers\Home;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class HomeController extends Controller
{
    public function index()
    {
        return view('home.index');
    }
}

接下来,我们将在路由定义中配置命名空间。可以通过调用 namespace 函数来设置命名空间。

例如,如果你想要将路由和控制器都放在 App\Http\Controllers\Home 命名空间下,可以这样写:

Route::namespace('Home')->group(function () {
    // your routes here
});

现在,当访问这个路由时,Laravel 将在 App\Http\Controllers\Home 命名空间下查找控制器。

示例

在此示例中,我们将使用两个命名空间处理 Web 和 API 请求。我们将为每个命名空间定义 HomeController

首先,我们将在 App\Http\Controllers\WebApp\Http\Controllers\Api 目录下创建 HomeController。这两个控制器都将继承 App\Http\Controllers\Controller

Web 命名空间下的 HomeController

namespace App\Http\Controllers\Web;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class HomeController extends Controller
{
    public function index()
    {
        return view('web.home');
    }
}

Api 命名空间下的 HomeController

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class HomeController extends Controller
{
    public function index()
    {
        return response()->json(['message' => 'Hello, World!']);
    }
}

接下来,我们将为每个命名空间配置路由。

Route::namespace('Web')->group(function () {
    Route::get('/', 'HomeController@index');
});

Route::namespace('Api')->prefix('api')->group(function () {
    Route::get('/', 'HomeController@index');
});

现在,当访问根目录时,Laravel 将通过 Web 命名空间下的 HomeController 处理请求。当访问 /api 时,Laravel 将通过 Api 命名空间下的 HomeController 处理请求。

总结

使用路由命名空间可以更好地组织和管理控制器,并允许你处理相似请求的不同变体。在 Laravel 8 中,你可以通过调用 namespace 函数来配置命名空间。