📜  Laravel资源控制器

📅  最后修改于: 2021-01-05 10:39:24             🧑  作者: Mango

Laravel资源控制器

Laravel资源控制器以单行代码将CRUD路由提供给控制器。资源控制器用于创建处理应用程序存储的所有http请求的控制器。

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

resource()方法的语法:

路线:: resource('posts','PostController');

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

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

步骤1:使用以下命令创建控制器:

php  artisan make:controller PostController -resource;

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

下面给出了PostController.php文件的结构:

步骤2:现在,我们需要注册到Controller的资源丰富的路由,可以通过以下步骤完成:

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

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

resource()方法中的post参数产生上面输出中显示的名称或资源及其对应的方法。在上面的输出中,posts.destroy将参数发送到Delete方法,这在Laravel中非常特殊。

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

访问PostController类的show()方法

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

public function show($id)
{
return "show method is called and ID is : ". $id;
}

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

假设我以“ localhost / laravelproject / public / posts / 58 ”输入URL,则输出为:

访问PostController类的create()方法

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

public function create()
{
     return "This is the create method";
}

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

步骤2:在浏览器中输入URL'localhost / laravelproject / public / posts / create ',则输出为:

为多个控制器注册路由

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

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

Php artisan make:controller PostController;  // to create the PostController.
Php artisan make:controller StudentController;  // to create the StudentController.

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

route::resources(
['posts'=>'PostController',
'student'=>'StudentController']
);

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

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

部分资源路线

当我们不想为所有方法注册路由时,可以通过仅指定控制器可以处理的功能来注册。

创建部分资源路由的步骤:

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

php artisan make:controller StudentController;

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

Route::resource('student','StudentController',['only' => ['create','show']]);

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

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

命名资源路线

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

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

  • 我们可以在web.php文件中添加以下代码来命名资源路由。
Route::resource('student', 'StudentController',['names' => ['create' =>'student.build']]);
  • 现在,在Git Bash窗口中输入命令php artisan route:list。

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

命名资源路由参数

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

  • 我们可以通过在web.php文件中添加以下代码来覆盖路由参数:
Route::resource('student', 'StudentController', ['parameters' => ['student' => 'admin_student']]);

上面的代码将路由参数(即admin_student)分配学生资源。

  • 要检查所有路由参数的列表,我们使用以下命令: php artisan route:list。

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