目次
まえがき
第1章 PHPとフレームワーク
1-1 フレームワークの王道を学ぶ
- フレームワークの多様性
- 多様性のメリット
- 多様性が生む選択の難しさ
- 基盤となる共通認識の枠組み
1-2 Symfonyの歴史
- symfony1の時代(2007〜2009年)
- PHP 5.3の時代(2009〜2011年)
- Symfony2の時代(2011年〜)
1-3 Symfonyの特徴
- 先進的で洗練された開発スタイル
- 名前空間とオートロード
- コンポーネントの利用
- パッケージの依存管理
- オブジェクト指向技術の活用と安定したアーキテクチャ
- MVC構成
- オブジェクト指向技術の活用
- バンドルシステム
- 長期的な利用
- 通常バージョンとLTS(長期サポート)バージョン
- 後方互換性
- どのバージョンを選ぶべきか
1-4 Symfonyについての情報源
- Symfony公式サイト
- 日本Symfonyユーザー会
- Symfonyのドキュメント
- スタック・オーバーフロー
1-5 まとめ
- チェックポイント
第2章 Symfonyの基礎
2-1 Symfonyアプリケーションとは
- 一般的なWebアプリケーションの動作
- HTTPカーネル
- カーネル
2-2 PHP環境の確認
- ビルトインWebサーバとは
2-3 Symfonyの準備
- Symfony Installerの準備
- Linux/Mac
- Windows
- インストーラの動作確認
- Symfony Installerでのデモアプリケーションの準備
- インストール後の動作確認
- Webインタフェースでの環境チェック
2-4 Symfonyのコンソールコマンド
- コマンドの実行
- コマンド名の省略入力
- コマンドの引数やオプションの確認(ヘルプ)
- ビルトインサーバによるSymfonyアプリケーションの起動
- ポート番号を指定したビルトインWebサーバの利用
- デバッグツールバーとプロファイラ
- デバッグツールバー
- prod環境,dev環境とは
- プロファイラ
- リクエストごとのプロファイル情報
2-5 Symfonyアプリケーションの構成要素と処理の流れ
- リクエスト/レスポンスとカーネル
- リクエスト
- カーネル
- レスポンス
- ルーティング
- ルーティング=マッピング
- 関連ファイルの確認
- デモアプリケーションのルートの例
- ルートの読み込み(config_dev.yml)
- dev環境用ルートの定義(routing_dev.yml)
- メインのルート定義(routing.yml)
- アノテーションによるルート定義(BlogController.php)
- コントローラ/アクション
- コントローラ/アクションの例
- テンプレート
- デモアプリケーションのテンプレートの例
- テンプレートエンジンが呼び出されるしくみ
- サービスコンテナ
- ドメインレイヤ
2-6 まとめ
- チェックポイント
- 本章で利用したバンドル
- 参考ドキュメント
第3章 アプリケーションの開発1 ページ作成の基本を身につける
3-1 アプリケーションの要件と開発の流れ
- 楽団Webサイト構築の最初の要件
- 開発の流れ
- Symfony Installerでのプロジェクトの準備
- 不要なファイルの削除
3-2 Symfonyにおけるページ作成の基礎
- トップページの作成
- コントローラの粒度
- ユースケースからのコントローラとアクションの決定
- コントローラの作成
- アクションの作成
- アノテーションのコメント開始はアスタリスク2つ
- コントローラ/アクションからテンプレートの決定
- コントローラとテンプレートの対応ルール
- アセットの配置方式
- テンプレートの作成
- アクションでテンプレートのレンダリング
- トップページの表示の確認
- キャッシュクリア
- ページ作成のまとめ
- 公演情報ページの作成
- 公演情報ページのコントローラとテンプレート
3-3 テンプレートの基礎
- テンプレートで利用できる機能の種類
- Twigの基本と変数の扱い
- トップページへ新着情報の埋め込み
- 配列やオブジェクトのプロパティ
- 公演情報ページの修正(配列化)
- 変数の中身をダンプ
- 繰り返し処理(for)
- Twigのfor構文の書式
- ループで使える特殊変数
- forによる公演情報ページのテンプレートの書き換え
- 条件分岐(if)
- Twigのif構文の書式
- ifによる公演情報ページの満席表示の書き換え
- リンクの作成(path)
- リンクを柔軟に扱うには
- URL生成機能としてのルーティングシステム
- 自動定義されるルートの名前の確認
- Twigのpath( )関数
- トップページから公演情報ページヘのリンクの作成
3-4 まとめ
- チェックポイント
- 本章で利用したバンドル
- 参考ドキュメント
第4章 アプリケーションの開発2 テンプレートの整理とフォーム
4-1 テンプレートの整理
- include
- include( )関数で適用する変数のセット
- render
- トップページへの新着ブログ記事リストの埋め込み
- テンプレート継承とブロック
- Webサイトの共通レイアウトファイルの作成
- CSS,JavaScriptファイルの配置
- アセットのバンドル配下での管理
- アセットをテンプレートから参照
- レイアウトテンプレートの準備
- 子テンプレートでレイアウトを継承する設定
- 親テンプレートのブロックの内容を子で再利用
- Standard Editionのbaseレイアウト
- 表示の確認
- テンプレートのまとめ
4-2 フォームの基本
- Symfonyにおけるフォーム処理の構造
- お問い合わせフォームの作成
- フォーム構築の2つのアプローチ
- in-placeでのフォーム構築
- 開発用の簡易フォーム表示
- フォームのクライアントサイドバリデーション
- フォームフィールドを個別に表示
- フォームの入力値の受け取り
- フォームのデータの取り出し
- フォームのまとめ
4-3 メール通知機能の作成
- メール送信用のコンフィギュレーション
- 開発環境用SMTPサーバと設定の切り替え
- メール本文テンプレートの準備
- メール送信処理の実装
- メール送信の確認
- メール機能のまとめ
4-4 まとめ
- チェックポイント
- 本章で利用したバンドル
- 参考ドキュメント
第5章 管理機能の開発1 データベースとの連携
5-1 Doctrineを使ったデータベース処理の基本
- エンティティとモデルの違い
- Doctrineがデータを扱うしくみ
- マッピング定義
- マッピング定義のフォーマット
5-2 お問い合わせ記録用のエンティティクラスの作成
- コマンドによるエンティティクラスの作成
- エンティティクラスのマッピング定義
- マッピング定義の修正
- マッピング定義からデータベーススキーマを更新
5-3 お問い合わせ内容のデータベースへの保存
- Doctrineによるエンティティの保存
- お問い合わせ内容の保存処理の実装
- 保存処理の動作確認
- フォームとエンティティの連携
5-4 ブログ記事一覧のデータベースからの読み込み
- ブログ記事エンティティとデータの準備
- Doctrineによるエンティティの読み込み
- 新着ブログ記事一覧表示処理の修正
5-5 まとめ
- チェックポイント
- 本章で利用したバンドル
- 参考ドキュメント
第6章 管理機能の開発2 フォーム入力チェックとユーザ認証の実装
6-1 フォームのバリデーション
- お問い合わせフォームのバリデーション定義
- バリデーションの確認
6-2 管理者用画面の実装
- Symfonyの認証とアクセス制御の基本
- 管理者用画面の基本部分の作成
- 管理者用画面へのBasic認証の設定
- PHP 5.5未満の環境でpassword_hash( )関数を使うには?
- 認証設定の動作確認
- お問い合わせ一覧の作成
- お問い合わせ編集機能の作成
- お問い合わせエンティティへの管理用フィールドの追加
- 複数のフォームから利用するバリデーションの動作確認
- バリデーショングループの設定
- Doctrine管理下エンティティの更新時の流れ
- ルートのパラメータ
- @ParamConverterアノテーションの使い方
- お問い合わせ編集画面のコントローラの実装
- 定義したルートの確認
- お問い合わせ編集画面のテンプレートの作成
- お問い合わせ検索機能の作成
- 検索メソッドはリポジトリにまとめる
- リポジトリのメソッドからコレクションオブジェクトを返す
6-3 まとめ
- チェックポイント
- 本章で利用したバンドル
- 参考ドキュメント
第7章 管理機能の拡張とAPIの開発
7-1 データフィクスチャ
- DoctrineFixturesBundleの準備
- お問い合わせ情報のフィクスチャの作成
- フィクスチャの読み込み
7-2 CSVダウンロード機能の作成
- League/Csvのインストール
- Symfonyのリクエストフォーマット対応
- CSVダウンロード機能の実装概要
- CSVダウンロード用にアクションを修正
- CSVをExcelで開けるようにするには
- CSVダウンロード用にテンプレートを修正
7-3 コマンドの作成
- コマンドの作成の基本
- 未処理お問い合わせ通知コマンドの作成
- 未処理お問い合わせ一覧取得メソッドの作成
- メールテンプレートの作成
- ルーティングのオプションによるホスト名の指定
- コマンドの実行確認
- コマンドのインタラクティブ化
- 特化したQuestionクラス
7-4 APIの開発
- JSON API開発のための準備
- 公演情報APIの作成
- 公演情報エンティティの作成
- 公演情報フィクスチャの準備
- 公演情報のJSON化の設定
- テストコマンドを作成してシリアライズ設定を確認
- ちょっとした確認用にテストコマンドを用意しておくと便利
- 公演情報APIエンドポイント用のコントローラの作成
- アクションの作成とルーティングの設定
- APIアクセスの確認
- handleView( )を暗黙的に実行
- ルート定義をアクションメソッド名から自動で決定
- APIアクセスの再確認
- APIドキュメントのための準備
- APIエンドポイントにドキュメントを追加
- APIドキュメントの確認
- APIのCORS対応
- CORSの動作確認
7-5 まとめ
- チェックポイント
- 本章で利用したバンドル/ライブラリ
- 参考ドキュメント
第8章 サービスコンテナを使った開発
8-1 サービスコンテナの基礎
- サービスとは
- サービスコンテナとは
- 機能拡張アプローチの統一
- サービスの構築方法の管理
- 依存性注入機構の利用
8-2 サービスの利用
- サービスコンテナに登録された情報の一覧
- コントローラでのサービスの利用
- コントローラ以外でのサービスの利用
8-3 独自のサービスの定義
- サービスの定義方法
- YAMLファイルに定義するための準備
- YAMLファイルでサービス定義
- サービス定義の確認
- サービスをアノテーションで定義するための準備
- アノテーションによるサービス定義
8-4 独自の設定値の作成
- コンフィギュレーションシステムとエクステンション機構
- 団員一覧ページの作成
- 団員情報クラスの作成
- 団員一覧データの定義
- 団員一覧用コンフィギュレーションの作成
- 団員一覧を読み込むエクステンションの作成
- 団員一覧ページのコントローラとテンプレートの作成
8-5 まとめ
- チェックポイント
- 本章で利用したバンドル
- 参考ドキュメント
第9章 テストの実装
9-1 テストのための準備
- PHPUnitのインストール
- Composerを使ったPHPUnitのインストールとバージョン管理
- テストの実行方法
- テストスイートの設定
- 不要なファンクショナルテストの削除
- 時間のかかるテストの省略
9-2 ユニットテスト
- ユニットテストの基本
- テスタビリティ
- テストクラスの作成
- テストケースの作成
- アサーションの記述
- テスト失敗の確認
- テスト駆動開発と継続的テスト
- やや複雑なクラスのユニットテスト
- モックオブジェクト
- 未処理お問い合わせ通知クラスのユニットテスト
- モックオブジェクトの準備
- モックオブジェクトを使ったテストケースの記述
9-3 ファンクショナルテスト
- ファンクショナルテストのための準備
- ファンクショナルテストの基本
- WebTestCase
- 擬似クライアント
- DomCrawler/CssSelector
- 新着ブログ記事一覧のフィクスチャ準備
- フィクスチャの読み込み
- ブログ記事一覧のテスト
9-4 まとめ
- チェックポイント
- 本章で利用したバンドル/ライブラリ
- 参考ドキュメント
Appendix1 Symfonyチートシート
A1-1 コンソールコマンド
A1-2 コントローラ
A1-3 テンプレート(twig)
A1-4 フォーム
A1-5 Doctrine
A1-6 テスト
Appendix2 開発環境の準備
A2-1 Composerの準備
- Composerを使ったSymfonyプロジェクトの準備
- Composerの実行がタイムアウトする場合は?
- 参考書籍