我遇到Symfony 2的问题。
我在头部获得了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 ?>
在开发环境中,一切正常。在prod环境中,生成CSS文件,但在打印<link>
标记之前,HTML呈现失败并出现异常。
在我的日志中,我看到了这一点,但我不理解错误。
[Sun Jul 19 21:21:55.615090 2015] [:error] [pid] [client X:61902] PHP致命错误:未捕获异常&#39; Symfony \ Component \ Debug \ Exception \ ContextErrorException&#39;消息&#39; Catchable Fatal Error:传递给Symfony \ Bundle \ AsseticBundle \ Templating \ StaticAsseticHelper :: __ construct()的参数1必须是Symfony \ Component \ Templating \ Helper \ CoreAssetsHelper的实例,Symfony \ Bundle \ FrameworkBundle的实例给出了Templating \ Helper \ AssetsHelper,在第296行的/home/web/public_html/web/app/cache/prod/appProdProjectContainer.php中调用并定义了&#39;在/home/web/public_html/web/vendor/symfony/assetic-bundle/Templating/StaticAsseticHelper.php:33 \ nStack trace:\ n#0 / home / web / public_html / web / vendor / symfony / assetic-bundle / Templating / StaticAsseticHelper.php(33):Symfony \ Component \ Debug \ ErrorHandler-&gt; handleError(4096,&#39; Argument 1 pass ...&#39;,&#39; / home / web / ... 。&#39;,33,数组)\ n#1 /home/web/public_html/web/app/cache/prod/appProdProjectContainer.php(296):Symfony \ Bundle \ AsseticBundle \ Templating \ StaticAsseticHelper-&gt; __ construct(对象(第370行的Symfony \ Bundle \ FrameworkBundle \ Templating \ in /home/web/public_html/web/vendor/twig/twig/lib/Twig/Parser.php
我已尝试清除缓存,但这并没有改变任何内容。
答案 0 :(得分:1)
我在Symfony 2.7上遇到了同样的问题,所以我认为这是你正在使用的版本。
问题是Assetic捆绑包创建了一个帮助者来提供资产。此帮助程序在其构造函数中需要Symfony\Component\Templating\Helper\CoreAssetsHelper
实例:https://github.com/symfony/AsseticBundle/blob/master/Templating/StaticAsseticHelper.php#L33
到目前为止,这工作正常,因为这是注册到构造函数中的服务的类。但是,使用Symfony 2.7,这项服务被重构了。 upgrade notes for 2.7读到:
templating.helper.assets已重构,现在返回Symfony \ Bundle \ FrameworkBundle \ Templating \ Helper \ AssetsHelper类型的对象,而不是Symfony \ Component \ Templating \ Helper \ CoreAssetsHelper。您可以更新类定义或使用assets.packages服务。建议使用assets.packages服务。 templation.helper.assets服务将在Symfony 3.0中删除。
虽然新类提供的方法与不推荐使用的方法相同,但StaticAsseticHelper
类的构造函数对已弃用的类具有类型提示。这会导致您看到错误消息。
恕我直言,这是Symfony 2.7的向后兼容性中断,我与Symfony团队有filed a bug report。然而,与此同时,这已在AsseticBundle中修复,并将其升级到最新版本应该可以解决问题。
如果由于某种原因,您可以不升级AsseticBundle,以下是暂时修复它的方法。
如上所述,问题在于StaticAsseticHelper
构造函数上的类型提示。所以我们将改变它以使用新类型,我们很高兴。
在symfony/assetic-bundle/Templating/StaticAsseticHelper.php
目录中找到文件vendor
。
从
更改第17行use Symfony\Component\Templating\Helper\CoreAssetsHelper;
到
use Symfony\Bundle\FrameworkBundle\Templating\Helper\AssetsHelper;
并从
更改第33行public function __construct(CoreAssetsHelper $assetsHelper, AssetFactory $factory)
到
public function __construct(AssetsHelper $assetsHelper, AssetFactory $factory)
现在问题将得到解决。但是,下次通过composer更新Assetic包时,此修复程序将被覆盖。
答案 1 :(得分:0)
您是否尝试更改资产路径? Read this documentation for details。您需要像bundles/AppBundle/...
这样的写路径。