laravel是一个免费的开源PHP Web框架,由泰勒·奥特威尔(Taylor Otwell)创建,旨在按照模型视图控制器(MVC)架构模式开发Web应用程序,并基于Symfony(wiki)。 /p>
该框架提供了许多功能来帮助开发人员改善API和CRUD(创建,读取,更新,删除)应用程序,在这两种情况下,最常用和推荐的功能都命名为Restful Resource Controller,在我们使用此功能之前,了解API资源的意义,这些功能是什么以及它们的创造是重要的。
一个
API资源
API资源是由客户端计算机访问的HTTP协议方法,该方法请求服务器提供的服务,例如GET方法,负责请求特定记录或服务器上存储的一组数据。面向资源的API通常被建模为资源层次结构,每个节点都是简单的资源或集合资源。为了方便起见,它们通常被称为资源和收藏。一个集合包含相同类型的资源列表(See more)。
下面我们可以看到一张表,涉及服务器中的主要HTTP协议及其职责
http方法 | 责任 |
---|---|
get | 获取特定记录或一组数据。 |
POST | 创建客户机器请求的给定记录。 |
put | 更新服务器上的记录。 |
删除 | 删除服务器上的记录。 |
一个
宁静的资源控制器
开发人员通常通过工匠指挥说明创建其控制器和模型,在Laravel项目的安装中提供,但是许多开发人员不知道的是,可以使用直接相关的现成方法创建控制器对于前面提到的HTTP方法,为此,我们必须在控制器创建命令之后使用--resource
选项,例如:
php artisan make:controller ApiController --resource
在您的控制台中运行此命令时,Artisan将在app/Http/Controllers
文件夹中创建一个新的控制器,并使用一些预定义的方法,所有这些方法都与API资源相关,该命令生成的所有方法均在PHP DOCS标准中(See More6) ),简要说明每个人的功能。
例如,负责返回列表的方法(无论是否有分页)称为index()
,在下面的示例中,我们将使用模型用户的情况。
一个
列出itens
默认情况下,当控制器内部的方法从应用程序的模型返回资源时,Laravel以JSON格式返回响应,因此尽管是一个很好的练习,我们不需要指定该方法的返回类型。
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return User::all(); // Can be overridden by a pagination method
}
一个
创建新的itens
要在数据库中创建新记录,Laravel创建了两种新方法,一种称为create
的方法和另一种称为store
的方法,请注意,默认情况下,store
方法接收请求作为依赖项注入参数,这发生了,因为与该参数相比,它发生了create
方法,store
方法仅负责在数据库中创建新记录,与create
方法不同,默认情况下,该方法应返回带有系统用户必须填写的表单的视图,以便将其插入以插入通过store
方法的数据库。在这种情况下,我们将仅使用store
方法,但要知道可以在任何类型的Laravel应用程序中使用create
方法,最好是返回视图和样式的应用程序。
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(UserRequest $request)
{
/**
* Can be overwritten by a validation coming from
* a different request object
*/
return User::create($request->validated());
}
一个
更新Itens
按照创建方法的模式,更新方法也分为两个,在这种情况下,edit
方法将负责返回视图,并带有负责发送将在某个项目中更新的数据的表单在系统中,虽然update
方法将负责直接在数据库中的应用程序中更新某个项目。
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
/**
* Can be overwritten by a validation coming from
* a different request object
*/
return User::update($request->validated());
}
在Laravel的一些最新版本中,您可以用一个参数替换int $id
参数,该参数在应用程序中具有更大的语义含义,例如User $user
,这样,Laravel会自动通过从“ ID”通过从“ ID”中搜索数据库请求并将其放入$user
变量中,使您的代码清洁器和更多语义。
一个
删除itens
与创建和更新方法不同,从数据库中删除项目的方法是唯一的,称为destroy
的方法负责从您的API中销毁项目。该方法采用id
参数,该参数用于在数据库中找到用户,然后删除它。
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
User::findOrFail($id)->delete();
}
请注意,也可以通过搜索对象更改id
参数,就像在编辑方法中一样,通过这种方式,该方法将接收User $user
参数,然后使用delete
方法直接使用$user->delete()
,然后直接将其删除。 ,留下代码清洁器。
一个
获取特定项目
通过index()
方法,我们可以在数据库中的表中看到所有项目,但是Laravel还创建了show()
方法,该方法负责从数据库返回特定项目。默认情况下,show()
方法将接收到int $id
参数,这将是请求应返回的项目的ID,如下所示。
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
/**
* It can be rewritten by directly
* passing Model as a method parameter, as shown above.
*/
return User::findOrFail($id);
}
一个
路由
创建控制器及其方法后,现在我们必须编写与每种方法相对应的路由,但是,除了代码的长度外,这可能会使代码比平常更干净。为了解决这些问题,Laravel提供了一种称为resource
的路由的创建方法,该方法自动配置每个参数和方法。您可以检查更多功能,例如在路线中添加中间件,或通过正式文档(See more)添加某些方法的异常。
Route::resource('users', ApiController::class);
一个
结论
在了解了如何在Laravel中使用Restful资源控制器的更多信息后,我们可以看到Laravel为创建和操纵API数据提供的工具有多么有用。永远记住要掌握官方的Laravel文档,该文件始终保持最新状态(Laravel Documentation)