0

我是 zf2 的新手,我已经很长时间没有使用 twig ...我的问题是 - 如何在 zf2 中使用带有 zfctwig 模块的视图助手?

我的意思是,例如在 kohana 框架中,在视图助手类中编写一个公共方法会自动允许我将此函数的返回值显示为视图变量。视图类和视图 .twig 文件的名称必须匹配。但是当我在这里尝试它时它不起作用(我将视图助手放在了src/modulename/view)。我可以做这样的事情吗,它应该这样工作吗?

另外,视图助手类应该是什么样子的?

最后,我应该return new ViewModel()在控制器中使用将变量传递到视图文件吗?

4

1 回答 1

0

我通过将以下代码添加到您的 module.сconfig.php 解决了这个问题。

return array(   
    'view_helpers' => array(
        'factories' => array(
            'langWidget' => function($sm){
                 return new \Application\View\Helper\LanguagesWidget($sm);
            }
        ),
    ),
);

你可以在你的模板中使用它

<div>{{ langWidget() }}</div>

这是我的视图助手的例子

namespace Application\View\Helper;

use Zend\View\Helper\AbstractHelper;
use Zend\Di\ServiceLocatorInterface;
use Application\Util\Util;
use Zend\View\Model\ViewModel;

/**
 * Widget with lang change elements
 *
 * 
 */
class LanguagesWidget extends AbstractHelper
{
    protected 
            /** @var \Zend\ServiceManager\ServiceManager */
            $serviceLocator;

    public function __construct($sm)
    {
        $this->serviceLocator = $sm->getServiceLocator();
        $this->viewManager = $this->serviceLocator->get('ViewManager'); 
    }

    public function __invoke() 
    {   
        $config = $this->serviceLocator->get('Config');
        $appLangs   = Util::getSafeArrayItemValue($config, 'languages', array());

        $widget = new ViewModel(array(
                'langs' => $appLangs
            )
        );
        $widget->setTemplate('widget/langs');

        return $this->viewManager->getRenderer()->render($widget);
    }
}
于 2014-04-18T14:52:08.333 回答