Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

Symfony 2.7 のサポートは、終了しましたが、
写経と下記の作業手順は、動作します (2020/01)

変更点
以前、動作していた composer require は、エラーが出るので
composer install (ライブラリのインストール) で対応しました

準備作業

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 複数バージョン 前提)
  • C:\XAMPP\xampp_5.6.36 の setup_xampp.bat 実行 (重要 設定ファイル内の「パス情報」が修正される) 解凍後、実行は1回のみ
  • システム環境変数 Path に C:\XAMPP\xampp_5.6.36\php 追加

任意のフォルダは、深い階層での使用は避けてください
Windows の MAX_PATH の制約 です

Windows 10 の Explorer で 260文字以上のPATH を取り扱う
上記サイトの設定をしても、多くのソフトが対応していません

Symfony 2.7, 2.8

バージョン メンテナンス終了 EOL (End of Life)
2.7 2018/05 2019/05
2.8 2018/11 2019/11

Symfony Installer

コマンドプロンプト
cd C:\XAMPP\xampp_5.6.36\php
php -r "readfile('http://symfony.com/installer');" > symfony.phar

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
php C:\XAMPP\xampp_5.6.36\php\symfony.phar new classic-symfony.localhost 2.7.4

インストール直後の app/bootstrap.php.cache をバックアップ!
(ch04start.zip (symfony2-book) ~ end.zip (symfony2-book) の時に使用します)

Apache

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

ドキュメントルート設定

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

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 にセット

Unix コマンド

BusyBox設定備忘録
P24 使用

デバッグ

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)
 app\config\parameters.yml (database_name: symfony) (3章のみ リスト 3-1 参照 )

コマンドプロンプト
cd C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost
php app/console doctrine:database:create

操作タブ
照合順序 utf8_general_ci (文字化け対策)

(省略可) 3-1 不要なファイルの削除 (P58)

4章以降に関連がありませんので、作業を省略します
Symfony インストール時のみ 必要 (サンプルコード application 内を使用する時は不要)

コマンドプロンプト
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)

各章開始時点の「最初にする作業」 (4章~最終)

D:\temp\temp1

  • コピー元 D:\temp\temp1\symfony2-book-download-20151125\symfony2-book-download
  • コピー先 C:\XAMPP\xampp_5.6.36\htdocs\classic-symfony.localhost

インストール直後の app/bootstrap.php.cache をバックアップ! (下記 参照)

D:\temp\temp1\symfony2-book-download-20151125\symfony2-book-download\application\symfony2-book

  • app, src, web をコピー (注 上書きコピーは「しない」)
  • バックアップした app/bootstrap.php.cacheapp へコピー

デバッグ環境 最適化

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


各章開始時点

4章の開始時点 とは、3章の終了(完成)時点 です
4章の 4-1 表示の確認 は、3章の終了(完成)時点 です

  処理
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 生成したパスワードハッシュの設定

コマンドプロンプト(生成したパスワードハッシュの設定)
 php -r "echo password_hash('password', PASSWORD_BCRYPT, ['cost' => 13]) . PHP_EOL;"

 パスワード: 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章」開始時点 = 「次の章」) 解凍後の 「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

composer.lock がある場合、それに従ってライブラリをインストールします

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/

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/

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 }

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


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 タブ 参照

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)

************** には、値がセットされています

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


app/config/parameters.yml.dist に、
  上記 (mailer_transport: smtp ~ secret: 346d635ccdebbd213cf9e074baa5a7cce799e093) を追加
  composer 対策 (追加しないと 7章以降の composer 実行時に エラー発生)

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

http://localhost/phpmyadmin/ (URL欄)

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away