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 部分の作業は
データベースのコンフィギュレーションはタスクもしくは設定ファイルを編集することで行うことができます。コンフィギュレーションに加えて、フィクスチャファイルのおかげで、初期データを投入することもできます。これらのファイルを動的なものにすることもできます。
~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 フォーマットを使います。
デフォルトのディレクトリ構造を利用してレイヤーごとにアプリケーションをわける代わりに、これらを機能ごとにわけて、プラグインにまとめることができます。デフォルトのディレクトリ構造に関して、ニーズに応じてカスタマイズすることもできます。
~デバッグ~
symfony の主要なオブジェクト
symfony フレームワークは Web プロジェクトで頻度の高いニーズを抽出するコアオブジェクトを精選して提供します: リクエスト、レスポンス、ユーザー、ロギング、ルーティングとメーラー、とビューキャッシュマネージャです。
これらのコアオブジェクトは sfContext
オブジェクトによって管理され、ファクトリをとおしてこれらを設定できます。
ユーザーオブジェクトはユーザーの認証、認可、flash とセッションでシリアライズされる属性を管理します。
~セキュリティ~
symfony フレームワークは XSS と CSRF に対して組み込みの防御機能を持ちます。これらの設定はコマンドラインから、もしくは設定ファイルを編集することで設定できます。
フォームフレームワークは組み込みのセキュリティ機能も提供します。
~フォーム~
Web 開発者にとってフォームの管理がもっとも退屈なタスクの1つなので、symfony はフォームサブフレームワークを提供します。フォームフレームワークはたくさんのウィジェットとバリデータを搭載しています。
フォームサブフレームワークの強みの1つはテンプレートがとても簡単にカスタマイズ可能であることです。
ORM## を利用する場合、フォームフレームワークはモデルに基づいて
国際化とローカライゼーション
ICU 標準のおかげで、国際化とローカライゼーションは symfony によってサポートされます。ユーザーカルチャ はユーザーの言語と国を決定します。これはユーザー自身もしくは URL に埋め込むことで定義できます。
テスト
ユニットテストのために使われる lime ライブラリはたくさんのテスト用のメソッドを提供します。
専用のデータベースと専用のフィクスチャから
機能テストは
sfFunctionalTest
クラスで記述され、ブラウザシミュレータを使い、symfony はテスターをとおして
コアオブジェクトのイントロスペクトができます。リクエストオブジェクト、レスポンスオブジェクト、ユーザーオブジェクト、現在のフォームオブジェクト、キャッシュレイヤーと
ユニットテストに関して、機能テストは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 のコミュニティに参加することを考えてください:
- ユーザーのメーリングリストを購読する
- 公式ブログのフィードを購読する
- symfony の planet フィードを購読する
- freenode の #symfony IRC チャンネルに来てチャットをする
ORM