Laravel:Viewの同じコードを切り出して使いまわす方法
Laravel:Viewの同じコードを切り出して使いまわす方法
『テーブル数が200を超える = 作らなきゃいけないViewの数もめっちゃ多い』と言うことで、楽をする為に「共通して利用する項目を別に作成し呼び出してしまおう」と画策しました。
PHPベタ打ちの場合よく使うのは【 require_once 】同じコードでも引数を渡すことで表示結果を変更できるのでとても重宝していました。
Laravelでもrequire_once を利用するのかと思いきや、フレームワークではrequire_onceはあまり使わないとの事。
それじゃ何を使うん?
はい、聞いて調べて実行したことを備忘録として記します。
引数を使ってページ毎に可変する共通Viewパーツを作りたい
具体的には、削除/更新/新規作成のボタンコントロールを共通化できないかと考えました。
ボタンデザインのCSSを毎回読み込ませて云々、意外とめんどくさかったりしますよね。
デザインを変えようなんて思ったら全部のページ開いてCSSのReed先変えてとか作業工数で頭が痛くなってきます(CSS変えるだけなら簡単なんですけど)。
Viewの再利用(テンプレート利用)の方法はいくつかある
- @include
- @yield
- @section
- @extends
- @component
@section は中身を書くのでニュアンスは違いますが、まぁいくつかの手段がある様です。
今回は配列を引数として渡したいと考えているので @component を利用します。
@component利用の段取り
- resources/view/componentsを作成
- resources/view/components内に使いまわしたいコードをbladeで書く
- @component(‘components.作成ブレード’) @endcomponentを呼び出したい箇所に配置
- @component @endcomponent の間に渡したい引数を@slot(’引数名’,引数)として記載する
実際のコードを記します
■hogehoge.blade.php内
1 2 3 4 5 |
@component('components.btn_delete') @slot('url', 'hogehoge') @slot('id', $hogehoge->id) @slot('role',$role->delete) @endcomponent |
■components/btn_delete.blade.php
1 2 3 4 5 6 7 8 9 |
@if($role == 1) <div style='float: right;margin-left: 5px;'> <form action="{{url($url.'/'.$id)}}" method='post'> {{ csrf_field() }} {{ method_field('DELETE') }} <input type="submit" name="delete" value="削除" onClick="delete_alert(event);return false;" class='btn btn-danger'> </form> </div> @endif |
これで、hogehoge.blade.phpの@component~@endcomponent がbtn_delete.blade.phpに置き換わります。
知っていれば意外なほど簡単。結局、使えるか否かは知っているか否かなんですよね。
まとめ
今回の配列を利用したViewの使いまわしなど「欲しい」「あったらなぁ~」という機能がLaravelなどのフレームワークにはちゃんと完備されている事が解ります。少ない知識で行うと、ついついゴリゴリにコード書いてしまうのですが、こういったコードはメンテナンス性がとても悪いのが特徴。
ちゃんと調べて書いていかないとだめですね。
-
前の記事
Laravel:SoftDelete(論理削除)を稼働させる 2019.03.29
-
次の記事
Laravel:Controllerの同じコードを使いまわしたい 2019.04.01
コメントを残す