如何在Laravel中使用宁静的资源控制器
#php #laravel #http #restapi

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