Una directory con una risoluzione del caricamento automatico del periodo basato su uno spazio dei nomi in Zend Framework?

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

Domanda

Ho una cartella nella cartella della mia libreria che prende il nome dal mio sito web. Il percorso della cartella è come:

~ www biblioteca mywebsite.com

Se sto usando Zend AutoLoader per caricare lo spazio dei nomi di tutto nel percorso della libreria, avrò qualche problema con caricamento automatico di una classe da quel file con uno spazio dei nomi come questo:

mywebsite.com myclass :: myFunction ();

Ho cercato online la documentazione su questo e non riesco a trovare alcuna informazione sull'uso dei periodi in questo modo.

È stato utile?

Soluzione

L'ho provato e la complicazione è in PHP. Penso che Zend stia registrando bene lo spazio dei nomi, perché quando chiamo zend_load_autoloader :: getregisterednamespaces () mostra che è registrato. Ma quando chiamo il metodo statico dallo spazio dei nomi completamente qualificato, PHP ne dà un errore:

Fatal error: Undefined constant 'myWebsite' in /home/jesse/www/application/controllers/MyController.php on line 15 

Sembra che PHP stia terminando l'identificatore dello spazio dei nomi, durante l'analisi, al. (personaggio del periodo). Questo è scomparso perché per me avere una biblioteca che prende il nome dal sito Web era importante per il mio design.

Rinominerò la directory a myWebsitecom o eventualmente renderebbe la sua sotto -directory come

mywebsite com e incorporarlo nel mio albero dello spazio dei nomi come: mynamespace com myclass :: myfunction ();

Altri suggerimenti

Il modo più semplice per scoprirlo è provarlo.

Se non funziona, potresti sempre scrivere un caricatore automatico personalizzato per farlo funzionare. Non ho molta esperienza con gli spazi dei nomi PHP, ma l'autoloader sembrerebbe qualcosa del genere (immagino che dovrai armeggiare un po 'per determinare il percorso del file corretto dato il nome della classe):

<?php
class My_Loader_Autoloader_MyWebsite implements Zend_Loader_Autoloader_Interface {

    /**
     * (non-PHPdoc)
     * @see Zend_Loader_Autoloader_Interface::autoload()
     */
    public function autoload($class) {

        if (strtolower(substr($class, 0, 9)) == 'mywebsite') {
            $file = realpath(APPLICATION_PATH . '/../library/myWebsite.com/' . $class);
            if ($file) {
                require_once $file;
                return $class;
            }
        }
        return false;
    }
}

Quindi mettilo nel tuo bootstrap:

$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->pushAutoloader(new My_Loader_Autoloader_MyWebsite());

E se questa lezione deve trovarsi in quella directory di mywebsite.com, potresti semplicemente imbrogliare e gettare anche lì dentro:

 require_once(APPLICATION_PATH . '/../library/myWebsite.com/Loader/Autoloader/MyWebsite.php');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top