前提・実現したいこと
Laravelにてリスト画面を構築しています。
ModelとしてContent(コンテンツとして共通情報を持つ)とそれにmorphToを設定した、
VideoContent(動画コンテンツ)、PhotoContent(写真コンテンツ)を作成しました。
リスト画面において、動画と写真コンテンツが混在していながらも、
各行は動画と写真で異なる表示がしたいと考えております。
そこで、bladeを下記のように組んで、実現できないかと考えました。
簡単に書くと、
row-base.blade.php ・・・ コンテンツ各行の基本VIEW(各種別のコンテンツが定義されていない場合はこちらが読み込まれる)
row-video.blade.php ・・・ row-baseを継承し、動画コンテンツの行のデザイン(statusセクションだけ上書き)
list.blade.php ・・・ @includeFirstを使用して、row-****を読み込む。
ソースコード
list.blade.php
PHP
1@foreach($contents as $content) 2 // $content->typeにはvideo/photoが入ります。 3 // content-list-row-[type]が存在すればそのviewファイルを読む 4 @includeFirst(["parts.content-list-row-{$content->type}", 'parts.content-list-row-base']) 5@endforeach
parts/content-list-row-base.blade.php
PHP
1<tr> 2 <td> 3 @section('title') 4 {{ $content->title }} 5 @show 6 </td> 7 <td> 8 @section('status') 9 @switch($content->status) 10 @case(\App\Model\Content::STATUS_OK) 11 正常 12 @break 13 14 @case(\App\Model\Content::STATUS_NG) 15 異常 16 @break 17 @endswitch 18 @show 19 </td> 20</tr>
parts/content-list-row-video.blade.php
PHP
1@extends('parts.content-list-row-base') 2@section('status') 3 @switch($content->status) 4 @case(\App\Model\Content::STATUS_OK) 5 // $content->concreteでVideoContentを取得 6 // VideoContentのdetail_statusで詳細表示 7 @switch($content->concrete->detail_status) 8 @case(\App\Model\VideoContent::STATUS_UPLOADING) 9 正常(アップロード中) 10 @break 11 12 @case(\App\Model\VideoContent::STATUS_COMPLETED) 13 正常(アップロード完了) 14 @break 15 @endswitch 16 @break 17 18 @case(\App\Model\Content::STATUS_NG) 19 異常 20 @break 21 @endswitch 22@endsection
発生している問題・エラーメッセージ
上記のように実装したのですが、全ての行が同じコンテンツの$contentを処理してしまいます。
(各行が全く同じ表示になってしまう)
各行のコンテンツを個別に別々に表示したいのですが、上記のように各行の振る舞いを変えたい場合は、
どのようにbladeを書いたらベストプラクティスになるのでしょうか。
回答2件
あなたの回答
tips
プレビュー