laravelで mailableを使ってメールを送信しようとしています。
ここでご質問ですが、色々と調べるとコンストラクタの引数がインスタンスで渡されているもの、単なる変数で渡されているものが存在しますが、どちらが理想でしょうか。
また、インスタンスで渡しているものは受け取り方・渡し方をどのように定義すればよろしいでしょうか。
例えば、laravelのドキュメントでは、
php
1 public function __construct(Order $order) 2 { 3 $this->order = $order; 4 }
と、途中でいきなり Order が出てきて、定義がどこにあるのか、どのように定義するのかわかりません。
色々と調べると、渡し方も両方あるようでした
インスタンス渡しのもの:
https://readouble.com/laravel/5.8/ja/mail.html
https://liginc.co.jp/369690
変数渡しのもの:
https://qiita.com/sayama0402/items/dd10cdb2aa22c8a035b3
https://www.ritolab.com/entry/38
https://atuweb.net/201706_laravel-mail-mailable/
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
Orderが必ずEloquentモデルを継承したものとは限りません。
Kosuke_Shibuyaさんが回答しているように use されているものを確認すべきです。
useされていない場合は同じネームスペース配下のクラスとなります。
また、Laravelの設計思想上、そもそもClassで統一することが望ましいのか、変数渡しでも良いのか?が気になります。
この表現が微妙なのでただすと型宣言、またはタイプヒンティングです。
https://qiita.com/kazu56/items/50b35c9ee0e5c6c4e75e
もし、クラス、インスタンスの違いが付いていないようならその辺もおさらいした方が良いでしょう
(インスタンスを渡しても、変数を渡す事に代わりはないし、クラスを渡しているわけでもないので・・・)
特定のクラスのインスタンスのみ受け付けたい場合は、タイプヒンティングをつければ、違うインスタンスが来た時にエラーで落とせますので、全て設定していった方がよりよいアプリケーションになるかと思います。
コメントでいただいた下記の件について
nameとpriceがOrderクラス内で宣言されいているのでは無いかと思うのですが
これについては宣言されていません。Eloquent前提の話ですが
プロパティが設定されている訳ではなく、マジックメソッドが利用されていて
「存在しないプロパティにアクセスされた場合は、この関数の結果を返してあたかもプロパティが設定されているように振る舞う」
という処理になっているためです。
投稿2019/05/26 13:09
総合スコア5036
0
受け取るパラメーターは自由ですが、参考までに自分の場合は
0. mailableの処理は別にどれもこれも同じで良い
0. だけどテンプレートは変えたい
0. テンプレートで使う変数も変えたい
というような点を簡単に考えて引数はコレで作りました。
public function __construct($template, $data = null)
投稿2019/05/25 20:11
総合スコア6415
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/26 12:08
2019/05/26 23:39
2019/05/27 03:46
0
コンストラクタには「なんでも渡せる」
ドキュメントのメール送信部分。OrderはEloquentモデル。
$order = Order::findOrFail($orderId); // 配送処理… Mail::to($request->user())->send(new OrderShipped($order));
引数は減らしても増やしてもいいし自由。
Mail以外にもJobやNotificationも同じ。
Mailableの追加は後からなのでキューのドキュメント見たほうが分かる。
投稿2019/05/25 13:20
総合スコア10377
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/25 13:44
2019/05/25 14:02
2019/05/25 14:56
2019/05/26 03:10
2019/05/26 11:51
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/26 23:32