答案 0 :(得分:1)
您可以执行此操作,但需要将“Head Script”视图助手注入控制器:
// controller factory
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
// get service manager
$serviceLocator = $container->getServiceLocator();
// get view helper manager
$viewHelperManager = $sm->get('ViewHelperManager');
// get 'head script' plugin
$headScript = $viewHelperManager->get('headScript');
return new SomeController($headScript);
}
然后在控制器中:
public function __construct($headScript)
{
$this->headScript = $headScript;
}
public function someAction()
{
// append file, etc.
$this->headScript->appendFile('some-js');
//...
}
但是这个插件作为视图助手提供的事实表明他们期望你在视图中执行此操作,而不是在控制器中执行此操作。在这种情况下,它更简单:
// in views/some/view.phtml
// no injection needed
$this->headScript()->appendFile('some-js');
如果可能的话,重构代码会更加清晰,这样就可以注入需要测试的任何变量作为将js添加到视图模型中的条件。