2016-10-19 5 views
0

Als ich in der Umsetzung ZF2 basierte Projekt möchte meine benutzerdefinierte Ansicht Helfer im Zweig Vorlage verwenden, während, ich brauche die magische Methode __invoke Methode im View Helfer hinzuzufügen; andernfalls, Zweig Vorlage Motor einen Fehler werfen, der über die __invoke Methode des View-Helfers nicht aufrufen kann.Warum benötigt Twig die __invoke-Methode, wenn die benutzerdefinierte Ansicht verwendet wird?

Jetzt möchte ich wissen, warum ich diese __invoke magische Funktion in den View-Helfern erklären muss?

Antwort

1

Überprüfen Sie die docs: https://framework.zend.com/manual/2.1/en/modules/zend.view.helpers.advanced-usage.html

Wenn Sie Ihren Helfer wollen der Lage sein, wie geltend gemacht wird, wenn es einen Methodenaufruf des PhpRenderer waren, sollten Sie auch eine __invoke() -Methode in Ihrem Helfer implementieren.

Das gleiche mit dem Zweig Renderer anwenden müssen, wird es versuchen, die Hilfsklasse (unter Verwendung aufrufen als Verknüpfung) können

Sie sehen auszuführen, wo die PHPRenderer __invoke verwendet() als Proxy/Verknüpfung zu den Helfern :

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; 
} 

stelle ich mir die Zweig-Renderer etwas ähnliches gerade tut, infact können wir darunter sehen ist:

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

+0

Vielen Dank für Ihre gute Erklärung! –

Verwandte Themen