Zend Framework Autoloaderで使用されている命名規則で「問題」を回避する

StackOverflow https://stackoverflow.com/questions/4463771

  •  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.phpUsersModel.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 ;-)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top