Генерация json с laravel лезвием - PullRequest
2 голосов
/ 09 января 2020

Я пытаюсь сгенерировать JSON с laravel шаблоном лезвия

$ article - это коллекция, и когда я делаю это,

Контроллер:

return view('eblogger::content.blog.json.home')->withArticles($articles[0]->toArray());

Просмотр:

{
    'data': [
        {
            'id': {{ $articles['id'] }},
            'name': "{{ $articles['name'] }}"
        }
    ]
}

Я получил chrome Обозначает этот объект:

enter image description here

все в порядке, он возвращает объект .

Но когда я использую функции лезвия

Контроллер:

return view('eblogger::content.blog.json.home')->withArticles($articles->toArray());

Просмотр (отредактировано с более конкретным примером c) :

{
    'data': [
        @foreach($articles['data'] as $article)
           @can('read_this_article', $article)
           {
            'id': {{ $article['id'] }},
            'name': "{{ $article['name'] }}",
            'localization' : "{{getLocalization($article['address'])}}"
           }
           @endcan
        @endforeach
    ]
}

возвращает не объект как строка

enter image description here

Есть ли способ использовать шаблон laravel blade для генерации Json?

Редактировать

Я знаю, что есть помощник json для генерации Json из объекта. Но мне нужен способ создать пользовательский json. Мне нужно проверить полномочия и другие способы обработки перед отправкой ответа.

вывод

Мне удалось настроить поколение. проблема была очень простой. Я забыл поставить запятую после объектов. Я хорошо знаю, что это отвлекает от правильного использования лезвия.

@ mdexp, дайте мне эту ссылку: https://laravel.com/docs/6.x/eloquent-resources

действительно, это правильный путь для создания API

При создании API вам может понадобиться слой преобразования, который находится между вашими моделями Eloquent и ответами JSON, которые фактически возвращаются пользователям вашего приложения. Классы ресурсов Laravel позволяют вам выразительно и легко преобразовать ваши модели и коллекции моделей в JSON.

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 января 2020

В вашем контроллере просто передайте коллекцию $ article в представление:

return view('eblogger::content.blog.json.home')->withArticles($articles);

Тогда в представлении вы можете просто использовать приведенный ниже код везде, где вам нужно вывести свою полезную нагрузку json:

{
    'data': [
        {{ $articles->toJson() }}
    ]
}

Кроме того, если вам нужно напечатать только некоторые поля о ваших статьях, вы можете сделать это следующим образом:

{
    'data': [
        {{ $articles->map->only('id', 'title', 'more-attributes...')->toJson() }}
    ]
}

В противном случае, как сказал @Alexander, создание представлений просто для построения JSON - неправильный способ достичь этого.

0 голосов
/ 09 января 2020

Взгляните на это: https://laravel.com/docs/6.x/responses#json -ответы

Вам не нужно создавать Blade View и настраивать свой JSON, использовать то, что предоставляет Laravel .

return response()->json($data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...