2012-03-03 29 views
13

Bazı şeyler yapmak için bir dal uzantısı oluşturdum ve bunlardan biri bir şablon oluşturuyor. Twig'nin içinden nasıl erişebilirim motor ortamını genişletir ve Render yöntemini çağırır? o çevreyi ihtiyacı böylece uzantıyı tanımlayabilirsiniz bir dal uzantısınaTwig uzantısından şablon oluştur

private $environment; 

public function initRuntime(\Twig_Environment $environment) 
{ 
    $this->environment = $environment; 
} 

cevap

35

dal çevre örneğini geçebilir bu işlevi kullanıcı kullanma

+4

\ Twig_Function_Method kullanımdan kaldırıldı, \ Twig_SimpleFunction kullanın – spectralsun

19

. Twig bunu otomatik olarak işleve iletecektir.

public function getFunctions() 
{ 
    return array(
     new \Twig_SimpleFunction(
      'myfunction', 
      array($this, 'myFunction'), 
      array('needs_environment' => true) 
     ), 
    ); 
} 

public function myFunction(\Twig_Environment $environment, string $someParam) 
{ 
    // ... 
} 
+4

ile çalışmak {{ myMenu() }} ekledik TWIG şablonunda

app.twig.menu_extension: class: AppBundle\Twig\MenuExtension public: false tags: - { name: twig.extension } 

:

Ben de symfony hizmet olarak sınıf kayıtlı ettik this-> environment-> render() – ojreadmore

+4

initRuntime şimdi kullanımdan kaldırıldı. @ Tvlooy tarafından need_environment doğru cevaptır. – MECU

5

@tvlooy cevap bana bir ipucu ver ama benim için çalışmadı. Ne bunu başarmak için gerekli olan:

namespace AppBundle\Twig; 


class MenuExtension extends \Twig_Extension 
{ 
    public function getName() 
    { 
     return 'menu_extension'; 
    } 

    public function getFunctions() 
    { 
     return [ 
      new \Twig_SimpleFunction('myMenu', [$this, 'myMenu'], [ 
       'needs_environment' => true, 
       'is_safe' => ['html'] 
      ]) 
     ]; 
    } 

    public function myMenu(\Twig_Environment $environment) 
    { 
      return $environment->render('AppBundle:Menu:main-menu.html.twig'); 
    } 
} 

Ben addtionaly HTML autoescaping önlemek için 'is_safe' => ['html'] eklemek gerekiyordu. Ben

ben Sonra $ yapmak "twig/twig": "~1.10" ve Symfony'nin 3.1.3 sürümü

+0

'needs_environment' => true gerçek anlaşma burada. +1 –