Come muoversi un “problema” con le convenzioni di denominazione utilizzate dal caricatore automatico Zend Framework

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

  •  11-10-2019
  •  | 
  •  

Domanda

Diciamo che ho una tabella contenente Utenti . Ogni riga nella tabella è quindi un utente . La parte importante qui è il plurale vs forma singolare.

Ora, diamo un'occhiata al abbiamo istituito modelli di questi in Zend Framework:

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

Ora, diamo inoltre presumere che vogliamo un altro utente oggetto diverso da riga di serie restituito dal Zend_Db_Table, ma ci vorrebbe ancora mantenere la sua funzionalità, basta estenderlo. Sarebbe quindi sensato implementare e nominare un singolo utente, come:

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

Abbiamo poi basta aggiungere protected $_rowClass = 'Model_User'; alla classe Model_Users e abbiamo finito ... Normalmente che potrebbe essere il caso, ma sembra che ci sia un problema qui in modo Zend Framework automaticamente carica le classi. Dal momento che siamo in grado di avere la /defaut/models/foo.php struttura di cartelle e denominare la classe all'interno che Model_Foo. La cartella ha un nome plurale, ma la classe ha una singolare. Questo sembra diventare un problema quando voglio avere la struttura di cui sopra. Dato che Zend Framework non sembra essere in grado di distinguere tra il UserModel.php e UsersModel.php.

Quindi la domanda per questo lungo e un po 'poetica domanda è:

C'è un modo per aggirare questo senza iniziare a utilizzare manualmente include?

È stato utile?

Soluzione

In realtà, si raccomanda di mettere le classi della tabella in db cartella all'interno di modelli, per cui sarebbe modelli / DBTABLE / users.php e nome classe Model_DbTable_Users per la tavola, e modelli / e user.php Model_User per gli utilizzatori di cemento. Ma se si decide di saltare su quel non vedo il problema di avere il modello / user.php con Model_User e modelli / users.php con Model_Users come tavolo.

Altri suggerimenti

Lasciatemi iniziare dicendo che ho non utilizzato la directory /model struttura di directory auto-caricamento. Io personalmente preferisco mettere i miei modelli in una "libreria" che creo per tale applicazione. Ecco un estratto dal mio application.ini

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

Il mio utente sarebbe SNTrack_Model_User e situato a /library/SNTrack/Model/User.php. Che chiamerei il tabella SNTrack_Model_UserTable.

appare come una cosa normale caricatore automatico.

Assicurarsi di inizializzare il caricatore automatico, probabilmente nel Bootstrap.php, usando qualcosa come:

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

Poi nel application/models/User.php si definisce il Model_User classe. E in application/models/Users.php si definisce il Model_Users classe.

Tutto dovrebbe andare bene. #FamousLastWords; -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top