路由控制器

2025年3月17日 | 阅读 3 分钟

路由控制器允许您使用用于处理请求的方法创建控制器类。

现在,我们将通过一个例子来理解路由控制器。

步骤 1: 首先,我们需要创建一个控制器。 我们已经在上一节中创建了名为“PostController”的控制器。

步骤 2: 打开 web.php 文件并编写以下代码

在上面的代码中,'/post' 是我们想要访问的 URL,而 PostController 是控制器的名称。 'index' 是 PostController.php 文件中可用的方法的名称,而 @index 表示当我们访问“/post” url 时应调用 index() 方法。

步骤 3: 添加如下所示的代码

步骤 4: 在浏览器中输入 URL,即 localhost/laravelproject/public/host,然后输出将如下所示

输出

Laravel Routing Controllers

到目前为止,我们已经观察到如何访问控制器。 现在,我们将了解如何将数据传递给控制器类。

将数据传递给控制器

让我们通过一个示例来理解我们如何将数据传递给控制器

步骤 1: 打开 web.php 文件并添加以下代码

Route::get('/post/{id}','PostController@index');

上面的代码包含“/post” url 中的“id”参数。

步骤 2: 编辑 PostController.php 文件。

在上面的例子中,我们已经更新了 index() 方法。 我们在 index() 方法中传递了“id”参数。

步骤 3: 在 Web 浏览器中输入 URL“localhost/laravelproject/post/100”,然后输出将如下所示

Laravel Routing Controllers

控制器和命名空间

当我们通过 Route::get() 方法指定控制器类时,我们不需要指定完整的控制器命名空间。由于 RouteServiceProvider 加载了包含命名空间的所有路由文件,我们只需要指定命名空间 App/Http/Controllers 部分之后的类名。

如果完整的控制器类是 App/Http/Controllers/Post/PostController,那么我们可以如下注册控制器的路由

Route::get('\post','Post\PostController@index');

单操作控制器

如果我们想在控制器中使用单一方法,那么我们可以在控制器上使用 single __invoke() 方法。

当我们使用命令 php artisan:make controller PostController 创建控制器时,PostController 文件的结构如下

现在,我们在 PostController 类中添加 __invoke() 函数的代码

最后,我们在 web.php 文件中添加代码,该代码负责处理操作。

上面的代码调用了 PostController 类的 __invoke() 方法。 这说明我们不需要编写 @invoke 方法来访问单操作控制器。

输出

当我们输入 URL 'localhost/laravelproject/public/post/67' 时,输出将是

Laravel Routing Controllers

如果未指定任何操作,即我们忘记编写 __invoke() 方法,则会抛出 UnexpectedValueExpression

假设我们从 PostController 类中删除了 __invoke() 方法,则输出将是

Laravel Routing Controllers