0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel:Trait内で毎回呼び出す処理を実装できた

Last updated at Posted at 2019-10-02

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() が呼び出されました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?