Symfony — представление профиля FOSUserBundle не работает после обновления до Symfony 2.8

Я обновил свой проект 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.

Я исследовал в течение нескольких часов, и я не нашел полезной информации об этой ошибке.

Заранее спасибо.


person Airam    schedule 17.02.2018    source источник
comment
Вы используете dev-master пользовательского пакета, который больше не совместим с 2.8. Вам нужно использовать одну из версий с тегами 2.x, но я не уверен, какую именно. Ошибка, кстати, возникает из-за того, что контейнер больше не внедряется в контроллер. Хотя точно, почему его не вводят, мне неизвестно.   -  person Cerad    schedule 17.02.2018
comment
Спасибо за ваш комментарий @Cerad. Я понижаю пакет до версии 2.0.1, но появляется та же ошибка.   -  person Airam    schedule 18.02.2018
comment
Я подозреваю, что прошло много времени с тех пор, как вы фактически обновили зависимости? Я подозреваю, что некоторые из ваших других пакетов также потребуют обновления. Все, что я могу предложить, это создать новый проект версии 2.8, а затем потребовать, чтобы каждая из ваших зависимостей создавала новый файл composer.json.   -  person Cerad    schedule 18.02.2018


Ответы (1)


Проблема в ваших контроллерах. Вероятно, они расширяют Symfony\Component\DependencyInjection\ContainerAware, который устарел с версии 2.8. Удалите это и используйте 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 был прав в комментариях:

нет необходимости переписывать существующие контроллеры, которые расширяются от контроллера. Проблема заключается в сторонних пакетах, таких как FOSUserBundle, которые не расширяются от контроллера. Впрочем, даже они все равно должны работать под 2.8 или как минимум выдавать разные ошибки.

Он должен работать в любом случае.

Использованная литература:

person Jannes Botis    schedule 17.02.2018
comment
Спасибо за ответ. Конечно, мои пакеты не реализуют этот интерфейс. Мои пакеты выглядят так, как будто класс MyController расширяет контроллер, где оператор использования использует Symfony\Bundle\FrameworkBundle\Controller\Controller;. Придется ли мне переписывать все мои контроллеры, чтобы решить эту проблему? - person Airam; 18.02.2018
comment
Попробуйте переписать для одного контроллера, в котором вы получили ошибку, чтобы увидеть, разрешится ли она. Вы можете сохранить расширение: class MyBundleController extends Controller реализует ContainerAwareInterface { - person Jannes Botis; 18.02.2018
comment
@Airam Нет, нет необходимости переписывать существующие контроллеры, которые расширяются от контроллера. Проблема заключается в сторонних пакетах, таких как FOSUserBundle, которые не расширяются от контроллера. Впрочем, даже они все равно должны работать под 2.8 или как минимум выдавать разные ошибки. - person Cerad; 18.02.2018
comment
Для 2.8 нужно. Контроллеры пользовательского пакета FOS просто расширяют основной контроллер Symfony, не делая этого. Основной контроллер Symfony v3 использует Trait, поэтому я думаю, что пользовательский пакет FOS несовместим с Symfony v2.8. Либо обновитесь до версии 3.0, либо перейдите на версию 2.7. - person Jannes Botis; 18.02.2018
comment
@JannesBotis На самом деле FOSUserBundle 1.x является продолжением ContainerAware. Для 2.x они расширяются от контроллера. Однако есть много других причин, по которым материал 1.x не будет работать на S2.8. Версия 1.x также не будет работать в S3.0. По сути, оператор сталкивается с проблемой обновления FOSUserBundle с 1.x до 2.x и в то же время имеет дело с различными другими нарушениями BC, представленными S2.8. Не только FOSUserBundle, но и многие другие сторонние пакеты. Это бардак. - person Cerad; 18.02.2018
comment
Наконец, я обновил FOSUserBundle до версии 2.0.2, ограничив другие версии пакетов, которые были с dev@master. После обновления бандлов и очистки кеша мой проект заработал отлично. Спасибо за комментарии. - person Airam; 22.02.2018