Come caricare automaticamente una classe singleton (costruttore privato) in Zend Controller?

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

  •  27-10-2019
  •  | 
  •  

Domanda

Ho una classe singleton nella mia directory dei modelli e devo usare la sua funzione in classe controller. Farlo da requisite_once ('percorso file'); E la funzione di chiamata come ClassName :: FunctionName () funziona bene, ma devo usare Zend AutoLoader invece di includere la classe tramite Requisite_once. Mi sono imbattuto in un numero di soluzioni qui su StackOverflow che utilizzava bootstrap.php in termini di aggiunta di seguenti codice lì e sembra fare lo stesso di Requisite_once ('percorso del file'); fatto in controller

  protected function _initAutoload()
    {   
       Zend_Loader_Autoloader::getInstance();
    }

Andando in questo modo ricevo un errore fatale: class 'classname' non trovato in {path} controllers sampleController.php su {riga n.} Sono sicuro che mi manca qualcosa ma non riesco a capire cosa esattamente.

È stato utile?

Soluzione

Come User1145086 ha giustamente detto, se segui la convenzione di denominazione di Zend, la tua classe dovrebbe essere caricata automaticamente.

Se hai una lezione, diciamo Class automatico, e lo vuoi caricare automaticamente, puoi fare quanto segue:

  1. Crea una cartella nel tuo /biblioteca cartella e chiamarlo 'Mio'.
  2. Scrivi il seguente codice nel metodo della classe InitaUtoLoad di Bootstrap:

    Zend_Loader_Autoloader::getInstance()->registerNamespace(array('My_'));
    
  3. Posizionare il file contenente il file 'Autoloadedclass' nel 'Mio' cartella appena creata e rinomina il file su autoloadedclass.php in modo che il file si trovi alla fine: /library/my/autoloadedclass.php
  4. Infine, rinomina la classe stessa in my_autoloadedclass come richiede la convenzione di denominazione di Zend. D'ora in poi puoi ottenere un riferimento alla tua classe usando quel nome di classe my_autoloadedclass da qualsiasi parte della tua applicazione.

Altri suggerimenti

Se chiami la tua classe in base alle convenzioni di Zend, la classe dovrebbe caricare automaticamente senza problemi. Se la tua classe si trova a /application/models/myclass.php ed è chiamato:

class Application_Model_MyClass {

    public function myMethod(){
    }
}

Dovrebbe caricare automaticamente bene, non credo che il fatto che sia un singleton influirebbe sul caricamento automatico.

Se è necessario utilizzare i nomi della tua classe puoi aggiungere un nuovo spazio dei nomi al caricatore automatico le opere in /biblioteca directory, aggiungi questa riga al tuo applicazione.ini :

autoloaderNamespaces[] = "MyNamespace_"

Quindi aggiungi il /Mynamespace directory al /biblioteca directory e nomina i tuoi file di conseguenza:

class MyNamespace_MyClass {
}

Spero che sia di aiuto.

Se i nomi delle classi e le posizioni nella tua libreria non seguono Convenzioni di denominazione Zend, Quindi puoi scrivere un caricatore automatico per quella libreria e spingere questo caricatore automatico sul Zend_Loader_Autoloader pila.

Vedere https://stackoverflow.com/a/8820536/131824 per un esempio.

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