2015-08-21 69 views
2

我需要在我的ZF2應用程序中選擇性地包含一些模塊。這些模塊完全獨立於任何加載的模塊。application.config.php中的可選ZF2模塊。有沒有更好的辦法?

application.config.php中,在配置數組中,我可以只包含主模塊,然後在最後根據一些條件添加可選模塊。像這樣:

$config = array(
    'modules' => array(
     'Application', 
    ), 
    ... 
); 

if (condition) { 
    $config['modules'][] = 'OptionalModule'; 
} 

return $config; 

雖然這可以解決問題,但我想知道是否有另一種方法來做到這一點。

這是一個很好的方法嗎?會有更好的方法來完成這個嗎?

謝謝!

有條件的加載模塊與本地應用程序配置

application.config.php:

<?php 
use Zend\Stdlib\ArrayUtils; 

$config = [ 
    // You config 
]; 

$local = __DIR__ . '/application.config.local.php'; 
if (is_readable($local)) { 
    $config = ArrayUtils::merge($config, require($local)); 
} 

return $config; 

application.config.local

+0

任何理由不只是包括它不管?你是否依賴它的包含,或者在應用邏輯中重用這個'condition'來決定它是否被後面的使用? – ficuscr

+0

有一個主要的應用程序(與預定義的模塊),並有一個附加應用程序。該條件實際上會檢查文件系統上是否有其他文件,如果是,它也包含該模塊。關鍵是整個設置應該可以在沒有插件的情況下工作 – Mihai

+0

對於你來說沒有一個好的答案,但是如果我的理解正確,我會建議不要在每個請求上檢查磁盤來做出決定,這可以是昂貴。 – ficuscr

回答

1

我通常通過使用任何的以下兩種方法做到這一點.php:

<?php 

return [ 
    // Your config 
]; 

這使您可以擁有基礎應用程序配置和加載每個部署的額外配置。所以沒有if $condition,這是由您的部署過程決定的,這個過程最容易管理。

注意這也適用於部署配置:application.config.development.php vs application.config.production.php。這只是你喜歡的,以滿足你的需求。

模塊配置有條件地執行代碼

在你Module.php

<?php 

namespace MyModule; 

use Zend\Mvc\MvcEvent; 

class Module 
{ 
    public function onBootstrap(MvcEvent $e) 
    { 
     $app = $e->getApplication(); 
     $sm = $app->getServiceManager(); 

     $config = $sm->get('Config'); 
     if ($config['mymodule']['enabled'] === true) { 
      // condition 
     } 
    } 
} 

然後你可以有你的module.config.php在自己的模塊文件夾:

<?php 

return [ 
    'mymodule' => [ 
     'enabled' => true, 
    ], 
]; 

但如果您需要在特定環境中禁用此功能,請將其添加到您的config/autoload/local.php

<?php 

return [ 
    'mymodule' => [ 
     'enabled' => false, 
    ], 
]; 
相關問題