Внедрить фильтр в Zend_View - PullRequest
0 голосов
/ 19 апреля 2010

Я хочу установить некоторые свойства в MyFilter с помощью инжектора конструктора, но это невозможно с Zend_View::addFilter(string $filter_class_name), так как он загружает новый экземпляр при использовании. MyFilter реализует Zend_Filter_Interface.

Могу ли я как-то внедрить экземпляр фильтра в экземпляр Zend_View?

Закрытие, поскольку оно (надеюсь) будет перенесено в 2.0, см. тикет на JIRA .

Ответы [ 5 ]

0 голосов
/ 30 октября 2010

Почему бы не назначить свойства фильтра для представления, а затем либо задать свойства, когда оно установлено, либо обратиться к представлению непосредственно в функции фильтрации? например,

$view->assign('MyFilterProperty', 'fubar');

и затем в вашем классе фильтров:

public function setView($aView)
{
    $this->_property = $aView->MyFilterPropery;
}

Это глупо, но это должно сделать работу.

0 голосов
/ 06 октября 2010

Не можем ли мы создать пользовательский объект представления, расширяющий Zend_View, который переопределяет метод addFilter() для принятия класса или экземпляра. Затем переопределите метод _filter() для работы с обоими типами фильтров - строковыми и экземплярами - которые мы сохранили.

0 голосов
/ 20 апреля 2010

Я не уверен, но я не думаю, что это возможно. Глядя на исходный код setFilter() и addFilter(), можно принять только имя класса фильтра в виде строки. Вы не можете устанавливать какие-либо параметры, как, например, в Zend_Form. Что вы можете сделать, это:

class MyFilter implements Zend_Filter_Interface 
{
     protected static $_config;
     public static setConfig(array $options)
     {
         self::_config = $options;
     }
     // ... do something with the options
}

и затем вы устанавливаете параметры там, где это необходимо, с помощью MyFilter::setOptions(), поэтому, когда Zend_View создает экземпляр экземпляра Filter, он получает то, что ему нужно для правильного запуска фильтра.

0 голосов
/ 06 октября 2010

Вы не можете в ветке 1.x, заявка подана:

http://framework.zend.com/issues/browse/ZF-9718

0 голосов
/ 19 апреля 2010

Вы можете передать объект:

$filter = new Your_Filter($params); // implements Zend_Filter_Interface
$view->addFilter($filter);

Вы можете получить экземпляр вида из viewRenderer, например, используя staticHelper.

Edit:

Другой метод может быть:

class MyFilterSetup extends MyFilter implements Zend_Filter_Interface 
{
     public function __construct($params)
     {
           $this->_params = $params;
           parent::__construct();
     }

     public function filter($string)
     {
         // .... $this->_params;
     }
}
...