Lehre 2. Automatische Generierung von proxies
Habe ich ein komisches problem. Ich will das ausschalten der automatischen Generierung von meinen proxies in der Lehre 2. Ich fand diese Zeile des Codes, sollte das tun (und tut) der trick:
$config->setProxyDir(APPPATHSYSTEM."/proxies");
$config->setProxyNamespace('Proxies');
//Auto generate proxies for development
$config->setAutoGenerateProxyClasses(DEVELOPMENT);
Auf meiner Testumgebung die Proxys befinden sich auf Anwendung/proxies. also:
application/proxies/BaseUserProxy.php
Wenn ich auf die live-Umgebung mein code plötzlich sucht die Proxys bei Anwendung/proxies/Proxies, die nicht die tatsächliche Lage.
Verstehe ich, es hat etwas zu tun mit dem namespace, aber ich verstehe nicht, warum es verhält sich anders, wenn mit der setAutoGenerateProxy Methode.
Irgendwelche Ideen?
Bearbeiten
Habe ich generieren des neuen proxies über die:
orm:generate-proxies
option.
Gab mich in dieser Ausgabe:
php doctrine.php orm:generate-proxies
Processing entity "Base\Element"
Processing entity "Base\Page"
...
Processing entity "Base\Site"
Proxy classes generated to "/var/www/application/proxies"
Blick auf die Letzte Zeile, die proxies generiert werden, im /var/www/application/Proxys. Das directory-listing sieht wie folgt aus:
BaseElementProxy.php
BasePageProxy.php
...
BaseSiteProxy.php
So gibt es keine zusätzlichen Proxies-Verzeichnis. Aber wenn ich aktualisieren meine Webseite, es denkt, es ist, es gibt mir die folgende Fehlermeldung:
Warning: require(/var/www/application//proxies/Proxies/BaseUserProxy.php)
[function.require]: failed to open stream:
No such file or directory in /var/www/library/Doctrine/Common/ClassLoader.php on line 148
Warum ist der extra-Proxies Verzeichnis Hinzugefügt? Wenn ich generieren des Proxys auf jede Anforderung sieht es nicht in dem extra-Verzeichnis Proxies. Irgendjemand?
@Bryan M.: Das ist keine Lösung, sondern ein workaround. Außerdem, es funktioniert nicht. Bei der Generierung des Proxys, die Sie bei der Anwendung Ihrer Empfehlung generiert werden, in APPPATHSYSTEM und meine webapp wird versuchen, laden Sie Sie von APPPATHSYSTEM."Proxies". Das problem ist, dass das system sieht für die Stimmrechtsvertreter auf unterschiedlichen Standorten aus, wenn ich verwenden:
$config->setAutoGenerateProxyClasses(DEVELOPMENT);
Wenn ENTWICKLUNG wahr ist, es wird APPPATHSYSTEM. Wenn die ENTWICKLUNG auf false gesetzt wird, werden APPPATHSYSTEM."Proxies". Nur die Umschaltung der ENTWICKLUNG Konstanz bricht mir das Anwendung, was theoretisch nicht möglich sein sollte.
- Versuchen Sie, die Proxy-Verzeichnis, um nur APPPATHSYSTEM. Es sollte abholen die 'Proxies' - namespace von dort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind, dass Sie die Entwicklung auf OS X und bereitstellen von Linux? OS X-Dateisystem ist groß - unempfindlich. So werde ich oft laufen in ein problem, wo ich falsch das bei einer Klasse, und es läuft und geht einfach gut in das lokale Umfeld, aber drosseln auf unserem server.
So, in diesem Fall, in OS X ist der namespace "Proxies" ist in der Lage, zu beheben, um "/proxies", aber in der Produktion, es kann nicht finden den Klasse Ordner, und erstellt unter "/proxies/Proxies".
Ich glaube nicht, dass automatisch generierte proxies kümmern.
Anstatt automatisch generierte proxies für die Produktion, Sie sollten wahrscheinlich
doctrine orm:generate-proxies
, was ich vermute, wird setzen Sie in den Ort Ihrer Produktion-code konfiguriert ist, nach Ihnen zu suchen.Wenn Sie den Ordner umbenennen zu etwas namens "/temp" Sie erkennen den Unterschied zwischen Pfad und namespace.
Pfad ist der absolute Pfad zu dem Verzeichnis proxies sind immer erstellt. Der Namensraum ist notwendig, um Ihnen zu erlauben, zu konfigurieren, wie einen autoloader nimmt diese Entitäten.
Den Pfad in deinem Fall etwas wie "proxies/Proxies" und der namespace ist dann "Proxies". Ihr autoloader konfiguriert werden, um zu hören namespace-Präfix "Proxies" im Verzeichnis "proxies/".
Dies ist alle Stimmung mit Doctrine 2 RC1 obwohl, wir haben einen Weg gefunden zum expliziten laden eines proxy-Pfad ohne Hilfe eines Autoloaders ohne zusätzliche Kosten. Die Proxy-Namespace configuratino ist daher nur notwendig, um sicherzustellen, dass keine anderen Klassen im gleichen namespace wie die proxies.