基本からしっかり学ぶシリーズ基本からしっかり学ぶ
Symfony2入門

[表紙]基本からしっかり学ぶ Symfony2入門

B5変形判/336ページ

定価(本体3,200円+税)

ISBN 978-4-7741-7803-5

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

PHPフレームワークSymfonyによるWebサービス開発を解説した書籍です。最初にSymfonyのしくみを理解していき,あるオーケストラのWebサイトの作成を例に,手を動かしながらフレームワークの基本機能や開発時に必要なポイントなどについて解説しています。各章末にチェックポイントを設け,これらを解きながら読み進めることで本書の内容を無理なく理解できます。また付録では,初心者がつまずきやすい環境構築の手順やSymfonyのコマンドなども扱っており,この1冊でSymfonyのすべてを知ることができます。

こんな方におすすめ

  • これからフレームワークを使い始めたい初級者
  • Symfonyを使ってWebサービスを構築したい中級者

目次

まえがき

第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の実行がタイムアウトする場合は?
  • 参考書籍

Appendix3 チェックポイントの回答例

あとがき

著者プロフィール

後藤秀宣(ごとうひでのり)

日本Symfonyユーザー会メンバー,PHPメンターズ メンター。技術評論社 WEB+DB PRESS 連載『巨人の肩からPHP』執筆(全10 回)。本書全体にわたって企画,執筆を担当。田舎の山奥の古民家で,妻,娘,犬,猫と暮らしながら,ソフトウェアの設計・開発に明け暮れている。

Twitter:@hidenorigoto


金本貴志(かねもとたかし)

2008年富士通株式会社に入社後,携帯電話端末のソフトウェア開発に従事。2012年より株式会社カルテットコミュニケーションズCTO。リスティング広告運用ツールサービス「Lisket(http://lisket.jp/)」を立ち上げ,フレームワークにSymfonyを採用して現在も開発・運営に注力している。本書第7章を担当。

Twitter:@qckanemoto