Глобальная вспомогательная функция, способная обращаться к объектам Zend - PullRequest
1 голос
/ 20 марта 2012

В настоящее время я использую помощник вида, чтобы помочь моему процессу отладки. В основном я вызываю эту функцию, и она проверяет, если 1: я вошел в систему как разработчик, проверив переменную Zend_Session_Namespace и 2: если приложение запущено в debug_mode с использованием Zend_Registry. Если они оба истинны, я показываю несколько различных отладочных переменных и любые параметры, которые я даю помощнику в качестве входных данных.

Первоначально эта функция предназначалась только для проверки того, что я получил правильную информацию в объектах, назначенных для представления, но я быстро обнаружил, что она была полезна и в других местах. На данный момент функция работает в контроллерах, использующих $ this-> view, и я думаю, что я мог бы технически использовать что-то вместе с новым Zend_View (); или Zend_Controller_Action_HelperBroker :: getStaticHelper ('viewRenderer'); чтобы получить объект просмотра в моих моделях, но это просто уродливо, даже если это только для отладки.

Итак, мой вопрос: как я могу перестроить этот помощник в глобальную функцию (которую можно использовать в моделях, представлениях и контроллерах) и по-прежнему иметь возможность использовать объекты Zend_Session_Namespace и Zend_Registry, при этом (насколько это возможно) поддерживая структуру MVC .

1 Ответ

3 голосов
/ 21 марта 2012

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

Рассмотрим следующий простой класс с одной статической функцией:

<?php

class My_DebugHelper
{
    public static function dump()
    {
        $ns = new Zend_Session_Namespace('the_namespace');  // the namespace you refer to with the developer flag
        $debug_mode = Zend_Registry::get('debug_mode');

        if (!isset($ns->isDeveloper) || !$ns->isDeveloper || !$debug_mode) {
            return;
        }

        foreach(func_get_args() as $arg) {
            Zend_Debug::dump($arg);
        }
    }

    protected function __construct() {} 
    protected function __clone() {}
}

Этот код дает вам:

  • Возможность звонить из любого места в вашем приложении (модель, контроллер, помощник, просмотр и т. Д.)
  • Все средства защиты, предотвращающие его выполнение при вызове вне контекста
  • Простая база, на которую вы можете расширить

В зависимости от ваших потребностей, по крайней мере, одна вещь, которую вы можете сделать, это сделать ее статической, чтобы она могла хранить некоторую информацию вместо того, чтобы обращаться к ней при каждом вызове, или добавлять дополнительные методы или специализированные параметры, чтобы вы могли передавать объект Zend_View к нему, если необходимо, и данные вводятся в представление.

Вы можете вызвать его из любого места в вашем приложении и передать одно или несколько значений в dump:

My_DebugHelper::dump($someVar, $this->view, $model->getCustId());

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

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