Zend Framework Autoloaderで使用されている命名規則で「問題」を回避する
-
11-10-2019 - |
質問
テーブルがあるとしましょう ユーザー. 。したがって、そのテーブルの各行はaです ユーザー. 。ここでの重要な部分は、複数形と単数形です。
それでは、Zend Frameworkでこれらのモデルをセットアップしたことを見てみましょう。
class Model_Users extends Zend_Db_Table_Abstract
{
protected $_name = 'users';
protected $_primary = 'user_id';
}
さて、私たちが別のものが欲しいとさらに推測しましょう ユーザー によって返される標準行以外のオブジェクト Zend_Db_Table
, 、しかし、私たちはまだその機能を維持したいので、それを拡張するだけです。次に、次のような単一のユーザーを実装して名前を付けることは理にかなっています。
class Model_User extends Zend_Db_Table_Row_Abstract
{
... Bunch of cool functions here :)
}
次に、追加するだけです protected $_rowClass = 'Model_User';
に Model_Users
クラスと私たちは完了です...通常はそれです します 事実ですが、ここではZend Frameworkがクラスを自動ロードする方法に問題があるようです。フォルダー構造を持つことができるためです /defaut/models/foo.php
その中のクラスに名前を付けます Model_Foo
. 。フォルダーには複数名がありますが、クラスには特異な名前があります。上記の構造を持ちたいときにこれは問題になるようです。 Zend Frameworkは UserModel.php
と UsersModel.php
.
したがって、この長くやや詩的な質問への質問は次のとおりです。
手動で使用し始めずにこれを回避する方法はありますか?
解決
実際、モデル内のDBフォルダーにテーブルクラスを配置することをお勧めします。そのため、モデル/DBTABLE/USERS.PHPおよびクラス名モデル_DBTABLE_USERSのテーブルのモデル/user.phpとモデル_userconcreteユーザーになります。ただし、それをスキップすることにした場合、モデル_userとmodel/user.phpを使用してmodel_userを使用してmodel_usersを使用してModel/user.phpをテーブルとして持っているという問題はありません。
他のヒント
私が持っていると言うことから始めましょう 一度もない 使用しました /model
ディレクトリオートロードディレクトリ構造。私は個人的に、そのアプリケーションのために作成する「ライブラリ」にモデルを置くことを好みます。これが私からの抜粋です application.ini
includePaths.library = APPLICATION_PATH "/../library"
autoloadernamespaces[] = "SNTrack_"
私の ユーザー だろう SNTrack_Model_User
にあります /library/SNTrack/Model/User.php
. 。私は電話します テーブル SNTrack_Model_UserTable
.
標準的なオートローダーのように見えます。
おそらく、自動車媒介者を導入してください Bootstrap.php
, 、次のようなものを使用してください
protected function _initAutloader()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'basePath' => APPLICATION_PATH,
'namespace' => '',
));
}
その後 application/models/User.php
あなたはあなたのクラスを定義します Model_User
. 。とで application/models/Users.php
あなたはあなたのクラスを定義します Model_Users
.
すべてが大丈夫なはずです。 #famouslastwords ;-)