🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

Q&A

解決済

1回答

3638閲覧

Bladeテンプレート内でのクラスメソッドの呼び出し?

pafe.aratani

総合スコア21

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

0グッド

0クリップ

投稿2019/12/13 10:17

編集2019/12/13 10:55

たまに以下のようなクラスの静的メソッドの呼び出し(以下のサンプルでは'mail::header'など)のような記述を見かけます。

php artisan vendor:publish --tag=laravel-mail にて公開したテンプレートの
resources/views/vendor/mail/html/message.blade.php

blade

1@component('mail::layout') 2 {{-- Header --}} 3 @slot('header') 4 @component('mail::header', ['url' => config('app.url')]) 5 {{ config('app.name') }} 6 @endcomponent 7 @endslot 8 9 {{-- Body --}} 10 {{ $slot }} 11 12 {{-- Subcopy --}} 13 @isset($subcopy) 14 @slot('subcopy') 15 @component('mail::subcopy') 16 {{ $subcopy }} 17 @endcomponent 18 @endslot 19 @endisset 20 21 {{-- Footer --}} 22 @slot('footer') 23 @component('mail::footer') 24 © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') 25 @endcomponent 26 @endslot 27@endcomponent
  • これはクラスメソッドを呼び出しているのでしょうか
  • どのようにすればこのやり方を自分でも実装できるでしょうか

複雑なコンポーネントを考えており、もしコンポーネントの生成にクラスが利用できるのであれば検討したいと思っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/12/13 10:25

'mail::button' ではなくて、'mail.button' だと思いますよ。
pafe.aratani

2019/12/13 10:30

これはLaravel公式のメールテンプレートからの引用であり、間違いではありません。 また、他のベンダーパッケージでもこの記述の利用例を見かけます。
m.ts10806

2019/12/13 10:48

一応、出典を質問本文に追記してください お互い見ている場所が同じとは限らないので
pafe.aratani

2019/12/13 10:56

出典元テンプレートをフルで記載しました。
退会済みユーザー

退会済みユーザー

2019/12/13 11:22

それですね。 これはメソッドではないです。 mailはベンダー名、buttonはテンプレート名です。
guest

回答1

0

ベストアンサー

::を区切りと指定してるのはここ。他にも直接::書いてる箇所もあるけど。

/** * Hint path delimiter value. * * @var string */ const HINT_PATH_DELIMITER = '::';

https://github.com/laravel/framework/blob/5b1b3675748649da19c9b6308d1ade25f41eabd5/src/Illuminate/View/ViewFinderInterface.php#L7

静的メソッドとは関係なくただの区切り文字。::の前は名前空間。

使い方としてはこれと同じ

return view('courier::admin');

https://readouble.com/laravel/6.x/ja/packages.html#views

あまり意味はないけど@component('my::layout')を自分で作りたい場合。
/resources/views/vendor/my/layout.blade.phpを作る。
AppServiceProvider@boot()で

$this->loadViewsFrom(resource_path('views'), 'my');

myを名前空間として登録されるので'my::layout'で使えるはず。

投稿2019/12/13 12:43

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pafe.aratani

2019/12/13 13:20

あーパッケージ開発時にパッケージ名として登録できるのですね! パッケージ開発でないのならわざわざやる意味はなさそうですね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問