在 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 响应中使用访问器和修改器的主要内容,如果未能解决你的问题,请参考以下文章