23日目: 別の視点から symfony を見る
今日で symfony のすばらしい世界の旅行は最後です。23日間、デザインパターンから強力な組み込み機能までの具体例で symfony を学びました。あなたはまだ symfony マスターではありませんが、自信をもって symfony アプリケーションの開発を始めるために必要な知識はすべてあります。
Jobeet チュートリアルのまとめとして、別の視点からフレームワークを見てみましょう。Jobeet は忘れてこの3週間に学んだすべての機能を思い出しましょう。
symfony とは?
symfony~フレームワーク~はフルスタックの MVC フレームワーク (Model、View、Controller) を形成する疎結合されたサブフレームワークの集まりです。
コーディングを始める前に、symfony の歴史と哲学を読む時間をとります。
それから、フレームワークの前提要件を確認し設定を検証するためにcheck_configuration.php
スクリプトを使います。
最後に、symfony をインストールします。しばらくしてから symfony の最新バージョンにアップグレードします。
symfony はデプロイ作業を楽にするツールも提供します。
~Model~
symfony の Model 部分の作業は Propel ORM Doctrine ORM の助けを借りて行うことができます。 データベースの記述に基づいて、オブジェクト、フォームとフィルタ用のクラスが生成されます。##ORM## はデータベースのテーブルを作成するために使用される SQL 文を生成します。
データベースのコンフィギュレーションはタスクもしくは設定ファイルを編集することで行うことができます。コンフィギュレーションに加えて、フィクスチャファイルのおかげで、初期データを投入することもできます。これらのファイルを動的なものにすることもできます。
Propel のオブジェクトも簡単に国際化できます。 Doctrine のオブジェクトも簡単に国際化できます。
~View~
デフォルトでは、MVC アーキテクチャの View レイヤーはテンプレートとしてプレーンな PHP ファイルを使います。
URL もしくはリンクを作成するなどの頻繁に行われるタスクのためにテンプレートはヘルパーを使います。
ページのヘッダーとフッターを抽出するためにテンプレートはレイアウトによってデコレートされます。 ビューの再利用性を高めるために、スロット、パーシャルとコンポーネントを定義できます。
開発を加速するために、ページ全体、アクションだけ、もしくはパーシャルもしくはコンポーネントだけをキャッシュするためにキャッシュサブフレームワークを利用できます。手動でキャッシュを削除することもできます。
~Controller~
Controller の部分はフロントコントローラとアクションによって管理されます。
タスクはシンプルなモジュール、CRUD モジュールを作成する、もしくはモデルクラス用に十分に実用的な admin モジュールを生成するために使うことができます。
admin モジュールによってコードをまったく書かなくても十分な機能をもつアプリケーションを作ることができます。
Web サイトの技術的な実装を抽出するために、symfony はプリティ URL を生成するルーティングサブフレームワークを利用します。Web サービスの実装を簡単にするために、symfony は複数のフォーマットをネイティブでサポートします。独自フォーマットを作ることもできます。
アクションを別のアクションにフォワード、もしくはリダイレクトできます。
~コンフィギュレーション~
symfony フレームワークでは異なる~環境~に対して異なる~コンフィギュレーション~を用意するのが楽です。環境はコンフィギュレーションの集まりで開発もしくは運用サーバーで異なるふるまいを可能にします。新しい環境を作ることもできます。
symfony の設定ファイルは異なるレベルで定義可能でこれらの大部分が環境を認識します:
app.yml
cache.yml
databases.yml
factories.yml
generator.yml
routing.yml
schema.yml
security.yml
settings.yml
view.yml
大部分の設定ファイルは YAML フォーマットを使います。
デフォルトのディレクトリ構造を利用してレイヤーごとにアプリケーションをわける代わりに、これらを機能ごとにわけて、プラグインにまとめることができます。デフォルトのディレクトリ構造に関して、ニーズに応じてカスタマイズすることもできます。
~デバッグ~
ロギングからWebデバッグツールバー、 ロギングからWebデバッグツールバー、 重大な例外まで、symfony は開発者が問題を速くデバッグするために便利で助けになるツールをたくさん提供します。
symfony の主要なオブジェクト
symfony フレームワークは Web プロジェクトで頻度の高いニーズを抽出するコアオブジェクトを精選して提供します: リクエスト、レスポンス、ユーザー、ロギング、ルーティングとメーラー、とビューキャッシュマネージャです。
これらのコアオブジェクトは sfContext
オブジェクトによって管理され、ファクトリをとおしてこれらを設定できます。
ユーザーオブジェクトはユーザーの認証、認可、flash とセッションでシリアライズされる属性を管理します。
~セキュリティ~
symfony フレームワークは XSS と CSRF に対して組み込みの防御機能を持ちます。これらの設定はコマンドラインから、もしくは設定ファイルを編集することで設定できます。
フォームフレームワークは組み込みのセキュリティ機能も提供します。
~フォーム~
Web 開発者にとってフォームの管理がもっとも退屈なタスクの1つなので、symfony はフォームサブフレームワークを提供します。フォームフレームワークはたくさんのウィジェットとバリデータを搭載しています。
フォームサブフレームワークの強みの1つはテンプレートがとても簡単にカスタマイズ可能であることです。
ORM## を利用する場合、フォームフレームワークはモデルに基づいて
フォームとフィルタを生成する方法も簡単になります。 フォームとフィルタを生成する方法も簡単になります。
国際化とローカライゼーション
ICU 標準のおかげで、国際化とローカライゼーションは symfony によってサポートされます。ユーザーカルチャ はユーザーの言語と国を決定します。これはユーザー自身もしくは URL に埋め込むことで定義できます。
テスト
ユニットテストのために使われる lime ライブラリはたくさんのテスト用のメソッドを提供します。
専用のデータベースと専用のフィクスチャから Propel オブジェクトもテストできます。 Doctrine オブジェクトもテストできます。
機能テストは sfFunctionalTest
クラスで記述され、ブラウザシミュレータを使い、symfony はテスターをとおして コアオブジェクトのイントロスペクトができます。リクエストオブジェクト、レスポンスオブジェクト、ユーザーオブジェクト、現在のフォームオブジェクト、キャッシュレイヤーと Propel オブジェクト Doctrine オブジェクト のためのテスターが存在します。
ユニットテストに関して、機能テストは1つづつもしくはまとめて実行できます。
すべてのテストを一緒に実行することもできます。
プラグイン
symfony フレームワークは Web アプリケーションのための基盤のみを提供しより多くの機能を追加するためにプラグインを頼りにします。このチュートリアルでは、sfGuardPlugin
、sfFormExtraPlugin
、sfTaskExtraPlugin
を話しました。
インストールの後でプラグインをアクティベートしなければなりません。
プラグインは symfony の公式サイトに寄付する最高の方法です。
~タスク~
symfony CLI はたくさんのタスクを提供し、もっとも便利なものはこのチュートリアルで検討してきました:
app:routes
cache:clear
configure:database
generate:project
generate:app
generate:module
help
i18n:extract
list
plugin:install
plugin:publish-assets
project:deploy
propel:build --all
propel:build --all -and-load
propel:build-forms
doctrine:build --all
doctrine:build --all --and-load
doctrine:build --forms
propel:build-model
propel:build-sql
propel:data-load
propel:generate-admin
propel:generate-module
propel:insert-sql
test:all
test:coverage
test:functional
test:unit
独自のタスク も作ることができます。
またお会いしましょう
練習して学ぶ
symfony フレームワークには、どのソフトウェアのピースと同じように、学習曲線があります。学習プロセスにおいて、最初のステップはこの本のように実際の例から学ぶことです。2番目のステップは練習です。練習に勝るものはありません。
それが今日始められることです。ToDo リストマネージャー、シンプルなブログ、時間もしくは通貨コンバーター、などなんらかの価値を提供する Web プロジェクトを考えてください。1つ選び今日知っている知識で実装を始めてください。異なるオプションを学ぶためにタスクのヘルプメッセージを使い、symfony によって生成されるコードを眺め、Eclipse のような、PHP の自動入力補完があるテキストエディタを使います。symfonyによって提供されるすべてのコンフィギュレーションを見るためにリファレンスガイドを参照します。
symfony をより学ぶために自由にできるすべての無料の素材を楽しんでください。
コミュニティ
チュートリアルが終わる前に、最後に symfony に関して話したいことが1つあります。symfony はたくさんのすばらしい機能と無料のドキュメントを提供します。しかし、オープンソースがもつもっとも貴重な資産の1つはコミュニティです。そして symfony にはもっとも面白くて活発なコミュニティの1つがあります。プロジェクトで symfony を使い始めるのであれば、symfony のコミュニティに参加することを考えてください:
- ユーザーのメーリングリストを購読する
- freenode の #symfony IRC チャンネルに来てチャットをする
ORM
インデックス
Document Index
関連ページリスト
Related Pages
1日目: プロジェクトを始める
2日目: プロジェクト
3日目: ~データモデル~
4日目: Controller と View
5日目: ルーティング
6日目: モデルの詳細
7日目: カテゴリページで遊ぶ
8日目: ユニットテスト
9日: 機能テスト
10日目: フォーム
11日目: フォームをテストする
12日目: アドミンジェネレータ
13日目: ユーザー
14日目: フィード
15日目: Web サービス
16日目: ~メーラー~
17日目: 検索
18日目: ~AJAX~
19日目: 国際化とローカライゼーション
20日目: プラグイン
21日目: キャッシュ
22日目: デプロイ
23日目: 別の視点から symfony を見る
Appendix A - License
謝辞
![](/images/ico_docu_side.png)
日本語ドキュメント
Japanese Documents
2011/01/18 Chapter 17 - Extending Symfony
2011/01/18 The generator.yml Configuration File
2011/01/18 Les tâches
2011/01/18 Emails
2010/11/26 blogチュートリアル(8) ビューの作成
リリース情報
Release Information
- 2.0 : 2.0.15(2011/05/30)
Symfony2日本語ドキュメント - 1.4 : 1.4.18(2012/05/30)
Changelog
![Symfony2 に関する情報(公式)](/r/images/images/symfony-reloaded.png)
![Books on symfony](/r/images/images/books.png)