Обратитесь к «проблеме» с соглашениями об именах, используемых AutoLoader Zend Framework
-
11-10-2019 - |
Вопрос
Допустим, у меня есть таблица, содержащая пользователи. Анкет Каждая строка в этой таблице, таким образом, является пользователь. Анкет Важной частью здесь является множественное число против единственного числа.
Теперь давайте посмотрим на модели We Sust для них в 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 и имя класса model_dbtable_users для таблицы, а также модели/user.php и model_user для конкретного пользователя. Но если вы решите пропустить это, я не увижу проблему наличия модели/user.php с model_user и models/users.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
.
Все должно быть в порядке. #Знаменитые последние слова ;-)