【发布时间】:2020-04-26 11:12:58
【问题描述】:
我正在尝试使用 laravel Blade 模板生成 JSON
$articles 是一个集合,当我这样做时
控制器:
return view('eblogger::content.blog.json.home')->withArticles($articles[0]->toArray());
查看:
{
'data': [
{
'id': {{ $articles['id'] }},
'name': "{{ $articles['name'] }}"
}
]
}
我在 chrome devtools 中得到了这个对象:
没关系,它返回一个对象。
但是当我使用刀片功能时
控制器:
return view('eblogger::content.blog.json.home')->withArticles($articles->toArray());
查看(使用更具体的示例进行编辑):
{
'data': [
@foreach($articles['data'] as $article)
@can('read_this_article', $article)
{
'id': {{ $article['id'] }},
'name': "{{ $article['name'] }}",
'localization' : "{{getLocalization($article['address'])}}"
}
@endcan
@endforeach
]
}
它返回一个像字符串一样的非对象
有没有办法使用 laravel Blade 模板生成 Json ?
编辑
我知道有一个 json 助手可以从对象生成 Json。但我需要的是一种创建自定义 json 的方法。我需要在发送响应之前检查授权和其他处理。
结论
我设法设置了这一代。问题很简单。我忘了在对象后面加逗号。我很清楚这是对正确使用刀片的一种转移。
@mdexp 给我这个链接:https://laravel.com/docs/6.x/eloquent-resources
确实,这是构建 API 的正确方法
在构建 API 时,您可能需要一个转换层,该层位于 在您的 Eloquent 模型和实际的 JSON 响应之间 返回给您的应用程序的用户。 Laravel 的资源类允许 您可以富有表现力和轻松地转换您的模型和模型 集合成 JSON。
谢谢
【问题讨论】:
-
为什么不直接使用内置的序列化器?
-
它不仅仅是序列化一个对象。我想创建一个自定义响应
-
但是您要求的输出可以通过多种方式在 Laravel 中实现。你的方式似乎不是最佳的,你的有什么特别之处?
-
我想检查一些授权,隐藏一些列,最终在发送响应之前进行一些处理。如果我使用刀片似乎更容易,我不知道如何制作不同的
-
它不是,如果你指定你想要的例子,我会写一个答案。问题是你很容易生成无效的json。