Traitってなんだ?はこちらの記事を参照。
https://qiita.com/mokkos/items/53d1d4cbf57bd6ceba5e
Trait に共通処理を実装している場合、常に呼び出したい処理ってありますよね。
公式ドキュメントに載っていなかったのでまとめました。
まず、laravel は Model の基盤を Eloquent というクラスで定義しています。
それにより、Model内で boot() を書けば・・・あら不思議。Eloquentが呼び出されたとき、自動的に関数が呼び出されます。
class Fugafuga extends Model
{
public static function boot()
{
// __construct() が呼び出された後に実行されます
}
}
深掘りして、Model.php をみてみると・・・・
/**
* Boot all of the bootable traits on the model.
*
* @return void
*/
protected static function bootTraits()
{
$class = static::class;
foreach (class_uses_recursive($class) as $trait) {
if (method_exists($class, $method = 'boot'.class_basename($trait))) {
forward_static_call([$class, $method]);
}
}
}
が実装されていました。
つまり、Traitでも boot+(Trait名)って書くと勝手に初期に呼び出してくれることになります。
Trait Hogehoge
{
public static function bootHogehoge()
{
}
}
このように実装することで、Hogehoge 内の関数が呼び出される直前に bootHogehoge() が呼び出されました!