Frage

Ich versuche, die Doctrine2 Sandbox mit einem Standard Zend Framework App zu integrieren. Wenn ich versuche, Namensräume in der Steuerung verwende ich ein ‚Ungültige Controller-Klasse (‚Indexcontroller‘)‘ erhalten Fehler

Das funktioniert:

use Entities\User, Entities\Address;


class IndexController extends Zend_Controller_Action
{
...
}

Dies gilt nicht (aber soll?):

namespace Entities;


class IndexController extends \Zend_Controller_Action
{
...
}
War es hilfreich?

Lösung

Im ersten Beispiel werden Sie Namespaces in den Controller zu importieren. In Ihrem zweiten Beispiel zuweisen Sie den Controller zu einem Namensraum.

ein Namensräume importieren können Sie Referenzklassen ohne ihre voll qualifizierten Klassennamen Benutzer mit.

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

einen Namespace zu Ihrem Controller zuweisen tatsächlich ändert die vollständig qualifizierten Namen für die Klasse.

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

(Klassen in einem Namensraum kann immer anderen Klassen im selben Namespace verweisen, ohne dass ‚Verwendung‘ es. Ich vermute, das war der Hauptgrund für einen Benutzer Option versuchten 2).

Zend Framework 1.10 ist noch Namespace unwissend. Wenn Sie eine URL-Analyse und versucht, einen Controller zu laden, wird es nur für \IndexController im Standard globalen Namensraum anschaut, und keine Ahnung haben, dass es auf einen benutzerdefinierten Namespace zugewiesen worden ist (\Entities\IndexController).

Meine Empfehlung ist, dass, wenn sie mit Controllern in ZF arbeiten, nicht assign Namespaces zu ihnen. Importieren funktioniert gut. Wir werden bis ZF 2.0 für volle Namespace-Unterstützung warten müssen.

Andere Tipps

Nachdem man durch die manuelle und das Lesen einiger diese Seite es das scheint würde in PHP, wenn Sie möchten einen Namespace deklarieren und zu konstruieren um Sie herum Ihre zweite Syntax. So das würde schaffen Objekte wie

Entities\IndexController 

so dass sie nicht gefunden mehr von Zend.

Nach jener Seite, die Sie haben Gebrauch zu verwenden, um einen Namensraum zu importieren und verwenden.

Das ist, warum funktioniert es in Ihrem ersten Beispiel und nicht in der zweiten.

Hope Ich bin richtig und das hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top