Задать вопрос
codeschemer
@codeschemer

Как проверить instanceOf в blade?

Как для во View сделать проверку, аналогичную, как для контроллера
foreach($collection as $object){
    if($object instanceof ModelName1){ //code goes here.. }
    elseif($object instanceof ModelName2){ //code goes here.. }
    else($object instanceof ModelName3){ //code goes here.. }
 }

Laravel 5.1.
Особенно интересует Laravel way стиль решения, без <?php, лаконично
Передавать дополнительный массив, в котором будет идентификатор Модели не хочется, но пока приходится.
Варианты для 5.2, 5.3, или 4.х тоже интересно, может кому-то будет полезно.

Andrzej Wielski предложил
@if(count($collection))
    @foreach($collection as $object)
        @if($object instanceof ModelName1)
              //
        @elseif($object instanceof ModelName2)
              //
        @elseif($object instanceof ModelName2)
              //
        @endif
    @endforeach
@endif

однако в таком случае,
dd($object); //ModelName1
dd($object instanceof ModelName1); //false


Оригинал кода(части)
view
@if(count($newPreorderDetails))
 @foreach($newPreorderDetails as $newPreorderDetail)
  @if($newPreorderDetail instanceof BaseDetail)
   go go go
  @endif
 @endforeach
@endif

Model app\BaseDetail.php
class BaseDetail extends Model
{      
// конструкторы, связи, группы и много всего
}

И мои дампы,
dd($newPreorderDetail);

BaseDetail {#267 ▼
  #table: "base_detail"
  #guarded: []
  #connection: null
  #primaryKey: "id"
  #perPage: 15
  +incrementing: true
  +timestamps: true
  #attributes: array:19 [▶]
  #original: array:19 [▶]
  #relations: []
  #hidden: []
  #visible: []
  #appends: []
  #fillable: []
  #dates: []
  #dateFormat: null
  #casts: []
  #touches: []
  #observables: []
  #with: []
  #morphClass: null
  +exists: true
  +wasRecentlyCreated: false
}

и
dd($newPreorderDetail instanceof BaseDetail);

false
  • Вопрос задан
  • 413 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Astatroth
@Astatroth
Я тут случайно
Покажите оригинал кода. Когда сверяете, неймспейс модели указываете?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
А есть ли смысл усложнять код и не использовать стандартные конструкции блейда @if и @foreach?
Ответ написан
wielski
@wielski
✔ Совет: Вам помогли? Отметьте ответы решением.
@if(count($collection))
    @foreach($collection as $object)
        @if($object instanceof ModelName1)
              //
        @elseif($object instanceof ModelName2)
              //
        @elseif($object instanceof ModelName2)
              //
        @endif
    @endforeach
@endif
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы