Problèmes de mise à niveau vers Symfony 4

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je viens ici, car voilà plusieurs jours que je galère avec la mise à niveau de Symfony 3.4 à Symfony 4 :'(

J’ai suivi scrupuleusement la page mise à disposition par Symfony et ai supprimé tous les avertissements de dépréciation, et me voilà maintenant rendu à changer la version de Symfony dans mon fichier symfony.json que voici (la ligne que j’ai changée est surlignée) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
{
    "name": "jerome/sitedeuchnord",
    "license": "proprietary",
    "type": "project",
    "autoload": {
        "psr-4": {
            "AppBundle\\": "src/AppBundle"
        },
        "classmap": [
            "app/AppKernel.php",
            "app/AppCache.php"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        },
        "files": [
            "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php"
        ]
    },
    "require": {
        "php": ">=5.5.9",
        "doctrine/doctrine-bundle": "^1.6",
        "doctrine/orm": "^2.5",
        "erusev/parsedown": "^1.6",
        "incenteev/composer-parameter-handler": "^2.0",
        "sensio/distribution-bundle": "^5.0.19",
        "sensio/framework-extra-bundle": "^3.0.2",
        "symfony/monolog-bundle": "^3.1.0",
        "symfony/polyfill-apcu": "^1.0",
        "symfony/swiftmailer-bundle": "^2.3.10",
        "symfony/symfony": "^4.0",
        "twig/extensions": "^1.5",
        "twig/twig": "^1.0||^2.0"
    },
    "require-dev": {
        "sensio/generator-bundle": "^3.0",
        "symfony/phpunit-bridge": "^3.0"
    },
    "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": {
        "sort-packages": true
    },
    "extra": {
        "symfony-app-dir": "app",
        "symfony-bin-dir": "bin",
        "symfony-var-dir": "var",
        "symfony-web-dir": "web",
        "symfony-tests-dir": "tests",
        "symfony-assets-install": "relative",
        "incenteev-parameters": {
            "file": "app/config/parameters.yml"
        },
        "branch-alias": null
    }
}

Mais lorsque j’invoque composer update, j’obtiens le résultat suivant (j’ai tronqué volontairement les lignes qui se répétaient pour éviter le flood inutile) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Conclusion: remove sensio/distribution-bundle v5.0.21
    - Conclusion: don't install sensio/distribution-bundle v5.0.21
    - Conclusion: don't install symfony/symfony v4.0.4
    - Conclusion: don't install symfony/symfony v4.0.3
    - Conclusion: don't install symfony/symfony v4.0.2
    - Installation request for sensio/distribution-bundle (locked at v5.0.21, required as ^5.0.19) -> satisfiable by sensio/distribution-bundle[v5.0.21].
    - Conclusion: don't install symfony/symfony v4.0.1
    - sensio/distribution-bundle v5.0.21 requires symfony/process ~2.3|~3.0 -> satisfiable by symfony/symfony[v3.4.4], symfony/process[v2.3.0, v2.3.1, ..., v3.4.3, v3.4.4].
    - Can only install one of: symfony/symfony[v4.0.0, v3.4.4].
    - don't install symfony/process v2.3.0|don't install symfony/symfony v4.0.0
    - don't install symfony/process v2.3.1|don't install symfony/symfony v4.0.0
    [...]
    - don't install symfony/process v3.4.2|don't install symfony/symfony v4.0.0
    - don't install symfony/process v3.4.3|don't install symfony/symfony v4.0.0
    - don't install symfony/process v3.4.4|don't install symfony/symfony v4.0.0
    - Installation request for symfony/symfony ^4.0 -> satisfiable by symfony/symfony[v4.0.0, v4.0.1, v4.0.2, v4.0.3, v4.0.4].

Le package symfony/process n’étant pas dans mes dépendances initiales, je ne comprends pas vraiment ce que je dois faire… Une idée ?

Merci d’avance

+0 -0

Salut !

As-tu aussi tenté de supprimer les vendors en plus du .lock ? J’ai constaté que quelques fois Composer ne m’a pas réinstallé une dépendance, souvent c’était parce que la version que j’avais était correcte du point de vue des contraintes, mais je devais reprendre une révision précédente.

Je travaille actuellement sur la migration d’une application Symfony 2 vers Symfony 3, et j’ai le même genre de souci. J’ai bien peur que les instructions de mise à niveau vers la version majeure suivante soient trop simplistes, surtout en ce qui concerne les dépendances — et je ne parle pas des adaptations à effectuer dans le code.

J’ai aussi tenté composer update symfony/symfony --with-dependencies, mais chez moi ça ne résout pas le problème (je soupçonne quelques dépendances dont la contrainte de version est trop stricte).

Actuellement, j’en suis à analyser l’arbre de dépendances pour effectuer une installation propre de Symfony 3 et j’y importerai le code de mon application.

+1 -0

Hello,

Avec un peu d’aide sur Twitter, j’ai fini par me débloquer.

Les instructions sur le site de Symfony sont effectivement trop simplistes, et il ne suffit pas d’augmenter la version de Symfony pour faire la mise à niveau.

Pour ma part, j’ai pu faire ma migration en retirant toutes les dépendances et en copiant celles du squelette de Symfony (apparemment, c’est le même principe pour passer de Symfony 2 à Symfony 3) et en ajoutant les dépendances signalées comme manquantes.

Dans le cas d’une migration de Symfony 3 vers Symfony 4, il faut également penser à renommer le répertoire /web en /public.

Dernière chose, il semble (c’est en tout cas le cas dans mon cas1) que le Profiler de Symfony (la barre en bas de l’écran, en environnement de développement) provoque une exception :

Variable "position" does not exist.

in vendor/symfony/symfony/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/toolbar_js.html.twig (line 4)

1
2
3
4
5
6
7
8
9
    <div id="sfwdt{{ token }}" class="sf-toolbar sf-display-none"></div>
    {{ include('@WebProfiler/Profiler/base_js.html.twig') }}
    <style{% if csp_style_nonce %} nonce="{{ csp_style_nonce }}"{% endif %}>
        {{ include('@WebProfiler/Profiler/toolbar.css.twig') }}
    </style>
    <script{% if csp_script_nonce %} nonce="{{ csp_script_nonce }}"{% endif %}>/*<![CDATA[*/
        (function () {
            Sfjs.load(
                'sfwdt{{ token }}',

Il faut que je dépatouille ça, mais en attendant, on peut désactiver le Profiler dans le fichier /app/config/config_dev.yml :

1
2
web_profiler:
    toolbar: false

  1. euh… :euh:  

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte