読者です 読者をやめる 読者になる 読者になる

#! /bin/blog

実行形式のブログです。というか、ほぼポエムです。

[FuelPHP]ネームスペースを上書きしてパッケージのクラスを書き換える

FuelPHP PHP

authパッケージのsimpleauth.phpをカスタマイズしたいけど、
既成のパッケージをいじるのは、気が引けるし、
そもそも、authパッケージは、gitのサブモジュールにしていて修正できない。

って言う時、名前空間が同じだと上書きされるという特徴を利用して、
自前のsimpleauth.phpと置き換えられないかやってみました。

まず、packagesディレクトリに、authパッケージと同じ構成で、
②myauthディレクトリを作り、authパッケージからコピーしたsimpleauth.phpを③のように配置します。

fuel
└─packages
    ├─auth
    │  ├─classes
    │  │  ├─auth
    │  │  │  ├─acl
    │  │  │  ├─group
    │  │  │  └─login
    │  │  │    └─simpleauth.php--------------①
    │  │  └─model
    │  │      └─auth
    │  ├─config
    │  ├─lang
    │  │  └─en
    │  ├─migrations
    │  └─tasks
    └─myauth------------------------------------②
        ├─classes
        │   └─auth
        │      └─login
        │        └─simpleauth.php--------------③
        └─bootstrap.php-------------------------④

つづいて、④のbootstrap.phpを作成します。
これは、公式のcoreを拡張する方法が、ヒントになりました。
パッケージ - 概要 - FuelPHP ドキュメント

以下は、bootstrap.phpの内容となりますが、Autoloaderに、Authつまりauthパッケージと同じ名前空間を指定して、でも、authじゃなくて、myauthの方のsimpleauth.phpを見るように指定してます。たぶん。

<?php

Autoloader::add_core_namespace('Auth');

Autoloader::add_classes(array(

	'Auth\\Auth_Login_Simpleauth'        => __DIR__.'/classes/auth/login/simpleauth.php',
));

最後に、config.phpのalways_loadに、myauthを追加します。

	 'always_load'  => array(

		'packages'  => array(
			'auth',
			'myauth',
			),
	),

これで、うまくいった。
あとは、もう、③simpleauth.phpを、お好きなようにカスタマイズすればいいと思う。

広告を非表示にする