OxCom / zf3-twig

ZendTwig is a module that integrates the Twig template engine with Laminas.
MIT License
19 stars 6 forks source link

Access view helpers #7

Closed SidiaDevelopment closed 7 years ago

SidiaDevelopment commented 7 years ago

Hello,

I am trying to access view helpers. They are defined like this:

    'view_helpers' => [
        'factories' => [
            View\Helper\Menu::class => View\Helper\Factory\MenuFactory::class,
            View\Helper\Breadcrumbs::class => InvokableFactory::class,
        ],
        'aliases' => [
            'mainMenu' => View\Helper\Menu::class,
            'pageBreadcrumbs' => View\Helper\Breadcrumbs::class,
        ],
    ],

Helper call:

{{ mainMenu().setActiveItemId('permission') }}

This is the skelleton app where i took that from, I converted that phtml file to twig: https://github.com/olegkrivtsov/using-zf3-book-samples/blob/master/roledemo/module/User/view/user/permission/index.phtml

Error:

Twig_Error_Runtime: Impossible to invoke a method ("setActiveItemId") on a null variable. in /home/sidia/shared/Arena/module/User/view/user/permission/index.twig:3 Stack trace: #0 /home/sidia/shared/Arena/data/cache/twig/ef/efd40460f70103b4618fd327bb091ad43518b4be9e54f209dad7909d4f9ffee2.php(24): twig_get_attribute(Object(Twig_Environment), Object(Twig_Source), NULL, 'setActiveItemId', Array, 'method') #1 /home/sidia/shared/Arena/vendor/twig/twig/lib/Twig/Template.php(389): __TwigTemplate_2f9cce762ce8ae9a5d5d1dbef906fd226a1b81292f71d82b398389a696db6e06->doDisplay(Array, Array) #2 /home/sidia/shared/Arena/vendor/twig/twig/lib/Twig/Template.php(366): Twig_Template->displayWithErrorHandling(Array, Array) #3 /home/sidia/shared/Arena/vendor/twig/twig/lib/Twig/Template.php(374): Twig_Template->display(Array) #4 /home/sidia/shared/Arena/vendor/oxcom/zend-twig/src/Renderer/TwigRenderer.php(221): Twig_Template->render(Array) #5 /home/sidia/shared/Arena/vendor/oxcom/zend-twig/src/Renderer/TwigRenderer.php(202): ZendTwig\Renderer\TwigRenderer->render('user/permission...', Array) #6 /home/sidia/shared/Arena/vendor/zendframework/zend-view/src/View.php(207): ZendTwig\Renderer\TwigRenderer->render('layout/layout') #7 /home/sidia/shared/Arena/vendor/zendframework/zend-mvc/src/View/Http/DefaultRenderingStrategy.php(105): Zend\View\View->render(Object(Zend\View\Model\ViewModel)) #8 /home/sidia/shared/Arena/vendor/zendframework/zend-eventmanager/src/EventManager.php(322): Zend\Mvc\View\Http\DefaultRenderingStrategy->render(Object(Zend\Mvc\MvcEvent)) #9 /home/sidia/shared/Arena/vendor/zendframework/zend-eventmanager/src/EventManager.php(171): Zend\EventManager\EventManager->triggerListeners(Object(Zend\Mvc\MvcEvent)) #10 /home/sidia/shared/Arena/vendor/zendframework/zend-mvc/src/Application.php(367): Zend\EventManager\EventManager->triggerEvent(Object(Zend\Mvc\MvcEvent)) #11 /home/sidia/shared/Arena/vendor/zendframework/zend-mvc/src/Application.php(348): Zend\Mvc\Application->completeRequest(Object(Zend\Mvc\MvcEvent)) #12 /home/sidia/shared/Arena/public/index.php(42): Zend\Mvc\Application->run() #13 {main}

OxCom commented 7 years ago

Hello,

In Your error stacktrase I see that You do not have insance of View\Helper\Menu in Twig.

I did a test and small update here 03f84c5 (PHP7) and 9f270a8 (PHP5.6) that will allow You to get view helper as instance if it's not invokable. Also You can try to implement __invoke() method for View\Helper\Menu and this should work:

public function __invoke()
{
    return $this;
}
OxCom commented 7 years ago

New changes are available in release v0.1.6 and v0.0.10