怎么在Laravel中动态隐藏API字段

  介绍

今天就跟大家聊聊有关怎么在Laravel中动态隐藏API字段,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

& lt; php ?   namespace  App \ Http \资源;   use 阐明\ Http资源\ \ Json \资源;   class  UsersResource  extends 资源   {/* *   *,才能Transform 从而resource  into  an 数组。   ,*   *,才能@param  \照亮\ Http \请求   *,才能@return 数组   ,*/,public  function  toArray(请求)   ,{   return [才能   ,,& # 39;id # 39;,=祝辞,$ this→id,   ,,& # 39;名字# 39;,=祝辞,$ this→名称,   ,,& # 39;电子邮件,,=在这个→美元的电子邮件   )才能;   ,}   }

出于某种原因,您可能希望在另一个端点上重新使用该资源类,但隐藏邮件字段。这篇文章就是告诉你如何实现这一点的。

如果你不知道API资源是什么,请查看我之前关于这个的文章。

<李>

第一印象> composer  create-project ——prefer-dist  laravel/laravel  api-fields   cd  api-fields   touch 数据库/database.sqlite

编辑。env文件,删除数据库设置并使用SQLite

<代码> DB_CONNECTION=SQLite

继续设置项目

php  artisan 迁移   php  artisan : resource  UsersResource   php  artisan 使:resource ——collection  UsersResourceCollection    php  artisan : controller  UsersController   php  artisan 修补   工厂(App \用户::类)→*(20)→创建();   之前退出

<>强2 -路由

确保在api。php文件中创建一个路由。

<代码>路线::apiResource(& # 39;/用户# 39;& # 39;UsersController& # 39;);

<强> 3 -控制器

控制器代表了期望的目标。在这个例子中,让我们假设在用户列表中,我们只想要所有用户的名字,而在用户显示中,我们只想隐藏电子邮件地址。

& lt; php ?   namespace 应用\ Http \控制器;   use 应用\ Http资源\ \ UsersResource;   use 应用\用户;   class  UsersController  extends 控制器   {/* *   *,才能Display  a  listing  of 从而资源。   ,*   *,才能@param  User  $用户   *,才能@return  \照亮\ Http \响应   ,*/,public  function 指数(User  $ user)   ,{   return 才能UsersResource:收集($ user→随意翻阅())→隐藏((& # 39;id # 39;,, & # 39;电子邮件# 39;]);   ,}/* *   *,才能Display  a 用户。   ,*   *,才能@param  User  $用户   *,才能@return  \照亮\ Http \响应   ,*/,public  function 显示(User 美元用户)   ,{   return 才能;UsersResource:使($ user)→隐藏((& # 39;id # 39;]);   ,}   }

为了达到这个目的,我们需要<代码> UsersResourceCollection 和<代码> UsersResource>

<强> 4 - UsersResource类

让我们从,显示方法开始又是;<代码> UsersResource::> UsersResource>

 & lt; php ?
  namespace  App \ Http \资源;
  use 阐明\ Http资源\ \ Json \资源;
  class  UsersResource  extends 资源
  {/* *
  *,才能@var 数组
  ,*/,protected  withoutFields 美元;=,[];
  ,
  ,/* *
  *,才能Transform 从而resource  into  an 数组。
  ,*
  *,才能@param  \照亮\ Http \请求
  *,才能@return 数组
  ,*/,public  function  toArray(请求)
  ,{
  return 才能;这→美元filterFields ([
  ,,& # 39;id # 39;,=祝辞,$ this→id,
  ,,& # 39;名字# 39;,=祝辞,$ this→名称,
  ,,& # 39;电子邮件,,=在这个→美元的电子邮件
  )才能);
  ,}/* *
  *,才能Set 从而keys  that 断开连接;supposed 用be  filtered 。
  ,*
  *,才能@param  array  $字段
  *,才能@return 这一美元
  ,*/,public  function 隐藏(array 美元字段)
  ,{
  这个美元才能→withoutFields =,美元字段;
  return 才能;$;
  ,}/* *
  *,才能Remove 从而filtered 键。
  ,*
  *,才能@param  $数组
  *,才能@return 数组
  ,*/,protected  function  filterFields(数组)
  ,{
  return 才能收集(数组)→忘记($ this→withoutFields)→toArray ();
  ,}
  }

怎么在Laravel中动态隐藏API字段