Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

symfonyの中を見る

symfonyの中を見る
by

Katsuhiro Ogawa

on 19 March 2010

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of symfonyの中を見る

symfonyの中を見る 自己紹介 小川 雄大(おがわ かつひろ) twitter:fivestr http://d.hatena.ne.jp/Fivestar アシアル株式会社 今回の内容 symfony全体のディレクトリ構成を把握する! symfonyのディレクトリ構成 action/ controller/ filter/ mailer/ storage/ vendor/
addon/ database/ form/ plugin/ task/ view/
autoload/ debug/ generator/ plugins/ test/ widget/
cache/ escaper/ helper/ request/ user/ yaml/
command/ event_dispatcher/ i18n/ response/ util/
config/ exception/ log/ routing/ validator/
symfonyの機能の多さは数あるPHPフレームワークの中でも随一です! これらの中身をざっくばらんに紹介していきます addon action autoload cache command config controller database debug escaper event_dispatcher exception filter form generator helper i18n log mailer plugin plugins request response routing storage task test user util validator vendor view yaml widget アクション関連のクラス ページャーなど クラスのオートロードを行うクラス キャッシュを行うためのクラス データベースを扱うための基本的なクラス コントローラクラス アプリケーションの設定クラスや、
設定ファイルを読み込むためのクラス、
設定ファイルのベースとなるファイル symfonyコマンドの制御を行うクラス Webデバッグツールバーなどのデバッグ情報を扱うクラス オブジェクトをラッピングしてエスケープ処理を行うためのクラス 様々な処理の中に、処理を組み込むためのクラス 例外クラス アプリケーションのフローを制御するクラス フォームクラス クラスなどの自動生成に関連するクラス テンプレート側で利用する便利な関数群 プラグインのインストールなどに関連するクラス SwiftMailerをsymfonyで扱うためのクラス ログ出力に関連するクラス 国際化関連のクラスやデータファイル symfonyがデフォルトで含んでいるプラグイン リクエストクラス レスポンスクラス ルーティングクラス アプリケーションにアクセスしてきたユーザを表すクラス ファンクショナルテストで利用するクラス symfonyコマンドから利用可能する処理の実態となるクラス セッションを管理するクラス 様々なユーティリティクラス フォーム用のバリデータクラス symfony以外のライブラリ ビュー出力に関するクラス YAMLファイルのローダー/ダンパー フォーム用のウィジェットクラス とりあえずsfPagerが入ってます symfonyではプロジェクトやアプリケーションのディレクトリの中に
lib というディレクトリが作成されるようになっています。 libディレクトリ内に クラス名.class.php という形式でファイルを置いておくと、自分でrequireしなくても
symfony側が自動的にクラスファイルを読み込んでくれます。 libディレクトリ以下には好きなようにディレクトリを作成できます。
sfAPCCache
sfEAcceleratorCache
sfFunctionCache
sfNoCache
sfXCacheCache
sfCache
sfFileCache
sfMemcacheCache
sfSQLiteCache
キャッシュはrouting、i18n、
viewで利用されます databases.ymlに記述した接続情報などを管理するクラス群です。
ここにあるクラスを意識して利用することはあまりないと思います。 default/
sfController
sfFrontWebController
sfWebController アクションを制御するコントローラクラスです。
アクション実行中に発生した例外は
sfWebControllerクラスが捕捉し、
エラー画面を出力します。 Configuration ConfigHandler sfProjectConfiguration sfApplicationConfiguration sfPluginConfiguration プロジェクトやアプリケーションの設定を行うクラスです。
ヘルパーの読み込みはsfApplicationConfigurationから
行います。 環境(prod/devなど)の情報、デバッグモードかどうか、
プロジェクトディレクトリのパスなどの情報を保持します。 設定ファイルを読み込んで処理を行うクラスです。 実際には設定ファイルを毎回読み込むことはせず、
一旦PHPファイルに変換します。
変換したファイルの出力先はcacheディレクトリです。 設定ファイル以外にも、運用環境では
コアクラスを1つのファイルにまとめて
キャッシュする、
sfCompileConfigHandlerというクラスなども
あります。 この他にも、app.ymlやsettings.ymlの情報を保持するsfConfigクラスや、
このディレクトリの中にあるconfigディレクトリには
設定ファイルのベース情報が入っています。 それ以外は特に見る必要はないと思います。 sfAction
sfActionStack
sfActionStackEntry
sfActions
sfComponent
sfComponents sfActionの親クラスがsfComponentです。 forwardを行った際などは新しいアクションクラスの
インスタンスが生成されますが、それらは
sfActionStackに格納されます。 コマンドの引数などの制御や、
コマンドの出力結果に色をつけるなどを
行うクラスが含まれています。 実際のコマンドの内容はtaskになります。 開発環境で右上に出てくる、
Webデバッグツールバーを制御する
クラスが含まれています。 Webデバッグツールバー上に出てくる
ログや処理時間などの情報はそれぞれ
sfWebDebugPanelというクラスになります。 sfOutputEscaper
sfOutputEscaperGetterDecorator
sfOutputEscaperObjectDecorator
sfOutputEscaperArrayDecorator
sfOutputEscaperIteratorDecorator
sfOutputEscaperSafe symfonyではテンプレートに変数を渡す際に、
これらのEscaperオブジェクトでラッピングされます。
そして、最終的な出力結果に対してhtmlspecialcharsなどの
エスケープ処理を行ってくれるようになります。
全ての値がデフォルトでエスケープされている感覚で
変数を利用することが可能になっています。 エスケープしたくない場合、これらのオブジェクトにある
getRawValue()メソッドを実行することで、
元々のオブジェクトが取得可能です。 sfOutputEscaperSafeはエスケープ対象に
しないようにするためのオブジェクトです。
参考:
http://d.hatena.ne.jp/Fivestar/20090722/1248227287 http://blog.asial.co.jp/670 話すと長くなるのですが... オブザーバパターンの実装で、
様々な箇所で、好きなコールバック関数を
実行できるようにするための仕組みです。 超重要です。 symfonyの例外クラスがまとまっています。
実際にはSPL例外が利用されることも多いです。 また、dataというディレクトリに
例外発生時に表示するテンプレートが
格納されています。 sfBasicSecurityFilter
sfCacheFilter
sfCommonFilter
sfExecutionFilter
sfFilter
sfFilterChain
sfRenderingFilter アプリケーションが呼び出されると、
これらのフィルターが順番に実行されます。 アクションの読み込みはsfExecutionFilterで
行われます。 これらのフィルターはsfFilterChainによって
管理されています。 フィルターは設定ファイルで追加や順番変更が
可能です。 フォームクラスが含まれています。 モデルなどの自動生成を行うためのクラスです。
Propelでモデルを生成するときなどに利用されているようです。 AssetHelper
DateHelper
EscapingHelper
I18NHelper
NumberHelper
TagHelper
UrlHelper
CacheHelper
DebugHelper
HelperHelper
JavascriptBaseHelper
PartialHelper
TextHelper ヘルパーは関数群です。
頻繁に利用するのは
・UrlHelper
・AssetHelper
・PartialHelper
です。基本的にこれらは最初から
読み込まれるようになっています。 プラグインに関連するコマンドを実行した際に
制御を行うクラスが格納されています。 symfony 1.3/1.4ではSwiftMailerという
メール送信ライブラリが含まれています。
このSwiftMailerをsymfonyに合わせて
少しカスタマイズしたクラスが
sfMailerです。 SwiftMailer本体はvendorに含まれています。 sfAggregateLogger
sfFileLogger
sfLoggerInterface
sfNoLogger
sfVarLogger
sfConsoleLogger
sfLogger
sfLoggerWrapper
sfStreamLogger
sfWebDebugLogger 様々なログ出力に関するクラスです。
特別なログ出力したい場合は、
sfLoggerInterfaceを実装したクラスを
自前で作ることも可能です。 国際化に関するクラスです。 クラス以外にも、基本的な言語の
データが含まれています。 symfony 1.4では
DoctrineとPropelを扱うプラグインが
含まれています。

これにより、好きなORMを選択して
利用可能です。 リクエストを扱うクラスです。
$_SERVERなどもこのリクエストクラスから
参照します。 リクエストと対をなす、レスポンスクラスです。 レスポンスとして返すヘッダー情報などは
このレスポンスクラスに指定します。
HTTPのステータスコードなども保持しています。 Cookieもこのクラスに指定します。 http://blog.asial.co.jp/535 ルーティングに関連するクラスです。
アプリケーションにアクセスしている
ユーザを表すオブジェクトです。
ユーザオブジェクトの内部にはセッションを
管理するstorageクラスを持っています。 この他にも、権限や認証の設定などを
格納することが可能です。 ファンクショナルテストとは、
アクションのテストを自動化するための仕組みです。 ブラウザをエミュレーションするようなイメージです。 テストを記述するための様々なクラスが
格納されています。 symfonyコマンドを実行する際の
様々な処理の実態となるクラスです。 sfTaskクラスを継承して自前のタスクを
作ることも可能です。
これのためのgenerate:taskというタスクが
用意されています。 セッションを管理するクラスです。
MySQLなどを利用することも可能です。
これらはインスタンス化されたのち、
userクラスの内部に渡されます。 sfBrowser
sfCallable
sfContext
sfFinder
sfNamespacedParameterHolder
sfToolkit
sfBrowserBase
sfClassManipulator
sfDomCssSelector
sfInflector
sfParameterHolder 他のディレクトリに属さない
ユーティリティクラスが
格納されています。 とても重要なクラス、 sfContext が含まれています。 フォームで利用するバリデータクラスです。 lime
swiftmailer lime: Unitテスティング swiftmailer: メール送信 sfPHPView
sfPartialView
sfView
sfViewCacheManager
sfViewParameterHolder アクションからテンプレートを出力する際の
制御を行うクラスです。
通常、sfPHPViewが利用されます。
変数をescaperでラッピングする処理なども
ここで行われます。 YAMLファイルのロードや
ダンプを行うクラスです。 フォームで利用するウィジェットです。 今回は説明しませんでしたが、これらのクラス群を
うまく繋いでいるのがevent_dispatcherです。
ソースを読んでいて、$this->dispatcherという変数が
あった場合は大体event_dispatcherを利用しています。 event_dispatcherを理解することで、
symfonyの理解を深め、symfonyでできることが
ぐっと増えます。 ご清聴ありがとうございました アシアル株式会社 小川雄大
http://d.hatena.ne.jp/Fivestar/
Full transcript