Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在产品环境中使用Assetic时的ContextErrorException_Php_Symfony_Assetic - Fatal编程技术网

Php 在产品环境中使用Assetic时的ContextErrorException

Php 在产品环境中使用Assetic时的ContextErrorException,php,symfony,assetic,Php,Symfony,Assetic,我对Symfony 2有问题 我在head部分得到如下CSS: <?php foreach ($view['assetic']->stylesheets( array( '../web/assets/css/bootstrap.min.css', '../web/assets/css/main.css', ),array('cssrewrite') ) as $url): ?> <link rel="styleshe

我对Symfony 2有问题

我在head部分得到如下CSS:

<?php foreach ($view['assetic']->stylesheets(
    array(
        '../web/assets/css/bootstrap.min.css',
        '../web/assets/css/main.css',
    ),array('cssrewrite')
) as $url): ?>
    <link rel="stylesheet" href="<?php echo $view->escape($url) ?>" />
<?php endforeach ?>


您是否尝试更改资产路径。您需要像
bundles/AppBundle/…
这样的写入路径。我在Symfony 2.7上遇到了相同的问题,因此我假设这就是您正在使用的版本

问题是Assetic捆绑包创建了一个帮助器来服务资产。此帮助程序在其构造函数中需要一个
Symfony\Component\Templating\helper\CoreAssetsHelper
实例:

到目前为止,它工作得很好,因为这是为注入构造函数的服务注册的类。然而,在Symfony 2.7中,该服务被重构。决议案文如下:

templating.helper.assets已重构,现在返回的对象类型为Symfony\Bundle\FrameworkBundle\templating\helper\AssetHelper,而不是Symfony\Component\templating\helper\CoreAssetHelper。您可以更新类定义或改用assets.packages服务。建议使用assets.packages服务。将在Symfony 3.0中删除templating.helper.assets服务

虽然新类提供了与弃用类相同的方法,但是
staticAssetHelper
类的构造函数具有弃用类的类型提示。这将导致您看到的错误消息

这是Symfony 2.7的向后兼容性中断,我与Symfony团队合作过。然而,与此同时,这已在AssetBundle中修复,将其升级到最新版本应该可以解决问题

变通办法 如果出于某种原因,您可以不升级AssetBundle,下面是如何临时修复它

如上所述,问题在于
staticAssetHelper
构造函数上的类型提示。因此,我们将改变这一点,以使用新的类型,我们很好去

vendor
目录中找到文件
symfony/assetic bundle/Templating/StaticAsseticHelper.php

将第17行从

use Symfony\Component\Templating\Helper\CoreAssetsHelper;

将第33行从

public function __construct(CoreAssetsHelper $assetsHelper, AssetFactory $factory)


现在这个问题已经解决了。但是,下次您通过composer更新Assetic捆绑包时,此修复程序将被覆盖。

您是否执行了
app/console cache:clear--env=prod
?是的,我尝试过,但同样的问题发生了。
public function __construct(CoreAssetsHelper $assetsHelper, AssetFactory $factory)
public function __construct(AssetsHelper $assetsHelper, AssetFactory $factory)