この記事はFuelPHP Advent Calendar 2015の21日目になります。
カレンダーに空きがあったので初投稿です。
モデル名からModel_接頭辞をはずす方法について書きます。
FuelPHPの規約ではモデル名にはModel_接頭辞(prefix)を付けることになっています。
(oilコマンドでモデルを生成してもクラス名にはModel_が付加されます)
下記はコントローラーでモデルを使う例です。この程度なら全然平気ですが
public action_index()
{
$samples = Model_Sample::test();
//以下略
}
実際は何度もモデルのメソッドを呼び出すことになります。
さらにモデルに定数なんぞ定義した日には一気に胃もたれ感が...
//つらい
$posts = Model_Post::lists($user_id, Model_Post::ONLY_DRAFT);
//こう使いたい
$posts = Post::lists($user_id, Post::ONLY_DRAFT);
Model_はずしたい、はずそう・・・はずしましょう!
方法は3通りあるので順に記載していきます。
##1.モデルをclasses直下に配置する方法
#####手順
- クラス名からModel_をはずす
- ファイルをmodelディレクトリからclasses直下に移す
#####特徴
○ 一番簡単
× classesが散らかるのでモデルの数が多いと管理が面倒
##2.モデルにnamespaceを指定する方法
#####手順
- クラス名からModel_をはずす
- クラスにnamespace Modelを追加する
#####特徴
○ modelディレクトリはそのままでOK
× namespaceが変わるので\忘れなどに注意
namespace Model;
//Orm\Modelではダメ
class Sample extends \Orm\Model
{
public static function test()
{
//Arrではダメ
return \Arr::pluck($items, $label);
}
}
//使用する側のコントローラーはこんな感じで
use Model\Sample
$samples = Sample::find('all');
##3.bootstrapでオートロードのパスを指定する方法
#####手順
- クラス名からModel_をはずす
- bootstrap.phpでパスを指定する
\Autoloader::add_classes(array(
'Sample' => APPPATH.'classes/model/sample.php',
'User' => APPPATH.'classes/model/user.php',
'Comment' => APPPATH.'classes/model/comment.php',
));
#####特徴
○ ファイル構成を変更しなくて良い
× モデルを増やすたびにbootstrapに登録する必要がある
以上3通りでした。個人的にはパターン3が好きです。
Fuelを使い始めてからしばらくはModel_を外せると知りませんでした。
(改めてしっかり公式のモデルのページを見たら先頭のほうにさらっとパターン2の方法が…)
http://fuelphp.jp/docs/1.8/general/models.html
Fuelの規約的には「モデルだからクラス名はModel_Sample」だけど
オートローダー的には「ModelディレクトリにあるSampleクラスだからクラス名はModel_Sample」ってことなんですね。
コントローラーからModel_が一掃されて見通しがとても良くなりました。
Model_にもやもやしている人はぜひ一度お試しを。
ちなみにFuelPHP Advent Calendar 2015は後1日空きがあるようです、あるようです。