zend框架3从控制器附加脚本

时间:2018-03-14 09:36:48

标签: zend-framework3 zend-controller

是否仍然可以根据上下文动态附加脚本/文件?

我在ZF1中看到here它是可能的,但在ZF3中不起作用。

任何想法?

1 个答案:

答案 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添加到视图模型中的条件。