Laravel 资源控制器

17 Mar 2025 | 5 分钟阅读

Laravel 资源控制器通过单行代码为控制器提供 CRUD 路由。 资源控制器用于创建一个控制器,该控制器处理应用程序存储的所有 HTTP 请求。

resource() 是一个静态函数,就像 get() 方法一样,可以访问我们可以在控制器中使用的多个路由。

resource() 方法的语法

Route::resource('posts','PostController');

在上面的语法中,“posts”包含所有路由,“PostController”是控制器的名称。 在这种情况下,我们不需要像在 get() 方法中那样指定方法名称,例如 @index,因为 create()、store()、destroy() 方法已在 PostController 类中可用。

让我们通过一个例子来理解

步骤 1: 使用下面给出的命令创建控制器

上面的命令将在 app/Http/Controllers/PostController.php 目录中创建控制器。 PostController 类包含每个资源操作的方法。

PostController.php 文件的结构如下

步骤 2: 现在,我们需要将资源路由注册到控制器,这可以通过以下方式完成

打开 Git Bash 窗口,输入命令 php artisan route:list。 该命令产生以下输出

Laravel Resource Controllers

resource() 方法中的 post 参数生成上图输出中显示的名称或资源及其相应的方法。 在上面的输出中,posts.destroy 正在向 Delete 方法发送一个参数,这在 Laravel 中非常特别。

让我们通过一个例子来理解资源的概念。

访问 PostController 类的 show() 方法

假设我们要调用 PostController.php 文件的 show() 方法。 为此,请在 show() 方法中添加代码。 我在 show() 方法中添加了以下代码

我们知道 posts.show 的 URI 是 posts/{posts},这意味着我们还需要输入参数才能访问 PostController 类的 show() 方法。

假设我输入的 URL 为 'localhost/laravelproject/public/posts/58',那么输出将是

Laravel Resource Controllers

访问 PostController 类的 create() 方法

步骤 1: 首先,我们需要在 create() 方法中添加代码。 我添加了以下代码

我们知道 posts.create 的 URI 是 posts/create,因此访问 create() 方法的 URL 将是 'localhost/laravelproject/public/posts/create'。

步骤 2: 在浏览器中输入 URL 'localhost/laravelproject/public/posts/create',然后输出将是

Laravel Resource Controllers

为多个控制器注册路由

我们可以通过将数组传递给 resources() 方法来注册多个控制器的路由。 假设我想为两个控制器注册路由,例如 PostControllerStudentController。 以下是实现此目的的步骤

步骤 1: 首先,您需要使用以下命令创建 PostControllerStudentController

步骤 2:web.php 文件中添加以下代码以注册路由

步骤 3: 在 Git Bash 窗口中输入命令 php artisan route:list

Laravel Resource Controllers

上面的屏幕显示 PostController 和 StudentController 的路由都已注册。

部分资源路由

当我们不想为所有方法注册路由时,我们可以通过仅指定控制器可以处理的那些函数来完成。

创建部分资源路由的步骤

步骤 1: 首先,我们使用以下命令创建 StudentController


Laravel Resource Controllers

步骤 2: 现在,我们在 web.php 文件中添加以下命令以创建部分资源路由。

步骤 3: 要验证上面的代码是否已为指定的方法注册了路由,请在 Git Bash 窗口中键入命令 'php artisan route:list'。

Laravel Resource Controllers

上面的屏幕显示已经生成了 create() 和 show() 方法的路由。

命名资源路由

控制器的所有方法都有一个默认路由名称,但 Laravel 允许您通过传递名称数组来覆盖路由名称。 名称数组包含您想要指定自己选择的路由名称。

让我们通过一个例子来理解“命名资源路由”。

  • 我们可以将以下代码添加到 web.php 文件中以命名资源路由。
  • 现在,在 Git Bash 窗口中输入命令 php artisan route:list
Laravel Resource Controllers

上面的屏幕显示 create() 方法的路由名称已重命名为 student.build,其默认名称为 student.create

命名资源路由参数

Route::resource() 方法自动为所有资源路由生成路由参数,但我们可以使用 parameters 数组覆盖路由参数。 parameters 数组是资源名称和路由参数的关联数组。

  • 我们可以通过在 web.php 文件中添加以下代码来覆盖路由参数

上面的代码将路由参数,即 admin_student 分配给 student 资源。

  • 要检查所有路由参数的列表,我们使用下面给出的命令
    php artisan route:list。
Laravel Resource Controllers

上面的屏幕显示 admin_student 参数已添加到路由中。