traitを拡張したい
Laravelの中にあるtraitを拡張したいとか、traitをさらに継承するように使いたい。
use Illuminate\Foundation\Auth\AuthenticatesUsers as BaseAuthenticatesUsers; trait AuthenticatesUsers { use BaseAuthenticatesUsers }
こんな感じ。
でも、オーバーライドすると、元のコードが呼び出せない。だって継承じゃないから。
traitは継承が出来ないので悩むところ。さてどうするか。
use Illuminate\Foundation\Auth\AuthenticatesUsers as BaseAuthenticatesUsers; trait AuthenticatesUsers { use BaseAuthenticatesUsers public function login() { // 任意の処理 // 元コードのloginをbase_loginって名前に書き換えるとかして書きたい // return base_login(); }
traitの任意関数に名前をつける
use BaseAuthenticatesUsers { BaseAuthenticatesUsers::login as base_login; }
この様に、対象となる クラス名::関数名 as 置換後の関数名
で、関数名を置き換えることが出来る
use Illuminate\Foundation\Auth\AuthenticatesUsers as BaseAuthenticatesUsers; /** * Captchaに対応した認証クラス * Class AuthenticatesUsers * @package App\Libraries\Auth */ trait AuthenticatesUsers { use BaseAuthenticatesUsers { BaseAuthenticatesUsers::login as base_login; } public function login() { // 任意の処理 return base_login(); }
これで、元のコードの関数を動かす前に、任意の処理を書くことが出来るようになった。