Symfony 2.7 のサポートは、終了しましたが、
写経と下記の作業手順は、動作します (2021/01)変更点1
以前、動作していた composer require は、エラーが出るので
composer install (ライブラリのインストール) で対応します変更点2
以前、動作していた Symfony Installer は、使えなくなったので
composer を使用して Symfony 2.7.4 をインストールします (Symfony 2.7.4 インストール)
準備作業
XAMPP 5.6.36 (xampp-win32-5.6.36-0-VC11.zip)
XAMPP 5.6.36 (xampp-win32-5.6.36-0-VC11.zip ダウンロード)
- C:\XAMPP\xampp_5.6.36 (任意のフォルダ) XAMPP 複数バージョンを使用する環境 前提
- xampp-win32-5.6.36-0-VC11.zip (xampp-win32-5.6.36-0-VC11-installer.exe 不可)
- xampp-win32-5.6.36-0-VC11.zip 解凍後、フォルダ名変更 xampp → xampp_5.6.36
- C:\XAMPP\xampp_5.6.36 の setup_xampp.bat 実行 (重要 設定ファイル内の**「パス情報」**が修正される) 解凍後、実行は1回のみ
- システム環境変数 Path に C:\XAMPP\xampp_5.6.36\php 追加
任意のフォルダは、深い階層での使用は避けてください
Windows の MAX_PATH の制約 のため
Symfony 2.7, 2.8
バージョン | メンテナンス終了 | EOL (End of Life) |
---|---|---|
Composer
-
composer.phar Composer (v1.0.0 ダウンロード)
-
composer.bat の作成
@ECHO OFF
php "%~dp0composer.phar" %*
composer.phar と composer.bat を C:\XAMPP\xampp_5.6.36\php にセット
Symfony 2.7.4 インストール
インストール先 C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
(classic-symfony.localhost 自動作成)
cd C:\XAMPP\xampp_5.6.36\htdocs
composer create-project symfony/framework-standard-edition classic-symfony.localhost "2.7.4"
インストール直後の app/bootstrap.php.cache をバックアップ!
(ch04start.zip (symfony2-book) ~ end.zip (symfony2-book) の時に使用します)
- インストールの最初に Warning が出ますが、正常に処理されます
- composer.phar v2.0 以上 を使うとエラーになります
- インストールの最後に問合せがありますが、すべて Enter を入力します
- (database_name は、3-1 データベース作成 (P57)で設定します)
Apache
注 ビルトインWebサーバでも問題ありません
ただし、以降は Apache 使用 (phpMyAdmin 使用のため)
ドキュメントルート設定
C:\XAMPP\xampp_5.6.36\apache\conf\extra\httpd-vhosts.conf
<VirtualHost *:80>
ServerName localhost
DocumentRoot "C:/XAMPP/xampp_5.6.36/htdocs"
DirectoryIndex index.php index.html
<Directory "C:/XAMPP/xampp_5.6.36/htdocs">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName classic-symfony.localhost
DocumentRoot "C:/XAMPP/xampp_5.6.36/htdocs/classic-symfony.localhost/web"
DirectoryIndex index.php index.html
<Directory "C:/XAMPP/xampp_5.6.36/htdocs/classic-symfony.localhost">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
hosts ドメイン設定
C:\Windows\System32\drivers\etc\hosts
127.0.0.1 localhost
127.0.0.1 classic-symfony.localhost
Xdebug
C:\XAMPP\xampp_5.6.36\php\php.ini (最終行に追加)
[XDebug]
zend_extension = "C:\XAMPP\xampp_5.6.36\php\ext\php_xdebug.dll"
;xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_mode=req
;xdebug.idekey="netbeans-xdebug"
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 1
date.timezone
C:\XAMPP\xampp_5.6.36\php\php.ini を修正
最後の date.timezone (2ヶ所あるため)
[Date]
date.timezone=Asia/Tokyo
デバッグ
NetBeans IDE 8.2
- 新規 メニュー [ファイル] - [新規プロジェクト] [PHP] - [既存のソースを使用するPHPアプリケーション]
- 修正 メニュー [実行] - [プロジェクトの構成を設定] - [カスタマイズ] (カテゴリ: 実行環境)
Webアプリケーション
実行構成 | |
---|---|
実行方法 | ローカルWebサイト(ローカルWebサーバーで実行中) |
プロジェクトURL | http://localhost/classic-symfony.localhost/ |
開始ファイル | web/app_dev.php |
CLI (7章~)
例 php app/console doctrine:fixtures:load (P177)
名前と場所 | |
---|---|
ソース・フォルダ | C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost_cli (classic-symfony.localhost をコピーする nbproject フォルダがある場合、削除する) |
プロジェクト名 | classic-symfony.localhost_cli |
実行構成 | |
---|---|
実行方法 | スクリプト(コマンド行で実行) |
PHPインタプリタ | C:\XAMPP\xampp_5.6.36\php\php.exe |
開始ファイル | app/console |
引数 (修正のみ) | doctrine:fixtures:load |
ウィンドウ | |
---|---|
出力 - デバッグ | コマンド プロンプト 機能 |
オプション
- メニュー [ツール] - [オプション] [PHP] - [デバッグ]
最初の行で停止 OFF (デフォルト ON)
写経
ここまでが準備作業
写経は 4章 から開始
- 2章 デモアプリケーション (省略) (4章以降に関連がありませんので、作業を省略します)
- 3章 (省略) 同上
(省略) 2-4 デモアプリケーション (P33)
4章以降に関連がありませんので、作業を省略します
Symfony2.7 のデモアプリをWindows7にインストール成功しました! (ビルトインWebサーバ)
上記サイトの変更 | |
---|---|
誤 | (4)コマンドプロンプトで php composer.phar install –no-interaction を実行 |
正 | (4)コマンドプロンプトで php composer.phar install ––no-interaction を実行 |
データベース
3-1 データベース作成 (P57)
xampp-control.exe 起動 (Apache, MySQL) C:\XAMPP\xampp_5.6.36\xampp-control.exe
C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
app\config\parameters.yml 編集 (database_name: classic-symfony)
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
php app/console doctrine:database:create
- phpMyAdmin で データベースの確認 と 下記の修正 http://localhost/phpmyadmin/
- xampp-control.exe が起動している場合 (Apache, MySQL) http://localhost/phpmyadmin/ をクリックしてください
操作タブ
照合順序 utf8_general_ci 選択 (文字化け対策) 実行ボタン クリック
(テーブル作成前なので Change all tables collations オフのままで可)
(省略) 3-1 不要なファイルの削除 (P58)
4章以降に関連がありませんので、作業を省略します
del C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost\src\AppBundle\Controller\DefaultController.php
del C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost\src\AppBundle\Tests\Controller\DefaultControllerTest.php
- 「クラシックシンフォニー楽団」のトップページを表示するために削除
- トップページの表示の確認 (P64)
サンプルコード
サンプルコード (symfony2-book-download-20151125.zip ダウンロード)
例 D:\temp\temp1
-
D:\temp\temp1 内で サンプルコード (symfony2-book-download-20151125.zip) を解凍
-
D:\temp\temp1\symfony2-book-download-20151125\symfony2-book-download
-
application (ch04start.zip (symfony2-book) ~ end.zip (symfony2-book))
-
assets (ch04\web\*.*, ch05\sql\blog_article.sql, ch09\templates\Blog\index.html.twig)
-
links
-
lists
application (4章以降)
データベース作成
- xampp-control.exe (再)起動 (Apache, MySQL) C:\XAMPP\xampp_5.6.36\xampp-control.exe
- 3-1 データベース作成 (P57) (データベース classic-symfony 未作成の場合)
ch04start.zip (symfony2-book) ~ end.zip (symfony2-book)
ch04start.zip ~ end.zip 解凍
各章開始時点の「最初にする作業」 (4章~最終)
例 D:\temp\temp1
- コピー元 D:\temp\temp1\symfony2-book-download-20151125\symfony2-book-download
- コピー先 C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
Symfony 2.7.4 インストール直後の app/bootstrap.php.cache をバックアップ! (下記 参照)
D:\temp\temp1\symfony2-book-download-20151125\symfony2-book-download\application\symfony2-book
- app, src, web をコピー (注 上書きコピーは「しない」 元の app, src, web 削除後 コピー!)
- バックアップした app/bootstrap.php.cache を app へコピー
デバッグ環境 最適化
- Symfonyでdebug環境を最適化しコードを追いやすくする (web/app_dev.php)
- bootstrap.php.cache → autoload.php
- $kernel->loadClassCache(); → // $kernel->loadClassCache();
各章開始時点
注 4章の開始時点 とは、3章の終了(完成)時点 です
注 4章の 4-1 表示の確認 は、3章の終了(完成)時点 です
注 assets\ch04\web D:\temp\temp1\symfony2-book-download-20151125\symfony2-book-download\assets\ch04\web
章 | 処理 | 各 4 |
章 5 |
開 6 |
始 7 |
時 8 |
点 9 |
最終 | |
---|---|---|---|---|---|---|---|---|---|
- | assets\ch04\web |
bootstrap, css, fontawesome, img, jquery, js を web へコピー (css, js は設定済) |
〇 | 〇 | 〇 | 〇 | 〇 | 〇 | |
4 | シンボリックリンク | 4-1 シンボリックリンク (P93) | 〇 | 〇 | |||||
メール通知機能の作成 | 4-3 メール通知機能の作成 (P114) | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | ||
5 | blog_article | テーブル作成 | 〇 | 〇 | |||||
blog_article | データセット 重複確認 (〇) | 〇 | (〇) | ||||||
6 | app/config/security.yml | 注2 生成したパスワードハッシュの設定 (P151, P152) | 〇 | 〇 | 〇 | 〇 | |||
(inquiry) | (テーブル作成) | ||||||||
7 | (inquiry) | (データセット) | |||||||
ライブラリ |
ライブラリのインストール 重要 (8章, 9章, 最終) (シンボリックリンク 含む) |
〇 8 |
〇 9 |
〇 最終 |
〇 最終 |
||||
concert | テーブル作成 | 〇 | 〇 | 〇 | |||||
inquiry, concert | データセット | 〇 | 〇 | 〇 | |||||
blog_article | データセット | 〇 | 〇 | ||||||
- | メニュー等変更 | 〇 | |||||||
- | 4-1 表示の確認 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 |
###注2 生成したパスワードハッシュの設定
app/config/security.yml (password: にパスワードハッシュの設定)
php -r "echo password_hash('password', PASSWORD_BCRYPT, ['cost' => 13]) . PHP_EOL;"
adminユーザ の パスワード: password
ハッシュ : $2y$13$agv1iPIH0mp0QkFMSpDuPOkyvQPDnQecjWQRkeQ/fwoEjJjWKP6Su
(ハッシュ値は、コマンドを実行するたびに変わります)
テーブルの処理
テーブル作成
5-4 blog_article (P140)
6-2 (inquiry) (P158)
7-4 concert (P195)
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
php app/console doctrine:schema:update --force
- phpMyAdmin で確認 http://localhost/phpmyadmin/
データセット
7-1 (inquiry) (P177)
7-4 inquiry, concert (P196)
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
php app/console doctrine:fixtures:load
- phpMyAdmin で確認 http://localhost/phpmyadmin/
ライブラリのインストール
- composer install (ライブラリのインストール)
- composer require (使用しません)
composer require について
2018/06 エラー無
2019/09? 以降 エラー有
例 ライブラリのインストール
「7章」開始時点
例 D:\temp\temp1
D:\temp\temp1\symfony2-book-download-20151125\symfony2-book-download\application\ch08start.zip
「次の章」
ch08start.zip (「8章」開始時点 = 7章の終了(完成)時点) 解凍後の
D:\temp\temp1\symfony2-book-download-20151125\symfony2-book-download\application\symfony2-book の
composer.json, composer.lock を
C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost にコピー後
下記のコマンドを実行します
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
composer install
4-1 シンボリックリンク (P93)
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
php app/console assets:install web
4-1 表示の確認
app_dev.php
注 4章の開始時点の 表示の確認 は、3章の終了(完成)時点 です
章 | タイトル | URL |
---|---|---|
3章 4章 |
トップページ (P64) (P97) |
http://classic-symfony.localhost/app_dev.php |
3章 4章 |
公演情報 (P78) (P97) |
http://classic-symfony.localhost/app_dev.php/concert/ |
4章 | お問い合わせ (P108) | http://classic-symfony.localhost/app_dev.php/inquiry/ |
6章 7章 |
お問い合わせ管理 (P171) (P178) |
http://classic-symfony.localhost/app_dev.php/admin/ http://classic-symfony.localhost/app_dev.php/admin/inquiry/search |
8章 | 団員情報 (P244) | http://classic-symfony.localhost/app_dev.php/member |
9章 | ブログ記事一覧 (P271) | http://classic-symfony.localhost/app_dev.php/blog/ |
アプリケーションに変更が反映されない場合 (キャッシュクリア)
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
php app/console cache:clear --no-warmup
app.php
注 4章の開始時点の 表示の確認 は、3章の終了(完成)時点 です
章 | タイトル | URL |
---|---|---|
3章 4章 |
トップページ (P64) (P97) |
http://classic-symfony.localhost/ |
3章 4章 |
公演情報 (P78) (P97) |
http://classic-symfony.localhost/concert/ |
4章 | お問い合わせ (P108) | http://classic-symfony.localhost/inquiry/ |
6章 7章 |
お問い合わせ管理 (P171) (P178) |
http://classic-symfony.localhost/admin/ http://classic-symfony.localhost/admin/inquiry/search |
8章 | 団員情報 (P244) | http://classic-symfony.localhost/member |
9章 | ブログ記事一覧 (P271) | http://classic-symfony.localhost/blog/ |
アプリケーションに変更が反映されない場合 (キャッシュクリア)
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
php app/console cache:clear --no-warmup --env=prod --no-debug
4-3 メール通知機能の作成 (P114)
mailtrap (開発用SMTPサーバ) を使用
(Pricing Free $0 を選択)
送信されたメールは、mailtrap にログインして確認します
app/config/config.yml
# Swiftmailer Configuration
swiftmailer:
transport: "%mailer_transport%"
host: "%mailer_host%"
username: "%mailer_user%"
password: "%mailer_password%"
auth_mode: "%mailer_auth_mode%"
port: "%mailer_port%"
spool: { type: memory }
app/config/parameters.yml
mailer_transport: smtp
mailer_host: smtp.mailtrap.io
mailer_user: ************** ← mailtrap Username を記述
mailer_password: ************** ← mailtrap Password を記述
mailer_auth_mode: cram-md5
mailer_port: 2525
mailtrap Username, mailtrap Password は、ログイン時の Email アドレス, Password とは異なります
【mailtrap Username, mailtrap Password について】
mailtrap に Log in 後、
Home / Demo inbox SMTP Settings タブ 参照 (Show Credentials クリック)
SMTP
Host: smtp.mailtrap.io
Port: 25 or 465 or 587 or 2525
Username: ************** ← mailtrap Username
Password: ************** ← mailtrap Password
Auth: PLAIN, LOGIN and CRAM-MD5
TLS: Optional (STARTTLS on all ports)
POP3
Host: pop3.mailtrap.io
Port: 1100 or 9950
Username: ************** ← mailtrap Username
Password: ************** ← mailtrap Password
Auth: USER/PASS, PLAIN, LOGIN, APOP and CRAM-MD5
TLS: Optional (STARTTLS on all ports)
注 ************** には、値がセットされています
注 app/config/parameters.yml.dist に、
app/config/parameters.yml の
mailer_transport: smtp ~ secret: 346d635ccdebbd213cf9e074baa5a7cce799e093
を追加
5-4 ブログ記事一覧のデータベースからの読み込み (P138)
データセット
5-4 blog_article (P140)
例 D:\temp\temp1
D:\temp\temp1\symfony2-book-download-20151125\symfony2-book-download\assets\ch05\sql\blog_article.sql
7章, 8章, 9章
バージョン情報 (例 ^2.2) は、composer.json を参照 (以下 同)
7-1 データフィクスチャ
P174
使用中止
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
composer require --dev doctrine/doctrine-fixtures-bundle:^2.2
7-2 CSVダウンロード機能の作成
P178
使用中止
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
composer require league/csv:^7.1
7-3 コマンドの作成
P190 (省略可)
注 以下は Apache の場合 (ビルトインWebサーバの場合は不要)
app/config/parameters.yml.dist
parameters:
...
url_base: http://classic-symfony.localhost/app_dev.php
app/config/parameters.yml
parameters:
...
url_base: http://classic-symfony.localhost/app_dev.php
P191, P194
chcp 65001 ← 文字コード UTF8
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
php app/console | more
chcp 65001 ← 文字コード UTF8
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
php app/console cs:inquiry:notify-unprocessed
7-4 APIの開発
P194
使用中止
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
composer require friendsofsymfony/rest-bundle:^1.7
composer require jms/serializer-bundle:1.5.0
P202, 204
修正 | url |
---|---|
前 | http://127.0.0.1:8000/api/concerts.json |
後 | http://classic-symfony.localhost/app_dev.php/api/concerts.json |
P205
使用中止
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
composer --dev require nelmio/api-doc-bundle:^2.9
P206
修正 | url |
---|---|
前 | http://127.0.0.1:8000/api/doc |
後 | http://classic-symfony.localhost/app_dev.php/api/doc#get--api-concerts.{_format} |
APIのCORS対応
P207
使用中止
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
composer require nelmio/cors-bundle:^1.4
C:\XAMPP\xampp_5.6.36\apache\conf\httpd.conf
...
#Listen 12.34.56.78:80
Listen 80
Listen 8080
...
C:\XAMPP\xampp_5.6.36\apache\conf\extra\httpd-vhosts.conf
#Listen 80
NameVirtualHost *:80
#Listen 8080
NameVirtualHost *:8080
<VirtualHost *:80>
ServerName localhost
DocumentRoot "C:/XAMPP/xampp_5.6.36/htdocs"
DirectoryIndex index.php index.html
<Directory "C:/XAMPP/xampp_5.6.36/htdocs">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80 *:8080>
ServerName classic-symfony.localhost
DocumentRoot "C:/XAMPP/xampp_5.6.36/htdocs/classic-symfony.localhost/web"
DirectoryIndex index.php index.html
<Directory "C:/XAMPP/xampp_5.6.36/htdocs/classic-symfony.localhost">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
P208 リスト 7-27 CORS動作確認画面のHTML (web/cors.html)
修正 | url |
---|---|
前 | http://127.0.0.1:8000/api/concerts.json |
後 | http://classic-symfony.localhost/app_dev.php/api/concerts.json |
P209 ブラウザ1
修正 | url |
---|---|
前 | http://127.0.0.1:8000/cors.html |
後 | http://classic-symfony.localhost/cors.html |
P209 ブラウザ2
修正 | url |
---|---|
前 | http://127.0.0.1:8888/cors.html |
後 | http://classic-symfony.localhost:8080/cors.html |
P210 リスト 7-28 NelmioCorsBundle の設定を変更 (app/config/config.yml)
修正 | url |
---|---|
前 | http://127.0.0.1:8888 |
後 | http://classic-symfony.localhost:8080 |
8-3 独自のサービスの定義
P228
使用中止
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
composer require jms/di-extra-bundle:^1.6
9-1 テストのための準備
P249
PHPUnit のインストール (composer 使用)
使用中止
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
composer --dev require phpunit/phpunit:^4.8
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
.\bin\phpunit.bat --version
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
.\bin\phpunit.bat -c app
.\bin\phpunit.bat -c app --debug
.\bin\phpunit.bat -c app --tap ← エラー
P251
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
.\bin\phpunit.bat -c app --testsuite=unit
.\bin\phpunit.bat -c app --testsuite=funcrional
.\bin\phpunit.bat -c app --testsuite=all
del C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost\src\AppBundle\Tests\Controller\*.php
9-2 ユニットテスト
P254 ~ P263
chcp 65001 ← P258
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
.\bin\phpunit.bat -c app
9-3 ファンクショナルテスト
P264
使用中止
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
composer --dev require hautelook/alice-bundle:^0.2.0
composer --dev require liip/functional-test-bundle:^1.2
P271
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
php app/console doctrine:fixtures:load
P273
assets\ch09\templates\Blog\index.html.twig を app\Resources\views\Blog\index.html.twig へコピー
コピーをしないとエラーになります
chcp 65001
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
.\bin\phpunit.bat -c app src/AppBundle/Tests/Controller/BlogControllerTest.php
#メニュー等変更
app\Resources\views\Common\navbar.html.twig
<li><a href="{{ path("app_member_index") }}">楽団プロフィール</a></li>
<li><a href="{{ path("app_blog_index") }}">ブログ</a></li>
<li><a href="{{ path("app_inquiry_index") }}">お問い合わせ</a></li>
app\Resources\views\Toppage\index.html.twig
<a href="{{ path("app_member_index") }}" class="btn btn-primary">詳細</a>
...
<a href="{{ path("app_blog_index") }}" class="btn btn-primary">詳細</a>