Vollständige Version anzeigen : Registry und beispiel Config
Moin moin,
ich hab gerade ein kleines problemchen und zwar folgendes:
in der index.php steht dieser abschnitt:
$config = new Zend_Config_Ini('./application/config.ini', 'general');
$registry = Zend_Registry::getInstance();
$registry->set('config', $config);und ich moechte nun innerhalb eines controllers auf eine bestimmte variable aus der config zugreifen. bis jetzt hab ich das so gemacht:
<?php
class IndexController extends Zend_Controller_Action
{
function init()
{
$this->view->baseUrl = $this->_request->getBaseUrl();
$this->config = Zend_Registry::get('config');
}
function indexAction()
{
$this->view->title = $this->config->site->title . " IndexController::indexAction";
}
}geht das ganze evtl noch anders?? oder kann ich z.b. mein beispiel abaendern, so das ich nicht in jeden controller
$this->view->title = $this->config->site->title . " IndexController::indexAction"; schreiben muss?
sondern nur noch
$this->view->title .= " IndexController::indexAction";was mich nervt sind atm einfach beide zeilen aus init()... geht das nicht iwie anders?
MfG
Alex
Blackflash
20.06.2007, 07:13
Wo wird eine Instanz von $this->view erstellt? Ansonsten könntest du das in einem eigenen Basiscontroller implementieren.
$config = new Zend_Config_Ini('./application/config.ini', 'general');
$registry = Zend_Registry::getInstance();
$registry->set('config', $config);
Mich würde zu der Verwendung der Registry mal interessieren, welchen Vorteil es hat erst eine Instanz davon zu erzeugen und dort dann eine Variable zu setzen (set).
Zend_Registry kann doch statisch benutzt werden. Warum dann nicht auch so tun?
Solange ich die Registry nicht mit einer foreach oder so durchlaufen möchte, ist eine Instanz doch mho unnötig. Gibt es da Vor- oder Nachteile?
"Solange ich die Registry nicht mit einer foreach oder so durchlaufen möchte, ist eine Instanz doch mho unnötig. Gibt es da Vor- oder Nachteile?"
nein. (afaik)
Wo wird eine Instanz von $this->view erstellt? Ansonsten könntest du das in einem eigenen Basiscontroller implementieren.zend view braucht keine instanze das funzt auch ohne innerhalb eines controllers ;)
okay ich hab das jetzt geaendert ;) statt
$config = new Zend_Config_Ini('./application/config.ini', 'general');
$registry = Zend_Registry::getInstance();
$registry->set('config', $config); einfach
$config = new Zend_Config_Ini('./application/config.ini', 'general');
Zend_Registry::set('config', $config);
und eigener BasisController ging genau wie?... einfach ne klasse die Zend_Controller_Action extendet und alle anderen controller werden von der neuen basisklasse abgeleitet?
KingCrunch
20.06.2007, 11:42
Das View-Objekt wird vom viewRenderer erstellt ;)
Blackflash
20.06.2007, 12:26
Okay, wieder etwas dazugelernt. ;-) Muss dazu aber auch sagen, dass ich den ViewRenderer (noch) nicht verwende.
Sicherlich kannst du irgendwo auf diesen view zugreifen und den Standardwert dann setzen. Wenn du das ohne viel Aufwand schaffst, ist es sinnvoller als eine neue Basisklasse zu schreiben. Ansonsten schreibst du dir 'ne Basisklasse, die das vorher setzt.
Hi,
ich habs jetzt folgendermaßen gelöst:
library/System/Controller/Action.php
<?php
abstract class System_Controller_Action extends Zend_Controller_Action
{
function init(){
$this->view->baseUrl = $this->_request->getBaseUrl();
$this->config = Zend_Registry::get('config');
}
}
index.php
<?php
error_reporting(E_ALL|E_STRICT);
date_default_timezone_set('Europe/Berlin');
set_include_path('.' . PATH_SEPARATOR . './library'
. PATH_SEPARATOR . './application/models'
. PATH_SEPARATOR . get_include_path());
include 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Controller_Front');
Zend_Loader::loadClass('Zend_Config_Ini');
Zend_Loader::loadClass('Zend_Registry');
Zend_Loader::loadClass('Zend_Db');
Zend_Loader::loadClass('Zend_Db_Table');
Zend_Loader::loadClass('System_Controller_Action') ;
// load configuration
$config = new Zend_Config_Ini('./application/config.ini', 'general');
Zend_Registry::set('config', $config);
// setup database
$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db);
// setup controller
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);
$frontController->setControllerDirectory('./application/controllers');
$frontController->dispatch();
IndexController.php
<?php
class IndexController extends System_Controller_Action
{
function indexAction()
{
$this->view->title = $this->config->site->title . " IndexController::indexAction";
//$this->render();
}
}
okay problem...
wenn ich in der library/System/Controller/Action.php
alles in die init() reinbastel... darf ich im eigentlichen indexcontroller kein init() mehr verwenden.... geht des evtl anders?
KingCrunch
20.06.2007, 14:35
Wieso darfst du das denn nicht?! Oo
weil dann die init der library/System/Controller/Action.php ueberschrieben wird? und das ist irgendwo dumm...
parent::init() in die init mit reinschreiben
vBulletin® v3.6.12, Copyright ©2000-2010, Jelsoft Enterprises Ltd.