Domanda

Sto cercando di integrare la sandbox Doctrine2 con un valore predefinito Zend Framework App. Quando provo ad usare namespacing nel controllore ottengo un 'classe controller non valido ( 'IndexController')' errore

Questo funziona:

use Entities\User, Entities\Address;


class IndexController extends Zend_Controller_Action
{
...
}

Questo non lo fa (ma dovrebbe?):

namespace Entities;


class IndexController extends \Zend_Controller_Action
{
...
}
È stato utile?

Soluzione

Nel vostro primo esempio, si sta importando spazi dei nomi nel controller. Nel suo secondo esempio, si sta assegnando il controller per uno spazio dei nomi.

Importazione di un namespace consente alle classi di riferimento, senza dover all'utente il loro nome completo della classe.

new \Entities\User() // without import
new User() // with import

L'assegnazione di uno spazio dei nomi per il controller cambia in realtà il nome completo per la vostra classe.

new \IndexController() // without namespace
new \Entities\IndexController() // with namespace

(classi all'interno di uno spazio dei nomi possono sempre fare riferimento altre classi in quello stesso spazio dei nomi, senza dover 'uso' esso. Ho il sospetto che è stato il motivo principale si stava tentando uso l'opzione 2 per).

Zend Framework 1.10 è ancora namespace ignorante. Durante l'analisi di un URL e cercando di caricare un controller, cercherà guardare solo nel namespace globale di default per \IndexController, e non hanno idea che è stato assegnato ad un namespace definito dall'utente (\Entities\IndexController).

La mia raccomandazione è che quando si lavora con i controller in ZF, fare i namespace non assegna a loro. L'importazione funziona bene. Dovremo aspettare fino a ZF 2.0 per il pieno supporto dello spazio dei nomi.

Altri suggerimenti

Dopo aver attraversato manuale e leggendo alcune delle questa pagina sembrerebbe che in PHP quando si vuole dichiarare e costruire intorno a uno spazio dei nomi che si utilizza il seconda sintassi. In modo che creare oggetti come

Entities\IndexController 

quindi non è più trovato da Zend.

Secondo coloro sito è necessario utilizzare utilizzare per importare uno spazio dei nomi e utilizzarlo.

Ecco perché funziona nel vostro primo esempio e non nel secondo.

La speranza io ho ragione e che questo aiuti!

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