我一直在尝试删除E_NOTICE和E_STRICT错误级别以避免此错误:
Runtime Notice: Only variables should be passed by reference
我尝试修改php.ini但没有用,error_reporting总是-1。然后我尝试在当前操作中动态设置它,并且工作正常。然后我也在app_dev.php的第一行尝试了相同的操作并且没有用。这意味着Symfony2正在某处动态设置它。
我该怎么办?
修改
对于那些不熟悉错误的人:
$user = $this->('security.context')->getToken()->getUser();
$first = reset($user->getRoles()); // error
$roles = $user->getRoles();
$first = reset($roles); // works fine
答案 0 :(得分:2)
虽然通知不是“延迟”,但在其他情况下这是一个合理的问题:这是在内核实例中设置的,在app_dev.php(或app.php)中实例化。
构造的第二个参数是布尔调试标志,如果true
则error_reporting
设置为-1而display_errors
设置为1,否则默认值分别为0。
$kernel = new AppKernel('dev', false);
symfony documentation
希望这有帮助。
答案 1 :(得分:2)
我在以下场景中遇到了同样的错误,即
<强>情境:强> 我丢失了现有LIVE项目的开发环境。但我从GIT repo获得了整个代码,然后在我的新开发环境中安装了symfony 2.4.2(与LIVE站点相同的版本)。然后我发现在LIVE站点上工作的Web应用程序页面在我的新DEV环境中被破坏了。
<强>解决方案:强> 我花了很多时间来解释问题的原因然后我发现了,即
当我在开发环境中使用composer.phar安装symfony 2.4.2时,它在我的开发环境中创建了一个新的 web / app_dev.php 文件,它有以下条目将其关闭即
<强>调试::启用()强>
只需评论上述行,然后关闭php通知,然后修复给我通知的所有页面。
我希望这会对像我这样有同样问题的人有所帮助。祝你好运!
干杯。
PS:但我建议你在新的开发项目中启用上面这一行,这样你就可以看到PHP通知,然后在开发过程中删除它们。