LoginSignup
3
4

More than 3 years have passed since last update.

Windows10で『基本からしっかり学ぶ Symfony2入門』を学習する

Last updated at Posted at 2018-06-23

『基本からしっかり学ぶ Symfony2入門』

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)
2.7 2018/05 2019/05
2.8 2018/11 2019/11

Composer

  • composer.phar Composer (v1.0.0 ダウンロード)

  • composer.bat の作成

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 を入力します

Apache

注 ビルトインWebサーバでも問題ありません
ただし、以降は Apache 使用 (phpMyAdmin 使用のため)

ドキュメントルート設定

C:\XAMPP\xampp_5.6.36\apache\conf\extra\httpd-vhosts.conf

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

hosts
127.0.0.1 localhost
127.0.0.1 classic-symfony.localhost

Xdebug

C:\XAMPP\xampp_5.6.36\php\php.ini (最終行に追加)

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ヶ所あるため)

php.ini
[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

操作タブ
照合順序 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.cacheapp へコピー

デバッグ環境 最適化

デバッグ環境_最適化.jpg


各章開始時点

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

データセット

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

ライブラリのインストール

  • 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

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

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: smtpsecret: 346d635ccdebbd213cf9e074baa5a7cce799e093
  を追加

4-3_メール通知機能の作成_3.jpg

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

5-4_blog_article.jpg

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.yml.dist
parameters:
    ...
    url_base:          http://classic-symfony.localhost/app_dev.php

app/config/parameters.yml

parameters.ym
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

httpd.conf
...
#Listen 12.34.56.78:80
Listen 80
Listen 8080
...

C:\XAMPP\xampp_5.6.36\apache\conf\extra\httpd-vhosts.conf

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

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>

メニュー等変更_1.jpg

app\Resources\views\Toppage\index.html.twig

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>

メニュー等変更_2.jpg

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4