Moverse por un “problema” con las convenciones de nombres utilizados por el cargador automático de Zend Framework

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

  •  11-10-2019
  •  | 
  •  

Pregunta

Digamos que tengo una tabla que contiene los usuarios . Cada fila de la tabla que es así un usuario . La parte importante aquí es el plural vs forma singular.

Ahora, vamos a ver la hemos creado modelos para estos en Zend Framework:

class Model_Users extends Zend_Db_Table_Abstract
{
  protected $_name      = 'users';
  protected $_primary   = 'user_id';
}

Ahora, vamos a suponer que más queremos otra usuario objeto que no sea la fila estándar devuelto por el Zend_Db_Table, pero creemos que todavía como para mantener su funcionalidad, simplemente extenderlo. Sería entonces tiene sentido para poner en práctica y el nombre de un solo usuario como:

class Model_User extends Zend_Db_Table_Row_Abstract
{
  ... Bunch of cool functions here :)
}

A continuación, sólo tiene que añadir protected $_rowClass = 'Model_User'; a la clase Model_Users y hemos terminado ... Normalmente, eso le ser el caso, pero parece que hay un problema aquí en la forma de Zend Framework carga automáticamente las clases. Ya que podemos tener la /defaut/models/foo.php estructura de la carpeta y el nombre de la clase dentro de ese Model_Foo. La carpeta tiene un nombre en plural, pero la clase tiene una singular. Esto parece ser un problema cuando quiero tener la estructura indicada anteriormente. Desde Zend Framework no parece ser capaz de diferenciar entre la UserModel.php y UsersModel.php.

Así que la pregunta a esta larga y un tanto poética pregunta es:

¿Hay una manera de evitar esto sin empezar a usar de forma manual incluye?

¿Fue útil?

Solución

En realidad lo que se recomienda poner sus clases en la tabla db carpeta dentro de los modelos, por lo que sería Model_DbTable_Users modelos / DBTABLE / users.php y nombre de clase para la mesa, y los modelos / user.php y Model_User para el usuario concreto. Pero si decide saltar en el que yo no veo el problema de tener modelo / user.php con Model_User y modelos / users.php con Model_Users como mesa.

Otros consejos

Permítanme comenzar diciendo que tengo no se utiliza la estructura de directorios de carga automática directorio /model. Yo personalmente prefiero poner mis modelos en una "biblioteca" que se crea para esa aplicación. He aquí un extracto de mi application.ini

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

Mi usuario sería SNTrack_Model_User y situado en /library/SNTrack/Model/User.php. Me gustaría llamar a la tabla SNTrack_Model_UserTable.

llega a ser fija cargador automático estándar.

Asegúrese de inicializar el cargador automático, probablemente en Bootstrap.php, usando algo como:

protected function _initAutloader()
{
     $autoloader = new Zend_Application_Module_Autoloader(array(
         'basePath'    => APPLICATION_PATH,
          'namespace'  => '',
     ));
}

A continuación, en application/models/User.php a definir su Model_User clase. Y en application/models/Users.php a definir su Model_Users clase.

Todo debe estar bien. #FamousLastWords; -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top