zend framework 3 从控制器追加脚本
zend framework 3 append script from controller
是否仍然可以根据上下文动态附加 script/files?
我看到 here 在 ZF1 中可以,但在 ZF3 中行不通。
有什么想法吗?
您可以这样做,但您需要将 '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 添加到视图模型的条件。
是否仍然可以根据上下文动态附加 script/files?
我看到 here 在 ZF1 中可以,但在 ZF3 中行不通。
有什么想法吗?
您可以这样做,但您需要将 '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 添加到视图模型的条件。