Posted at
FuelPHPDay 21

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

More than 3 years have passed since last update.

この記事は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日空きがあるようです、あるようです。