2017/07/19
Symfonyをアップデートしてみる (1)
はじめに
化石のようなSymfonyを2.8までアップデートします。
ちなみにSymfony2.0だとcomposerによるバージョン管理がされていません。
Composerとは?
フレームワークと、その中で使っているモジュールをバージョン管理するソフトウェア。
Railsでのgemのような役割を果たす。どのようなモジュールをフレームワークで使うか。
モジュール自体のバージョン、フレームワークそのもののバージョンを管理。
これにより異なる環境下でも同じ動作を担保するのが目的となる
アプローチ
そのため、後述のcomposerをインストールしてアップデートを試みても失敗します。
対策:
空のプロジェクトをcomposerでインストール(ビルド)。
その後、既存のプロジェクトで必要な部分のみを複製する。
Composerのインストール
1 | php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" |
1 | php -r |
はリソースを作らずにコマンド上からPHPプログラムを実行するオプションです。
“https://getcomposer.org/installer” を “composer-setup.php” として保存します という内容です。
1 | php composer-setup.php |
ダウンロードしたインストーラーを実行。問題なく実行出来たらphpファイルを削除します。
作業しているディレクトリに “composer.phar” が作成されるのでこれを実行可能なパスへ移動
1 | mv composer.phar /usr/local/bin/composer |
これで
composer
と実行すれば、以下のようなロゴとバージョンが表示されます
1 2 3 4 5 6 7 | ______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.4.2 2017-05-17 08:17:52 |
プロジェクトの作成
1 | composer create-project symfony/framework-standard-edition SampleProject "2.8.25" |
最後の数値で使うSymfonyのバージョンを指定出来ます。(デフォルトだと3.x系に現在はなります)
Symfonyの移管
1 | app/AppKernel.php |
に記述されている読み込むべきバンドルをコピーします。
1 2 3 4 5 6 7 8 9 | public function registerBundles() { $bundles = array( // 中略 new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), new AppBundle\AppBundle(), new Application\FrontendBundle\ApplicationFrontendBundle(), new Application\BackendBundle\ApplicationBackendBundle(), new Application\InstallerBundle\ApplicationInstallerBundle(), |
のような感じに。
ここに記述したものの名前空間 (各プログラムで呼び出すための名称定義のようなもの) を
composer.json というプロジェクト直下に記述。
1 2 3 4 5 6 7 8 9 10 11 12 | // 前略 "autoload": { "psr-4": { "AppBundle\\": "src/AppBundle", "Application\\FrontendBundle\\": "src/Application/FrontendBundle", "Application\\BackendBundle\\": "src/Application/BackendBundle", "Application\\InstallerBundle\\": "src/Application/InstallerBundle", "Doctrine\\Common\\DataFixtures\\": "vendor/doctrine-data-fixtures/lib", "Doctrine\\Common\\": "vendor/doctrine-common/lib", "Doctrine\\DBAL\\": "vendor/doctrine-dbal/lib", "DoctrineExtensions\\NestedSet\\": "vendor/doctrine-nestedset/lib", // 以下略 |
この状態で
1 | composer update |
を実行すると、、、
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 | Do not run Composer as root/super user! See https://getcomposer.org/root for details Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Generating autoload files > Incenteev\ParameterHandler\ScriptHandler::buildParameters > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the symfony-scripts event terminated with an exception [RuntimeException] An error occurred when executing the "'cache:clear --no-warmup'" command: PHP Fatal error: Class 'Template\CoreBundle\TemplateCoreBundle' not found in /var/www/html/LaunchCart/app/AppKernel.php o n line 35 PHP Stack trace: PHP 1. {main}() /var/www/html/LaunchCart/app/console:0 PHP 2. Symfony\Bundle\FrameworkBundle\Console\Application->__construct() /var/www/html/LaunchCart/app/console:26 PHP 3. Symfony\Component\Console\Application->__construct() /var/www/html/LaunchCart/vendor/symfony/symfony/src/Symfony/ Bundle/FrameworkBundle/Console/Application.php:43 PHP 4. Symfony\Bundle\FrameworkBundle\Console\Application->add() /var/www/html/LaunchCart/vendor/symfony/symfony/src/Sym fony/Component/Console/Application.php:94 PHP 5. Symfony\Bundle\FrameworkBundle\Console\Application->registerCommands() /var/www/html/LaunchCart/vendor/symfony/sy mfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:131 PHP 6. Symfony\Component\HttpKernel\Kernel->boot() /var/www/html/LaunchCart/vendor/symfony/symfony/src/Symfony/Bundle/Fr ameworkBundle/Console/Application.php:144 PHP 7. Symfony\Component\HttpKernel\Kernel->initializeBundles() /var/www/html/LaunchCart/vendor/symfony/symfony/src/Symf ony/Component/HttpKernel/Kernel.php:130 PHP 8. AppKernel->registerBundles() /var/www/html/LaunchCart/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Ker nel.php:433 . update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [--no-suggest] [--with-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [-i|--interactive] [--root-reqs] [--] [<packages>]... |
結局上手く行かず、、プログラム(クラス)のオートロードが肝のようですが、一つずつ最初にcomposer.jsonに登録するのが手間となりました。
その先に進めたかったところですが、思いの外互換性が低く次にステップへの備忘録となりました。
Author Profile
スターフィールド編集部
SHARE