Laravel 5.0 отображает элемент из массива, где значение ключа соответствует значению - PullRequest
0 голосов
/ 20 мая 2019

У меня есть массив, который выглядит следующим образом:

array:3 [▼
  0 => {#354 ▼
    +"id": 38
    +"block_newsletter_id": 102
    +"item_type": "title"
    +"html_key": ""
    +"content": "TITLE"
    +"properties": ""
  }
  1 => {#355 ▼
    +"id": 39
    +"block_newsletter_id": 102
    +"item_type": "text"
    +"html_key": ""
    +"content": "Some text. Hey."
    +"properties": ""
  }
  2 => {#356 ▼
    +"id": 40
    +"block_newsletter_id": 102
    +"item_type": "button"
    +"html_key": ""
    +"content": "click here"
    +"properties": ""
  }
]

Теперь я отправляю этот массив для просмотра, и моя цель - показать содержимое item_type "title" в моем теге h1.

Я могу сделать это так:

@foreach($blockItemsContent as $blockItemContent)
    @if($blockItemContent->item_type == 'title')
        <h1>{{ $blockItemContent->content }}</h1>
    @endif
@endforeach

Но если я хочу поместить свой текст item_type в тег ap, мне нужно сделать то же самое.Разве нет лучшего более эффективного способа, чем написать несколько для каждого цикла?

Ответы [ 3 ]

0 голосов
/ 20 мая 2019

Вы можете создать группу каждого типа ваших типов в вашем контроллере как:

collect($blockItemsContent)->groupBy('item_type');

и передать ее для просмотра, и у вас есть ваши типы.

0 голосов
/ 20 мая 2019

По вашему вопросу. Если item_type = title, то отображается в теге h1. Если item_type = text, то отображается в теге p

Другие отображаются в теге span

В блейд-файле:

@foreach($blockItemsContent as $item)
     @if($item->item_type == 'title')
         <h1>{{ $item->content }}</h1>
     @elseif($item->item_type == 'text')
         <p>{{ $item->content }}</p>
     @else
          <span>{{$item->content}}</span>
     @endif
@endforeach

0 голосов
/ 20 мая 2019

Вы можете подготовить что-то вроде этого массива в методе вашего контроллера и отправить его в представление:

$titleItemTypeContent = [];
foreach ($blockItemsContent as $blockItemContent)
{
    if ($blockItemContent->item_type == 'title')
        $titleItemTypeContent[] = [$blockItemContent->id, $blockItemContent->content];
}

и повторно использовать $titleItemTypeContent в блейде столько раз, сколько пожелаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...