Ошибка после обновления композитора

Недавно я сделал обновление композитора в своем приложении Symfony (2.7). Поскольку я сделал это обновление, swiftmailer перешел с 2.4 на 2.5, и после команды консоль вывела мне эту ошибку: [RuntimeException]

Произошла ошибка при выполнении команды «cache:clear --no-warmup»:

[Symfony\Component\DependencyInjection\Exception\InvalidArgumentException]

Unable to replace alias "swiftmailer.mailer.default.transport.real" with actual definition "mail".

[Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException]

You have requested a non-existent service "mail".

Я попытался удалить каталог swiftmailer в «поставщике», но это не сработало. Вот мой composer.json:

{
"name": "symfony/framework-standard-edition",
"license": "MIT",
"type": "project",
"description": "The \"Symfony Standard Edition\" distribution",
"autoload": {
    "psr-4": { "": "src/" }
},
"require": {
    "php": ">=5.3.9",
    "symfony/symfony": "2.7.*",
    "doctrine/orm": "^2.4.8",
    "doctrine/doctrine-bundle": "~1.4",
    "symfony/assetic-bundle": "~2.3",
    "symfony/swiftmailer-bundle": "~2.3",
    "symfony/monolog-bundle": "~2.4",
    "sensio/distribution-bundle": "~4.0",
    "sensio/framework-extra-bundle": "^3.0.2",
    "incenteev/composer-parameter-handler": "~2.0",
    "friendsofsymfony/user-bundle": "dev-master"
},
"require-dev": {
    "sensio/generator-bundle": "~2.3",
    "symfony/phpunit-bridge": "~2.7"
},
"scripts": {
    "symfony-scripts": [
        "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
    ],
    "post-install-cmd": [
        "@symfony-scripts"
    ],
    "post-update-cmd": [
        "@symfony-scripts"
    ]
},
"config": {
    "bin-dir": "bin",
    "platform": {
        "php": "7.0"
    }
},
"extra": {
    "symfony-app-dir": "app",
    "symfony-web-dir": "web",
    "symfony-assets-install": "relative",
    "incenteev-parameters": {
        "file": "app/config/parameters.yml"
    },
    "branch-alias": {
        "dev-master": "2.7-dev"
    }
}

}

Спасибо заранее за вашу помощь.


person Pierrick Martellière    schedule 01.03.2017    source источник
comment
Наконец-то получилось переустановить swiftmailer-bundle 2.4, но проблема всегда есть. Помогите, пожалуйста !   -  person Pierrick Martellière    schedule 01.03.2017
comment
Это определенно начало происходить с сегодняшнего дня. (Symfony 2.8 здесь.) -- Редактировать: Выяснено, почему, см. мой ответ ниже.   -  person Adambean    schedule 01.03.2017


Ответы (2)


Это определенно происходит с сегодняшнего дня. (Я использую Symfony 2.8.17.) Возврат пакета Swiftmailer обратно к версии 2.4 исправил это для меня.

В файле composer.json измените

"symfony/swiftmailer-bundle": "~2.3",

to

"symfony/swiftmailer-bundle": "2.4",

Теперь сделайте обновление композитора, чтобы вернуться к версии 2.4 пакета Swiftmailer, и все должно быть хорошо. Похоже, в обновлении 2.5 есть ошибка.

--

Если у вас все еще есть проблемы, попробуйте эти команды, чтобы полностью очистить кеш:

rm -rf app/cache/*
rm app/bootstrap.php.cache

Также проверьте файл composer.lock, чтобы убедиться, что пакет Swiftmailer действительно вернулся к версии 2.4. Вы должны увидеть такой раздел:

    {
        "name": "symfony/swiftmailer-bundle",
        "version": "v2.4.2",
        "source": {
            "type": "git",
            "url": "https://github.com/symfony/swiftmailer-bundle.git",
            "reference": "ad751095576ce0c12a284e30e3fff80c91f27225"
        },
        "dist": {
            "type": "zip",
            "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/ad751095576ce0c12a284e30e3fff80c91f27225",
            "reference": "ad751095576ce0c12a284e30e3fff80c91f27225",
            "shasum": ""
        },
        "require": {
            "php": ">=5.3.2",
            "swiftmailer/swiftmailer": ">=4.2.0,~5.0",
            "symfony/config": "~2.7|~3.0",
            "symfony/dependency-injection": "~2.7|~3.0",
            "symfony/http-kernel": "~2.7|~3.0"
        },
        "require-dev": {
            "symfony/console": "~2.7|~3.0",
            "symfony/framework-bundle": "~2.7|~3.0",
            "symfony/phpunit-bridge": "~2.7|~3.0",
            "symfony/yaml": "~2.7|~3.0"
        },
        "suggest": {
            "psr/log": "Allows logging"
        },
        "type": "symfony-bundle",
        "extra": {
            "branch-alias": {
                "dev-master": "2.4-dev"
            }
        },
        "autoload": {
            "psr-4": {
                "Symfony\\Bundle\\SwiftmailerBundle\\": ""
            }
        },
        "notification-url": "https://packagist.org/downloads/",
        "license": [
            "MIT"
        ],
        "authors": [
            {
                "name": "Symfony Community",
                "homepage": "http://symfony.com/contributors"
            },
            {
                "name": "Fabien Potencier",
                "email": "[email protected]"
            }
        ],
        "description": "Symfony SwiftmailerBundle",
        "homepage": "http://symfony.com",
        "time": "2016-12-20T04:44:33+00:00"
    },
person Adambean    schedule 01.03.2017
comment
Привет, спасибо за ваш ответ. Я сделал то, что вы сказали, но это ничего не изменило. Я уже переустановил пакет swiftmailer в версии 2.4.0, но это не решило проблему. Я вручную очистил кеш, чтобы быть уверенным, и проблема все еще здесь. - person Pierrick Martellière; 01.03.2017
comment
Вы тоже удалили файл bootstrap.php.cache? - person Adambean; 01.03.2017
comment
Я не делал, попробовал еще раз, и это сработало. В прошлый раз я модифицировал версию swiftmailer-bundle в composer.lock, а не в composer.json, возможно, это было причиной. Кстати, я люблю тебя, чувак, спасибо! ^^ - person Pierrick Martellière; 01.03.2017
comment
Ах да, вы должны сделать это в файле json. Это то, что Composer читает, чтобы определить, что он должен установить. Файл блокировки просто хранит запись того, что Composer УСТАНОВИЛ, и его ручное изменение ничего для вас не даст. - person Adambean; 01.03.2017
comment
Да, это хорошо для моего общего понимания фреймворка и его плагинов. Я пометил ваш ответ как принятый, так как он содержит хорошее объяснение, и вы заметили проблему с первой попытки ^^ Еще раз спасибо! - person Pierrick Martellière; 01.03.2017

Скорее всего проблема, которую вы описываете, была вызвана не ошибкой, а изменением связанной зависимости на swiftmailer/swiftmailer.

You have requested a non-existent service "mail". говорит, что служба mail отсутствует, Unable to replace alias "swiftmailer.mailer.default.transport.real" with actual definition "mail". — общий намек на то, что это связано с транспортом swfitmailer mail, класс Swift_Transport_MailTransport использует небезопасная функция php mail(). Этот транспорт устарел, начиная с версии swiftmailer 5.4.5 из соображений безопасности. причины.

Для устранения проблемы необходимо

  • переключиться с транспорта mail на транспорт, поддерживаемый текущим swiftmailer, или
  • добавьте "swiftmailer/swiftmailer": "<6.0" в ваши зависимости composer.json, чтобы предотвратить установку пакетов swiftmailer v6.x, где Swift_Transport_MailTransport нет. К сожалению, для symfony/swiftmailer-bundle требуется swiftmailer версии 6.x, начиная с версии 3.0.0, поэтому вам потребуется "symfony/swiftmailer-bundle": "^2"
person Erik Theoboldt    schedule 19.02.2018