0

ユーザーを含むテーブルがあるとしましょう。したがって、そのテーブルの各行はユーザーです。ここで重要なのは、複数形と単数形です。

それでは、ZendFrameworkでこれらのモデルを設定する方法を見てみましょう。

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で完了です...通常はそうですが、ZendFrameworkがクラスを自動ロードする方法に問題があるようです。フォルダ構造を持ち、/defaut/models/foo.phpその中のクラスに名前を付けることができるのでModel_Foo。フォルダには複数形の名前がありますが、クラスには単数形の名前があります。上記のような構造にしたい場合、これが問題になるようです。UserModel.phpZend Frameworkは、とを区別できないようですUsersModel.php

したがって、この長くてやや詩的な質問に対する質問は次のとおりです。

インクルードを手動で使用し始めることなくこれを回避する方法はありますか?

4

3 に答える 3

1

実際には、テーブルクラスをモデル内のdbフォルダーに配置することをお勧めします。したがって、テーブルの場合はmodels / dbtable / users.phpとクラス名Model_DbTable_Usersになり、具象ユーザーの場合はmodels/user.phpとModel_Userになります。しかし、それをスキップすることにした場合、Model_Userを使用したmodel/user.phpとModel_Usersを使用したmodels/users.phpをテーブルとして使用するという問題は発生しません。

于 2010-12-16T18:34:52.613 に答える
0

まず、ディレクトリの自動読み込みディレクトリ構造を使用したことがないということから始めましょう。/model私は個人的に、そのアプリケーション用に作成した「ライブラリ」にモデルを配置することを好みます。これが私の抜粋ですapplication.ini

includePaths.library = APPLICATION_PATH "/../library"    
autoloadernamespaces[] = "SNTrack_"

私のユーザーはにありSNTrack_Model_User、に位置してい/library/SNTrack/Model/User.phpます。私はテーブル を呼びますSNTrack_Model_UserTable

于 2010-12-16T18:23:58.900 に答える
0

標準のオートローダーのもののように見えます。

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 ;-)

于 2010-12-17T11:36:29.987 に答える