Php 在产品环境中使用Assetic时的ContextErrorException
我对Symfony 2有问题 我在head部分得到如下CSS: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
<?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)