Laravel资源控制器

Laravel资源控制器以单行代码将CRUD路由提供给控制器。资源控制器用于创建处理应用程序存储的所有http请求的控制器。
resource()是一个类似于get()方法的静态函数, 它可以访问我们可以在控制器中使用的多个路由。
resource()方法的语法:
路线:: resource(’ posts’ , ‘ PostController’ );
在以上语法中, “ posts”包含所有路由, “ PostController”是控制器的名称。在这种情况下, 我们不需要像在get()方法中那样指定方法名称, 例如@index, 因为PostController类中已经可以使用create(), store(), destroy()方法。
让我们通过一个例子来理解:
步骤1:使用以下命令创建控制器:

phpartisan make:controller PostController -resource;

上面的命令将在app / Http / Controllers / PostController.php目录中创建Controller。 PostController类包含每个资源操作的方法。
下面给出了PostController.php文件的结构:
< ?phpnamespace App\Http\Controllers; use Illuminate\Http\Request; class PostController extends Controller{/*** Display a listing of the resource.* @return \Illuminate\Http\Response*/public function index(){//}/*** Show the form for creating a new resource.* @return \Illuminate\Http\Response*/ public function create(){//}/*** Store a newly created resource in storage.** @param\Illuminate\Http\Request$request* @return \Illuminate\Http\Response*/public function store(Request $request){//}/*** Display the specified resource.* @paramint$id* @return \Illuminate\Http\Response*/public function show($id){//}/*** Show the form for editing the specified resource.* @paramint$id* @return\Illuminate\Http\Response*/ public function edit($id){//}/*** Update the specified resource in storage.* @param\Illuminate\Http\Request$request* @paramint$id* @return \Illuminate\Http\Response*/ public function update(Request $request, $id){//}/*** Remove the specified resource from storage.* @paramint$id* @return\Illuminate\Http\Response*/ public function destroy($id) {//}}

步骤2:现在, 我们需要注册到Controller的资源丰富的路由, 可以按照以下步骤进行操作:
Route::resource('posts', 'PostController');

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

文章图片
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, 则输出为:
Laravel资源控制器

文章图片
访问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’ , 则输出为:
Laravel资源控制器

文章图片
为多个控制器注册路由
我们可以通过将数组传递给resources()方法来注册多个控制器的路由。假设我要为两个控制器(例如PostController和StudentController)注册路由。以下是实现此目的的步骤:
步骤1:首先, 你需要使用以下命令创建PostController和StudentController:
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。
Laravel资源控制器

文章图片
上面的屏幕显示PostController和StudentController的路由都已注册。
部分资源路线
当我们不想为所有方法注册路由时, 可以通过仅指定控制器可以处理的功能来注册。
创建部分资源路由的步骤:
步骤1:首先, 我们使用以下命令创建StudentController:
php artisan make:controller StudentController;

Laravel资源控制器

文章图片
步骤2:现在, 我们在web.php文件中添加以下命令以创建部分资源路由。
Route::resource('student', 'StudentController', ['only' => ['create', 'show']]);

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

文章图片
上面的屏幕显示已经生成了create()和show()方法的路由。
命名资源路线
控制器的所有方法都有默认的路由名称, 但是Laravel允许你通过传递名称数组来覆盖路由名称。名称数组包含要指定的路由名称。
让我们通过一个例子来理解“命名资源路线”。
  • 我们可以在web.php文件中添加以下代码来命名资源路由。
Route::resource('student', 'StudentController', ['names' => ['create' => 'student.build']]);

  • 现在, 在Git Bash窗口中输入命令php artisan route:list。
Laravel资源控制器

文章图片
上面的屏幕显示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。
Laravel资源控制器

文章图片
【Laravel资源控制器】上面的屏幕显示在路由中添加了admin_student参数。

    推荐阅读