LoginSignup
2
1

More than 5 years have passed since last update.

FuelPHPのモデル名からModel_接頭辞をはずす

Posted at

この記事はFuelPHP Advent Calendar 2015の21日目になります。
カレンダーに空きがあったので初投稿です。
モデル名からModel_接頭辞をはずす方法について書きます。

FuelPHPの規約ではモデル名にはModel_接頭辞(prefix)を付けることになっています。
(oilコマンドでモデルを生成してもクラス名にはModel_が付加されます)
下記はコントローラーでモデルを使う例です。この程度なら全然平気ですが

controller/samples.php
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直下に配置する方法

手順
  1. クラス名からModel_をはずす
  2. ファイルをmodelディレクトリからclasses直下に移す
特徴

○ 一番簡単
× classesが散らかるのでモデルの数が多いと管理が面倒

2.モデルにnamespaceを指定する方法

手順
  1. クラス名からModel_をはずす
  2. クラスにnamespace Modelを追加する
特徴

○ modelディレクトリはそのままでOK
× namespaceが変わるので\忘れなどに注意

model/sample.php
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でオートロードのパスを指定する方法

手順
  1. クラス名からModel_をはずす
  2. bootstrap.phpでパスを指定する
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日空きがあるようです、あるようです。

2
1
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
2
1