Zend Framework 2 Modul-Freigabe von Variablen zwischen Controller onBootstrap

Ist es möglich, Variablen erstellen oder sogar gemeinsam genutzte Objekte (wie DB-adapter) bei, in Module.php für den Einsatz in allen view-Controller? (Zend Framework 2)

Beispiel:

class Module 
{
    public function onBootstrap(MvcEvent $e)
    {

        $moduleConfig = $e->getServiceManager()->get('Config')
    }
}

Und in einem controller, irgendwie Zugang über:

$this->moduleConfig['db']

Im oben ich weiß, dass wäre nur das config array für den db-adapter, aber wie würde das überhaupt funktionieren?

Sehe ich, dass man das machen kann in einer controller-action:

$config = $this->getServiceLocator()->get('Config')
$dba = new DbAdapter($config['db']);

Ich will nicht, dass jeder Ort muss ich meine config. Wie könnte ich es machen, so etwas wie: $this->config ?? So verfügbar sein, um alle Aktionen. Noch besser, wie zu tun, dass in das gesamte Modul? Ich weiß, ich werde über diese alle falsch, aber in ZF1 wir hatten Zend_Registry::get() für einfache Dinge wie diese. Ich lese über die Dokumentationen und alle Arten von tuts gibt, aber immer gibt es einige Annahmen gemacht werden und ich einfach verloren gehen. Also alles, was ich wirklich will ist :
A) Eine Global zugängliche config-Element,
B) zu Einer weltweit erreichbaren db-adapter

Ich möchte nur dazu aufrufen $this->db oder $this->Einstellungen->Eintrag in meinem Controller. Ist das möglich? Ich weiß, ich bin etwas fehlt, ganz einfach.

Ich habe auch versucht die Einstellung $this->config in meine __ - Konstrukt mit $this->getServiceLocator()->get('Config'); Aber ich verstehe, dass der service locator ist noch nicht verfügbar während konstruieren. Ich habe versucht zu tun, ähnlich wie durch die Einrichtung einer preDispatch in der onBootstrap von dem Modul, aber ich kann nicht scheinen, um diese Elemente in meinem Controller.

FYI, ich habe das in meiner global.php (und Nein, es ist nicht dort zu bleiben, nur Beispiel):

'db' => array(
        'driver' => 'Pdo',
        'dsn'   => 'mysql:dbname=mydb;host=localhost;',
        'username' => 'root',
        'password' => '',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),

    ),

Ich bin in der Lage für den Zugriff auf diese und andere Elemente in jeder Aktion mit getServiceLocator(). Ich möchte diese Elemente als meine controller Eigenschaften in $this->Einstellungen->posten.

Ich freue mich über jede Anleitung! Danke!

Das ist es, was die Dienste-Verwalter gemeint ist!
Ja, ich war nur herauszufinden, dass Letzte Nacht. Habe die db-adapter und config-Global freigegeben plus eine predispatch-Methode setup auf den Controller hinzufügen, um eine db-Eigenschaft des Objekts, die Art von schön, das muss ich zugeben. Es ist nur so verwirrend auf den ersten und Werke, so Verschieden von Zf1. Ich poste meine Lösung später. Eine Frage hätte ich noch. Was über das hinzufügen von globalen Variablen im service manager? Wäre das ein aufrufbarer mit nur einem Wert wie ein string oder boolean oder int? Ich werde es versuchen.
ZF2 ist ZF1 wie ZF1, Symfony oder der Rahmen Ihrer Wahl. Nur einen anderen Rahmen völlig. Ich bin mir nicht sicher, was Sie tun möchten mit globalen Variablen. Entweder etwas ist von der config, session Verwandte oder sollte nicht eine Globale, vielleicht?
Ja, genau. Ganz neues Biest! So bin ich tippte meine Antwort, hoffentlich hilft das auch anderen. Ich habe einige apps, die erfordern, dass Sie manuell aktivieren von Funktionen. Ich hatte Sie in der ini-Dateien, aber jetzt sehe ich, wie die config/autoload-Verzeichnis und gibt ein array zurück anstatt. Wusste nur nicht, wie der Zugriff im Controller, bis jetzt eben! Hilft, eine predispatch-setup. Ich zeige in meiner Antwort. Vielen Dank für die Hilfe und Ratschläge.
Übrigens, geht es nur mir so, oder haben die ZF-docs/tuts scheinen immer weglassen, etwas gebraucht um den Sinn dahinter? Ich fühle mich wie es ' s Annahmen an einigen stellen (und Sie nicht sagen, was Sie sind!) oder Sie zeigen Ihnen, was Sie tun, in einem Ort, aber nicht, wie es bezieht sich auf eine app-weit. aber... vielleicht ist es nur mich. 🙂

InformationsquelleAutor gregthegeek | 2013-01-02

Schreibe einen Kommentar