在 Laravel json 响应中使用访问器和修改器

Posted

技术标签:

【中文标题】在 Laravel json 响应中使用访问器和修改器【英文标题】:Using accessors and mutators in Laravel json responses 【发布时间】:2014-03-04 19:48:21 【问题描述】:

所以我正在制作一个生成 json 响应的 API,而不是 View::make('foo', compact('bar'))

带刀片模板

我的控制器只是返回 Users 的 Eloquent 模型:

public function index()

    return User::all();

protected function getFooAttribute()

    return 'bar';

我的视图将能够使用它以及foo 属性(它不是用户表中的字段)。

@foreach($users as $user)
<p>$user->name $user->foo</p>
@endforeach

使用 Angular JS + json 响应

但是,现在我没有使用刀片,而是抓住 json 并使用 Angular JS 显示它,我无法做到这一点:

<p ng-repeat="user in users">user.name user.foo</p>

有没有办法干净地打包我的 json 响应:

["name": "John", "foo": "bar", ...]

警告:我以前从未构建过 API,去年 12 月才开始编程/网络开发。这是我的尝试:

public function index()

  $response = User::all();
  foreach($response as $r)
  
    $r->foo = $r->foo;
  

  return $response;

【问题讨论】:

【参考方案1】:

是的,例如:

return Response::json([User:all()], 200);

通常你想要的不止这些..

return Response::json([
    'error' => false,
    'data' => User:all()
], 200);

200 是 HTTP 状态码。

要包含您需要指定这些属性以自动附加到模型中的响应的属性。

protected $appends = array('foo');

public function getFooAttribute()

    return 'bar';    

【讨论】:

这很奇怪,我在这两个例子中都得到了一个空的回复[]。所以不会让我修正你的错别字(User::all())。我已经尝试添加$appends,这似乎已经修复了我的代码仍然无法使用Response::json() 编辑:是的。只需在模型上调用“setAttribute”并传递访问器的返回即可。原始评论:有没有办法只在需要时才包含访问器,例如关系的加载如何工作?我可能需要将访问器在前端获取的数据放在一个地方,而不是另一个地方。

以上是关于在 Laravel json 响应中使用访问器和修改器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中访问 XML 或转换为 JSON

Laravel 中的 JSON 响应

使用自定义 json 响应进行 Laravel 验证

如何在javascript中使用laravel响应json

二十一PHP框架Laravel学习笔记——模型的访问器和修改器

使用 Laravel 从 API 获取 JSON 响应