Обратитесь к «проблеме» с соглашениями об именах, используемых AutoLoader Zend Framework

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

  •  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.

Все должно быть в порядке. #Знаменитые последние слова ;-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top