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文件的结构:
<?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(Request $request)
{
//
}
/**
* 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 int $id
* @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:现在, 我们需要注册到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()方法来注册多个控制器的路由。假设我要为两个控制器(例如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。
上面的屏幕显示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参数。
评论前必须登录!
注册