代码之家  ›  专栏  ›  技术社区  ›  A.L

Symfony LTS:如何从2.8升级到3.4?

  •  4
  • A.L  · 技术社区  · 6 年前

    2.x

    symfony3.4是 3.x 分支和当前LTS。

    升级Symfony需要哪些步骤 2.8 3.4

    2 回复  |  直到 6 年前
        1
  •  8
  •   A.L    5 年前

    准备升级

    检查中列出的所有依赖项和捆绑包 composer.json 如果您已经发布了与symfony3.4兼容的版本,您可以通过在Packagist上搜索每个包来实现这一点 EasyAdmin 与Symfony 3兼容,因为 requires symfony/*: ~2.3 ). 如果其中一个依赖项与symfony3不兼容,则必须找到替换包或修补这些库。

    编写器.json

    为了从Symfony升级你的应用程序 2.8 致Symfony 3.4 编写器.json 文件:

    ( […] 表示未更改的代码)

    旧的( 2.8

    {
        […]
        "autoload-dev": {
            "files": [ "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php" ]
         },
        "require": {
            "php": ">=5.3.9",
            "doctrine/doctrine-bundle": "~1.4",
            "doctrine/orm": "^2.4.8",
            "incenteev/composer-parameter-handler": "~2.0",
            "sensio/distribution-bundle": "~4.0",
            "sensio/framework-extra-bundle": "^3.0.2",
            "symfony/monolog-bundle": "^3.0.2",
            "symfony/swiftmailer-bundle": "~2.3,>=2.3.10",
            "symfony/symfony": "2.8.*",
            "twig/twig": "^1.0||^2.0"
        },
        "require-dev": {
            "sensio/generator-bundle": "~3.0",
            "symfony/phpunit-bridge": "~2.7"
        },
        "config": {
            "bin-dir": "bin",
            "platform": {
                "php": "5.6"
            },
            "sort-packages": true
        },
        "extra": {
            "symfony-app-dir": "app",
            "symfony-web-dir": "web",
            "symfony-assets-install": "relative",
            […]
            "branch-alias": {
                "dev-master": "2.8-dev"
            }
        }
    }
    

    新建( 3.4

    {
        […]
        "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",
            "incenteev/composer-parameter-handler": "^2.0",
            "sensio/distribution-bundle": "^5.0.19",
            "sensio/framework-extra-bundle": "^5.0.0",
            "symfony/monolog-bundle": "^3.1.0",
            "symfony/polyfill-apcu": "^1.0",
            "symfony/swiftmailer-bundle": "^2.6.4",
            "symfony/symfony": "3.4.*",
            "twig/twig": "^1.0||^2.0"
        },
        "require-dev": {
            "sensio/generator-bundle": "^3.0",
            "symfony/phpunit-bridge": "^3.0"
        },
        "config": {
            "platform": {
                "php": "5.6"
            },
            "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",
            […]
            "branch-alias": {
                "dev-master": "3.4-dev"
            }
        }
    }
    

    摘要

    • autoload-dev.psr-4 已添加(必须更改测试目录的路径)
    • Symfony和依赖项已更新
    • symfony/polyfill-apcu 是一个新的依赖项
    • extra 已更新以使用新的目录结构: var 临时文件等。
    • config.bin-dir 已删除

    有关升级的更多详细信息: → 3.0 , → 3.1 , → 3.2 → 3.3 , → 3.4

    添加 getRootDir 和更新 registerContainerConfiguration 功能:

    public function getRootDir()
    {
        return __DIR__;
    }
    
    public function registerContainerConfiguration(LoaderInterface $loader)
    {
        $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
    }
    

    缓存和日志

    如果你想 cache logs var/ ,您必须更新 app/AppKernel.php 通过添加以下行来创建文件:

    public function getCacheDir()
    {
        return dirname(__DIR__).'/var/cache/'.$this->getEnvironment();
    }
    public function getLogDir()
    {
        return dirname(__DIR__).'/var/logs';
    }
    

    然后创建 目录并放置一个空文件 .gitkeep

    并将这些更改应用于 .gitignore 文件:

    /var/cache/*
    /var/logs/*
    !var/cache/.gitkeep
    !var/logs/.gitkeep
    

    另请参见: What is the new Symfony 3 directory structure?

    编写器.json 文件,则必须更新依赖项:

    composer update
    

    然后可能需要刷新缓存:

    php app/console cache:clear --env=dev
    

    注意:为了得到 编写器.json 文件夹:

    # create Symfony "2.8.*" project in the "2.8" directory
    composer create-project symfony/framework-standard-edition "2.8" "2.8.*" --no-interaction -v
    # create Symfony "3.4.*" project in the "3.4" directory
    composer create-project symfony/framework-standard-edition "3.4" "3.4.*" --no-interaction -v
    # compare the Symfony 2.8 and 3.4 composer.json files
    diff -u 2.8/composer.json 3.4/composer.json
    

    差异可在 GitHub 我也是。

    奖金: enable autowiring of services .

        2
  •  3
  •   Tomas Votruba    6 年前

    现在,您可以使用名为 校长 (我是这本书的作者)。它为许多框架准备了一套,Symfony框架是最完整的。还包括您可能需要的PHP升级。

    有关此特定升级路径的详细信息,请参阅: How to Upgrade Symfony 2.8 to 3.4