2012-11-01 15 views
7

Trong nỗ lực giữ mã của tôi DRY Tôi muốn có thể xác định các biến "bộ điều khiển chéo".Biến điều khiển chéo trong Phalcon

Ví dụ điển hình là tôi muốn truy cập vào một số mục cấu hình được tải trong bootstap của tôi.

Phương pháp thực hành tốt nhất để đạt được điều này là gì?

Tim

Trả lời

7

Bạn luôn có thể sử dụng vùng chứa Di.

Khi bạn đăng ký một thành phần trong Di nó có sẵn trong bộ điều khiển bằng phương pháp ma thuật. Ví dụ:

// 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); 

và trong điều khiển của bạn nó cũng đơn giản như:

$config = $this->config; 

Nếu bạn tạo một lớp điều khiển cơ bản, bạn có thể vượt qua các đối tượng trong giao diện, nếu cần thiết như vậy:

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

Cuối cùng hộp chứa Di cũng có thể hoạt động như một cơ quan đăng ký, nơi bạn lưu trữ các mục bạn có thể muốn sử dụng trong ứng dụng của mình.

Để biết ví dụ về khởi động và truy cập các đối tượng trong bộ điều khiển, hãy xem kho lưu trữ phalcon/website. Nó thực hiện các mẫu bootstrapping và bộ điều khiển cơ sở trong số những thứ khác.

+2

Cảm ơn vì điều này! Hoạt động thực sự tốt – Tim

+1

Tôi biết tôi là một chút muộn, nhưng tại sao trong kịch bản này bạn sẽ sử dụng $ di-> set() trên $ di-> setShared()? – Mechzeit

+0

@Spinkzeit 'setShared' có thể là sử dụng tốt hơn ở đây - bạn đúng - vì' $ config' thực sự được sử dụng trong suốt ứng dụng và cần phải là một đối tượng được chia sẻ. Tôi đã thay đổi câu trả lời của tôi cho phù hợp, cảm ơn! –

2

Sau đây là thiết lập của tôi.

[PHP]  5.4.1 
[phalcon] 1.2.1 

Dưới đây là một đoạn trích từ bootstrap của tôi. (/ App-root/công cộng/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(); 

Và đây là một đoạn trích từ bộ điều khiển cơ sở của tôi. (/ 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

ngữ cảnh thú vị - và: điều đó giải quyết được câu hỏi :-) – kleopatra

+0

Cảm ơn. Vâng, đúng vậy. – Sankame