2010-12-16 1 views
0

Допустим, что у меня есть таблица, содержащая пользователей. Таким образом, каждая строка в этой таблице является пользователем. Важная часть здесь - множественное число против единственной формы.Обход «проблемы» с соглашениями об именах, которые используются автозагрузчиком Zend Framework

Теперь давайте посмотрим на мы создали модели для них в 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.

Так что вопрос к этому длинному и нескольким поэтическому вопросу:

Есть ли способ обойти эту проблему без запуска вручную использовать включает в себя?

+0

Я не уверен на 100%, что вы пытаетесь обойти ... Я попытаюсь ответить, предоставив вам пример того, как я настроил бы этот стол и класс строк – gnarf 2010-12-16 18:23:46

ответ

1

На самом деле рекомендуется поместить ваши классы таблиц в папку db в моделях, поэтому для конкретного пользователя будут использоваться модели/dbtable/users.php и имя класса Model_DbTable_Users для таблицы, а также модели/user.php и Model_User для конкретного пользователя. Но если вы решите пропустить это, я не вижу проблемы с моделью/user.php с Model_User и models/users.php с Model_Users в качестве таблицы.

+0

Проблема, которую Zend Framework отвечает, говоря: Fatal error: Class 'Model_Users' не найден ... Если я включаю оба файла вручную, все работает нормально. И если я изменю имена их, чтобы они не «сталкивались», это также отлично работает. – inquam 2010-12-16 18:50:24

0

Позволь мне начать с того, у меня есть никогда использовал структуру каталогов автозагрузки /model каталога. Я лично предпочитаю помещать свои модели в «библиотеку», которую я создаю для этого приложения. Вот отрывок из моего application.ini

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

Моего пользователя будет SNTrack_Model_User и находятся в /library/SNTrack/Model/User.php. Я бы назвал таблицу SNTrack_Model_UserTable.

+0

I это для основных функций в моем приложении. Но для конкретных модулей, которые модели будут перечислять в папке моделей, поскольку каждый модуль будет полностью автономным, за исключением основных функций. – inquam 2010-12-16 18:49:00

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