【问题标题】:Using accessors and mutators in Laravel json responses在 Laravel json 响应中使用访问器和修改器
【发布时间】: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;
}

【问题讨论】:

    标签: php json angularjs laravel laravel-4


    【解决方案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”并传递访问器的返回即可。原始评论:有没有办法只在需要时才包含访问器,例如关系的加载如何工作?我可能需要将访问器在前端获取的数据放在一个地方,而不是另一个地方。
    猜你喜欢
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    相关资源
    最近更新 更多