我有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文件,但HTML呈现在打印 <link>
标记之前失败并出现异常 .
在我的日志中,我看到了这一点,但我不明白错误 .
[Sun Jul 19 21:21:55.615090 2015] [:error] [pid] [client X:61902] PHP致命错误:未捕获异常'Symfony \ Component \ Debug \ Exception \ ContextErrorException',消息'Catchable Fatal Error:Argument 1传递给Symfony \ Bundle \ AsseticBundle \ Templating \ StaticAsseticHelper :: __ construct()必须是Symfony \ Component \ Templating \ Helper \ CoreAssetsHelper的实例,Symfony \ Bundle \ FrameworkBundle \ Templating \ Helper \ AssetsHelper的实例,在/中调用home / web / public_html / web / app / cache / prod / appProdProjectContainer.php 296行并定义'in /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-> handleError(4096,'Argument 1 pass . ..','/ home / web / ....',33,数组)\ n#1 /home/web/public_html/web/app/cache/prod/appProdProjectContainer.php(296):Symfony \ Bundle \ AsseticBundle \模板\为static cAsseticHelper - > __ construct(对象(Symfony \ Bundle \ FrameworkBundle \ Templating \ in /home/web/public_html/web/vendor/twig/twig/lib/Twig/Parser.php,370行
我已经尝试清除缓存,但这并没有改变任何东西 .
2 回答
我在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阅读:
虽然新类提供的方法与不推荐使用的方法相同,但
StaticAsseticHelper
类的构造函数对已弃用的类具有类型提示 . 这会导致您看到错误消息 .恕我直言,这是Symfony 2.7的向后兼容性突破,我和Symfony团队有filed a bug report . 但是,与此同时,这已在AsseticBundle中修复,并将其升级到最新版本应该可以解决问题 .
解决方法
如果由于某种原因,您可以不升级AsseticBundle,以下是暂时修复它的方法 .
如上所述,问题在于
StaticAsseticHelper
构造函数上的类型提示 . 所以我们将改变它以使用新类型,我们很高兴 .在
vendor
目录中找到文件symfony/assetic-bundle/Templating/StaticAsseticHelper.php
.改变第17行
至
并改变第33行
至
问题现在将得到解决 . 但是,下次通过composer更新Assetic包时,将修改此修复程序 .
您是否尝试更改资产路径? Read this documentation for details . 你需要像
bundles/AppBundle/...
这样的写路径 .