Zend_View içine filtre enjekte

5 Cevap php

Ben yapıcı enjeksiyonu ile MyFilter bazı özellikleri ayarlamak istiyor, ancak kullanımı üzerine yeni bir örneğini yükler beri Zend_View::addFilter(string $filter_class_name) ile imkansız görünüyor. MyFilter uygular Zend_Filter_Interface.

Ben bir şekilde an instance bir örneğine bir filtrenin enjekte edebilir Zend_View?

(Umarım) ticket on JIRA, bkz 2,0 içine girecek bu yana Kapanış.

5 Cevap

Sen 1.x dalında, bilet yayımlandı edemez:

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

Sen nesnesi geçebilir:

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

Sen viewRenderer view from örneğini alabilirsiniz, örneğin staticHelper kullanılmıştır.

Edit:

Diğer bir yöntem olabilir:

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

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

Emin değilim, ama bunun mümkün olduğunu sanmıyorum. Sourcecode baktığımızda setFilter() ve addFilter() sadece bir dize olarak filtre Sınıfadı kabul. Sen, herhangi bir seçeneği ayarlamak Eğer örneğin Zend_Form olabilir gibi olamaz. Neler yapabileceğini olsa:

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

ve sonra MyFilter::setOptions() ile gerekli seçenekleri ayarlayın, böylece Zend_View Filtre örneğini oluşturur, onu düzgün filtreyi çalıştırmak için gereken ne var.

Biz uzanan bir özel görünüm nesnesi oluşturamazsınız Zend_View Bu bir sınıf veya bir örneği ya da kabul etmek addFilter() yöntemini geçersiz kılar. Dize ve örneği - - Depolanan o zaman filtreleri iki tip ile başa çıkmak için _filter() yöntemini geçersiz kılar.

Neden görünümüne filtre özelliklerini atamak değil, ve görünüm ayarlandığında sonra da özelliklerini ayarlamak, ya da filtreleme fonksiyonu doğrudan görünümüne erişmek? örneğin

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

ve sonra filtre sınıfında:

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

Bu kludgy, ama işi almalısınız.