2012-11-01 11 views
7

W celu utrzymania mojego kodu SUCHEGO chciałbym móc zdefiniować zmienne "kontrolera".Zmienne kontrolerów krzyżowych w Phalcon

Klasycznym przykładem jest to, że chciałbym uzyskać dostęp do niektórych elementów konfiguracji, które są załadowane do mojej bootstap.

Jaki jest najlepszy sposób na osiągnięcie tego celu?

Tim

Odpowiedz

7

Zawsze można użyć pojemnika Di.

Po zarejestrowaniu komponentu w di jest on dostępny w kontrolerze metodą magiczną. Na przykład:

// Bootstrap 
$configFile = ROOT_PATH . '/app/config/config.ini'; 

// Create the new object 
$config = new \Phalcon\Config\Adapter\Ini($configFile); 

// Store it in the Di container 
$this->di->setShared('config', $config); 

w kontrolerze jest tak proste, jak:

$config = $this->config; 

Jeśli utworzyć klasę sterownika bazowego, można przekazać te obiekty w widoku razie potrzeby tak:

$this->view->setVar('config', $this->config); 

Wreszcie pojemnik Di może działać także jako rejestr, w którym można przechowywać przedmioty, które mogą być używane w aplikacji.

Aby uzyskać przykład ładowania i uzyskiwania dostępu do obiektów w kontrolerach, zajrzyj do repozytorium phalcon/website. Implementuje wzorce bootstrapowania i kontrolerów bazowych między innymi.

+2

Dzięki za to! Działa naprawdę dobrze – Tim

+1

Wiem, że jestem trochę spóźniony, ale dlaczego w tym scenariuszu używałbyś $ di-> set() ponad $ di-> setShared()? – Mechzeit

+0

@Spinkzeit 'setShared' może być tu lepszym rozwiązaniem - masz rację - ponieważ' $ config' jest naprawdę używany w całej aplikacji i musi być obiektem współdzielonym. Odpowiednio zmieniłem swoją odpowiedź, dzięki! –

2

Oto moja konfiguracja.

[PHP]  5.4.1 
[phalcon] 1.2.1 

Oto fragment z mojego bootstrap. (/ App-root/public/index.php)

$di = new \Phalcon\DI\FactoryDefault(); 

    // I'll pass the config to a controller. 
    $di->set('config', $config); 

    $application = new \Phalcon\Mvc\Application(); 
    $application->setDI($di); 
    echo $application->handle()->getContent(); 

A oto fragment z mojego sterownika bazowego. (/ App-root/app/controllers/ControllerBase.php)

class ControllerBase extends Phalcon\Mvc\Controller 
    { 
      protected $config; 

      protected function initialize() 
      { 
        $this->config = $this->di->get('config'); 
        $appName  = $this->config->application->appName; 
+0

fajny kontekst - i: czy to rozwiązuje pytanie :-) – kleopatra

+0

Dzięki. Tak, to prawda. – Sankame

Powiązane problemy