我似乎记得在Zend Framework中,我们可以在页面的操作中通过headScript添加样式/脚本。在Zend2中,这似乎不是一种选择。
我在文档中没有看到有关处理此问题的内容。 基本上我的问题是;在视图中添加这些样式/脚本是否合适?或者有没有新的方法在控制器动作中添加它们?
由于
答案 0 :(得分:9)
在您的控制器操作中:
$this
->getServiceLocator()
->get('viewhelpermanager')
->get('HeadScript')
->appendFile('/js/custom.js')
;
您可以通过创建“可调用的”“服务定位器感知”控制器插件来简化这一过程。
您可以在模块配置文件中执行此操作:
...
'controller_plugins' => array(
'invokables' => array(
'Head' => 'Application\Controller\Plugin\Head',
)
),
...
在module/Application/src/Application/Controller/Plugin/Head.php
中创建实现ServiceLocatorAwareInterface
的“Head”类,并构建一些方法,例如javaScript()
或styleSheet
,例如只需抓取视图助手并返回它:
return $this
->getServiceLocator()
->getServiceLocator() // Main service Locator
->get('viewhelpermanager')
->get('HeadScript')
;
然后在你的控制器中它更像是:
$this->Head()->javaScript()->appendFile('/js/custom.js');
尽管如此,你可能会喜欢它。也许甚至Magento风格的XML控制着每个动作的布局。
<强>更新强>
如果您使用的是ZF2 MVC,则会缓冲输出。所以我发现向页面添加脚本和样式表最好从附加到视图模型的模板文件中完成:
$this->headScript()->appendFile('/js/custom.js', 'text/javascript');
$this->headLink()->appendStylesheet('/css/custom.css');
将其保留在控制器之外,因为它与视图相关。
答案 1 :(得分:0)
我不明白Marshall House的讲话。
插件需要实现PluginInterface。为什么要实现ServiceLocatorAwareInterface?
哪里粘贴这段代码?
return $this
->getServiceLocator()
->getServiceLocator() // Main service Locator
->get('viewhelpermanager')
->get('HeadScript');
AbstractPlugin(如果从它扩展)也没有getServiceLocator()方法。什么意思? 主要服务定位器?请写一些例子。