代码之家  ›  专栏  ›  技术社区  ›  chelmertz user1604064

将过滤器插入Zend_视图

  •  0
  • chelmertz user1604064  · 技术社区  · 14 年前

    我想在 MyFilter 使用构造函数注入,但似乎不可能使用 Zend_View::addFilter(string $filter_class_name) 因为它在使用时加载一个新实例。 My滤波器 器具 Zend_Filter_Interface .

    我能注射吗 实例 一个筛选器的实例 Zend_View ?

    关闭,因为它(希望)将被推到2.0,请参见 ticket on JIRA .

    5 回复  |  直到 14 年前
        1
  •  0
  •   takeshin    14 年前

    您可以传递对象:

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

    您可以从viewrenderer获取视图实例,例如使用statichelper。

    编辑:

    另一种方法可能是:

    class MyFilterSetup extends MyFilter implements Zend_Filter_Interface 
    {
         public function __construct($params)
         {
               $this->_params = $params;
               parent::__construct();
         }
    
         public function filter($string)
         {
             // .... $this->_params;
         }
    }
    
        2
  •  0
  •   Gordon Haim Evgi    14 年前

    我不确定,但我认为不可能。查看源代码 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 实例化筛选器实例,它得到了正确运行筛选器所需的内容。

        3
  •  0
  •   chelmertz user1604064    14 年前

    您不能在1.x分支机构,票据存档:

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

        4
  •  0
  •   David Weinraub    14 年前

    我们不能创建一个自定义视图对象扩展吗 Zend_View 它覆盖了 addFilter() 方法接受类或实例。然后重写 _filter() 方法来处理我们存储的两种类型的过滤器(字符串和实例)。

        5
  •  0
  •   Duncan    14 年前

    为什么不将筛选属性分配给视图,然后在设置视图时设置属性,或者直接在筛选函数中访问视图?例如

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

    然后在过滤类中:

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

    这是个蹩脚的工作,但应该能完成。

    推荐文章