2016-10-19 6 views
0

Когда я хочу использовать свои собственные помощник вида в Twig шаблона при реализации в проекте, основанном на ZF2, мне нужно добавить магический метод __invoke метод в помощнике зрения; в противном случае Twig шаблон двигателя выдает ошибку, которая говорит о невозможности вызова __invoke метод помощника вида.Почему Twig требует метода __invoke при использовании специального помощника вида?

Теперь я хочу знать, почему мне нужно объявить это __invoke волшебная функция в помощниках вида?

ответ

1

Проверьте документы: https://framework.zend.com/manual/2.1/en/modules/zend.view.helpers.advanced-usage.html

Если вы хотите, чтобы ваш помощник, чтобы иметь возможность быть вызван, как если бы это был вызов метода в PhpRenderer, вы также должны реализовать метод __invoke() внутри вашего помощника.

То же самое следует применять с веточкой визуализатором, он пытается выполнить вспомогательный класс (с использованием вызова в качестве ярлыка)

Вы можете увидеть, где PHPRenderer использует __invoke() в качестве прокси/ярлык помощников :

https://github.com/zendframework/zend-view/blob/master/src/Renderer/PhpRenderer.php#L389

/** 
* Overloading: proxy to helpers 
* 
* Proxies to the attached plugin manager to retrieve, return, and potentially 
* execute helpers. 
* 
* * If the helper does not define __invoke, it will be returned 
* * If the helper does define __invoke, it will be called as a functor 
* 
* @param string $method 
* @param array $argv 
* @return mixed 
*/ 
public function __call($method, $argv) 
{ 
    $plugin = $this->plugin($method); 
    if (is_callable($plugin)) { 
     return call_user_func_array($plugin, $argv); 
    } 
    return $plugin; 
} 

Я полагаю, визуализатор Twig просто делает что-то подобное, Infact мы можем видеть ниже это:

https://github.com/ZF-Commons/ZfcTwig/blob/master/src/ZfcTwig/View/TwigRenderer.php#L83

+0

Большое спасибо за ваше хорошее объяснение! –