2013-02-04 16 views
6

Symfony 2 ile bir twig tabanlı projem var. Symfony 2 doğası nedeniyle Ad alanları kullanılıyor. Bu yüzden ad alanı dışında global işlevler sağlayamıyorum.Twig_SimpleFilter ile Twig_SimpleFilter ile iç işlevleri kullanamıyorum

<?php 
namespace Web\MailBundle\Twig; 

use Twig_Extension, Twig_SimpleFilter; 

class Twig extends Twig_Extension 
{ 
    public function getName() 
    { 
     return 'twig_extension'; 
    } 

    public function getFilters() { 
     return array(
      'shortKey' => new Twig_SimpleFilter('shortKey', 'myCustomFilterFunction') 
     ); 
    } 

    public function myCustomFilterFunction() { 
     //code here... 
    } 

Sonuç:

Bu

benim Twig Uzatma sınıf olduğunu FatalErrorException: Error: Call to undefined function myCustomFilterFunction()

Neden: Twig Bu işlevi bulmaya çalışıyor ama bir iç Çünkü, sınıf. Bu sefer sınıfın dışına taşınırsam, ad alanlarıyla yüzleşirim. Çünkü o isimdir. Kodları kazıyorum. Twig aynı şeyi yapıyor. Filtreleri ve sınıf dışındaki işlevleri yazarlar. Ama isim alanı yüzünden bunu yapabilirim. Mümkünse, uygun çözümü kullanarak bunu yapmak için uğraştım. Eğer başarısız olursa; i üzerinde nasıl alabilirim

- Ben ... ad olmadan başka php dosyası oluşturma ve projeye bulunur son solüsyonu ile

geldi olacak? Twig Filter kullanımdan kaldırıldı ve SimpleFilter yöntemini kullanmak zorundayız. Ama bunu yapamadım.

cevap

8

Pas bir dizi-bazlı Twig_SimpleFilter kurucusuna ikinci parametre olarak çağrılabilir - durumda da, bu gibi bir dizi kullanımı: filtre kullanıldığı zaman, nesnenin yöntemi kullanır

public function getFilters() { 
    return array(
     'shortKey' => new Twig_SimpleFilter('shortKey', array($this, 'myCustomFilterFunction')) 
    ); 
} 

.

Twig documentation'daki örneklere bakın.

+1

Dökümantasyondaki "Aşırı yükleme" bölümünü nasıl kaçırdım :(. Beni uyandırdığın için teşekkürler! – xangr