【问题标题】:Symfony - FOSUserBundle Profile view does not work after update to Symfony 2.8Symfony - 更新到 Symfony 2.8 后,FOSUserBundle 配置文件视图不起作用
【发布时间】:2018-02-17 02:40:23
【问题描述】:

我已将 Symfony 项目从 2.6 版升级到 2.8 版,之后,当我请求配置文件视图时收到错误 500。错误是:

Error: Call to a member function has() on null

Stack Trace in vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php at line 350   -
 */
public function getUser()
{
    if (!$this->container->has('security.token_storage')) {
        throw new \LogicException('The SecurityBundle is not registered in your application.');
    }

当我运行 composer show -i 时,我会看到下一个列表:

You are using the deprecated option "installed". Only installed packages are shown by default now. The --all option can be used to show all packages.
doctrine/annotations                 v1.4.0             Docblock Annotations Parser
doctrine/cache                       v1.6.2             Caching library offering a...
doctrine/collections                 v1.4.0             Collections Abstraction li...
doctrine/common                      v2.7.3             Common Library for Doctrin...
doctrine/dbal                        v2.5.13            Database Abstraction Layer
doctrine/doctrine-bundle             1.8.1              Symfony DoctrineBundle
doctrine/doctrine-cache-bundle       1.3.2              Symfony Bundle for Doctrin...
doctrine/inflector                   v1.1.0             Common String Manipulation...
doctrine/instantiator                1.0.5              A small, lightweight utili...
doctrine/lexer                       v1.0.1             Base library for a lexer t...
doctrine/orm                         v2.5.14            Object-Relational-Mapper f...
friendsofsymfony/jsrouting-bundle    1.5.3              A pretty nice way to expos...
friendsofsymfony/oauth-server-bundle 1.5.0              Symfony2 OAuth Server Bundle
friendsofsymfony/oauth2-php          1.2.2              OAuth2 library
friendsofsymfony/user-bundle         dev-master 9b3be01 Symfony FOSUserBundle
incenteev/composer-parameter-handler v2.1.2             Composer script handling y...
ircmaxell/password-compat            v1.0.4             A compatibility library fo...
jdorn/sql-formatter                  v1.2.17            a PHP SQL highlighting lib...
jms/aop-bundle                       1.3.0              Adds AOP capabilities to S...
jms/cg                               1.2.0              Toolset for generating PHP...
jms/di-extra-bundle                  1.9.1              Allows to configure depend...
jms/metadata                         1.6.0              Class/method/property meta...
jms/parser-lib                       1.0.0              A library for easily creat...
jms/security-extra-bundle            dev-master c4a5dda Enhances the Symfony2 Secu...
knplabs/knp-snappy                   v1.0.4             PHP5 library allowing thum...
knplabs/knp-snappy-bundle            v1.5               Easily create PDF and imag...
kriswallsmith/assetic                v1.4.0             Asset Management for PHP
liuggio/ExcelBundle                  v2.1.0             This is a Symfony2 Bundle ...
monolog/monolog                      1.23.0             Sends your logs to files, ...
paragonie/random_compat              v2.0.11            PHP 5.x polyfill for rando...
phpoffice/phpexcel                   1.8.1              PHPExcel - OpenXML - Read,...
phpoption/phpoption                  1.5.0              Option Type for PHP
phpunit/php-code-coverage            1.2.18             Library that provides coll...
phpunit/php-file-iterator            1.4.5              FilterIterator implementat...
phpunit/php-text-template            1.2.1              Simple template engine.
phpunit/php-timer                    1.0.9              Utility class for timing
phpunit/php-token-stream             1.2.2              Wrapper around PHP's token...
phpunit/phpunit                      3.7.38             The PHP Unit Testing frame...
phpunit/phpunit-mock-objects         1.2.3              Mock Object library for PH...
psr/log                              1.0.2              Common interface for loggi...
sensio/distribution-bundle           v2.3.22            The base bundle for the Sy...
sensio/framework-extra-bundle        v3.0.29            This bundle provides a way...
sensio/generator-bundle              v2.5.3             This bundle generates code...
stripe/stripe-php                    v3.23.0            Stripe PHP Library
swiftmailer/swiftmailer              v5.4.9             Swiftmailer, free feature-...
symfony/assetic-bundle               v2.8.2             Integrates Assetic into Sy...
symfony/monolog-bundle               v2.12.1            Symfony MonologBundle
symfony/polyfill-intl-icu            v1.7.0             Symfony polyfill for intl'...
symfony/polyfill-mbstring            v1.7.0             Symfony polyfill for the M...
symfony/polyfill-php54               v1.7.0             Symfony polyfill backporti...
symfony/polyfill-php55               v1.7.0             Symfony polyfill backporti...
symfony/polyfill-php56               v1.7.0             Symfony polyfill backporti...
symfony/polyfill-php70               v1.7.0             Symfony polyfill backporti...
symfony/polyfill-util                v1.7.0             Symfony utilities for port...
symfony/security-acl                 v2.8.0             Symfony Security Component...
symfony/swiftmailer-bundle           v2.6.7             Symfony SwiftmailerBundle
symfony/symfony                      v2.8.0             The Symfony PHP framework
twig/extensions                      v1.5.1             Common additional features...
twig/twig                            v1.35.0            Twig, the flexible, fast, ...
willdurand/jsonp-callback-validator  v1.1.0             JSONP callback validator.

我已经研究了几个小时,但没有找到有关此错误的有用信息。

提前致谢。

【问题讨论】:

  • 您正在使用不再与 2.8 兼容的用户包的 dev-master。您需要使用 2.x 标记版本之一,但我不确定是哪一个。顺便说一下,错误来自容器不再被注入控制器的事实。虽然我不知道它为什么不被注入。
  • 感谢您的评论@Cerad。我将捆绑包降级到 2.0.1 版本,但出现相同的错误。
  • 我怀疑您已经很久没有真正更新依赖关系了?我怀疑您的其他一些捆绑包也需要更新。我只能建议您创建一个新的 2.8 项目,然后要求每个依赖项生成一个新的 composer.json 文件。

标签: symfony fosuserbundle symfony-2.8


【解决方案1】:

问题在于您的控制器。可能它们扩展了自 2.8 版以来已弃用的 Symfony\Component\DependencyInjection\ContainerAware。删除它并使用 Symfony\ Component\DependencyInjection\ ContainerAwareTrait

use Symfony\Component\DependencyInjection\ContainerAwareInterface; 
use Symfony\Component\DependencyInjection\ContainerAwareTrait;

class MyBundleController implements ContainerAwareInterface { 
    use ContainerAwareTrait; 
    /** 
    * @Route("/", name="_index") 
    * @Template() 
    */ 
    public function indexAction() { 
            var_dump($this->container); 
            return array(); 
    }
}

编辑:Cerad 在 cmets 中是对的:

无需重写从 Controller 扩展的现有控制器。问题出在像 FOSUserBundle 这样的第三方捆绑包中,它没有从 Controller 扩展。但是,即使它们在 2.8 下仍然可以工作,或者至少会给出不同的错误。

它应该在任何一种情况下都有效。

参考文献:

【讨论】:

  • 感谢您的回复。当然,我的包没有实现那个接口。我的包看起来像“class MyController extends Controller”,其中使用语句是“use Symfony\Bundle\FrameworkBundle\Controller\Controller;”。我是否必须重写所有控制器才能解决此问题?
  • 尝试重写一个你得到错误的控制器,看看它是否能解决。您可以保留扩展: class MyBundleController extends Controller implements ContainerAwareInterface {
  • @Airam 不,不需要重写从 Controller 扩展的现有控制器。问题出在像 FOSUserBundle 这样的第三方捆绑包中,它没有从 Controller 扩展。但是,即使它们在 2.8 下仍然可以工作,或者至少会给出不同的错误。
  • 2.8 你需要它。 FOS 用户捆绑控制器只是扩展了主要的 symfony 控制器,而不这样做。 Symfony v3 主控制器使用 Trait,所以我猜 FOS 用户包与 symfony v2.8 不兼容。升级到 v3.0 或降级到 v2.7
  • @JannesBotis 实际上,FOSUserBundle 1.x 是从 ContainerAware 扩展而来的。对于 2.x,它们从 Controller 扩展而来。但是,还有许多其他原因导致 1.x 的内容无法在 S2.8 上运行。 1.x 版本也不能在 S3.0 中工作。基本上,该操作面临着将 FOSUserBundle 从 1.x 升级到 2.x 的问题,同时还要处理 S2.8 引入的各种其他 BC 中断。不仅是 FOSUserBundle,还有许多其他第三方捆绑包。这是一团糟。
猜你喜欢
  • 2016-04-16
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
相关资源
最近更新 更多