Laravel 资源控制器

Laravel 资源控制器

Laravel资源控制器可以用一行代码提供CRUD路由给控制器。资源控制器用于创建一个处理应用程序中的所有HTTP请求的控制器。

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

resource() 方法的语法:

Route::resource(‘posts’, ‘PostController’);

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

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

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

php  artisan make:controller PostController -resource;

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

PostController.php文件的结构如下所示:

<?php
namespace 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(Requestrequest)
{

//

}
/**
     * Display the specified resource.
     * @param  int  id
     * @return \Illuminate\Http\Response
     */
public function show(id)
{

  //
}
/**
     * Show the form for editing the specified resource.
     * @param  int  id
     * @return  \Illuminate\Http\Response
     */
 public function edit(id)

{

//

}
/**
     * Update the specified resource in storage.
     * @param  \Illuminate\Http\Request   request
     * @param  intid
     * @return \Illuminate\Http\Response
     */
 public function update(Request request,id)
{

//

}
/**
     * Remove the specified resource from storage.
     * @param  int  id
     * @return  \Illuminate\Http\Response
     */
 public function destroy(id)
 {

//}}

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

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

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

Laravel 资源控制器

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

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

访问PostController类的show()方法

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

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

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

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

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() 方法来注册多个控制器的路由。假设我想要注册两个控制器的路由,比如 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

Laravel 资源控制器

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

部分资源路由

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

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

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

php artisan make:controller StudentController;

Laravel 资源控制器

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

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() 方法自动为所有资源路由生成路由参数,但我们可以使用参数数组覆盖路由参数。参数数组是一个包含资源名称和路由参数的关联数组。

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

以上代码为路由参数赋值,即 admin_studentstudent 资源。

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

Laravel 资源控制器

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程