Zend Framework - как отключить один или несколько модулей - PullRequest
1 голос
/ 17 декабря 2009

сейчас я работаю над каким-то проектом (на основе ZF), и мне интересно, можно ли отключить один или несколько модулей. Под выключением я подразумеваю, что ZF вообще не загружает его.

Если быть более точным, я хотел бы отключить один из модулей приложения, выходящего из приложения.
Допустим, мое приложение содержит несколько модулей, написанных кем-то еще, и я пока что Я не хочу использовать это. Я надеюсь, что этот вопрос имеет смысл для вас.

-
С наилучшими пожеланиями,
Роберт

Ответы [ 2 ]

3 голосов
/ 18 декабря 2009

Я думаю, что то, что предложил Луис Дамим, излишне и неправильно. Плагин будет вызываться за каждый ненужный звонок. Зачем делать вещи для отключенных модулей?

Я бы сделал обнаружение на основе файла конфигурации, где создаются только активные модули.

UPDATE Обычно модули создаются массово:

$front->addModuleDirectory('/path/to/application/modules');

Но вы можете активировать модули один за другим или передать массив ТОЛЬКО из тех, которые вы хотите активировать.

$front->setControllerDirectory(array(
    'default' => '/path/to/application/controllers',
    'blog'    => '/path/to/application/blog/controllers'
));

Если вы используете Zend_application, я думаю, что вы должны изменить эту строку в вашей конфигурации:

resources.modules[] =

с

resources.modules = admin
resources.modules = news

Первый загружает все, что модули могут найти в папке модулей, что является поведением по умолчанию. Я еще не работал с Zend Application, поэтому я не уверен в этом, но должно быть что-то вроде этого.

3 голосов
/ 18 декабря 2009

Если я правильно понял, и вы хотите отключить модуль (группу представлений / контроллеров) со своего сайта, вы можете зарегистрировать плагин routeShutdown() FrontController, который проверяет перенаправленный запрос. Если он отключен, вы перенаправляете пользователя на контроллер ошибок.

Создать плагин, который проверяет, отключен ли запрошенный модуль

class MyDisabledModules extends Zend_Controller_Plugin_Abstract
{
    protected $_disabled = array(
        'module1',
        'module2',
        'sales',
    );


    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        $module = $request->getModuleName();

        if (in_array($module, $this->_disabled)) {
            $request->setModuleName('default')
                    ->setControllerName('disabled')
                    ->setActionName('index')
                    ->dispatched(false);
        }
    }
}

и затем зарегистрируйте его в FrontController:

Zend_Controller_Front::getInstance()
    ->registerPlugin(new MyDisabledModules());

Вы можете жестко закодировать отключенные плагины, вы можете получить их из базы данных, XML, из всего, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...