サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
猛暑に注意を
docs.symfony.gr.jp
アーキテクチャ¶ 最初の 3 つの章を読み終えてこの章へたどり着いたみなさん、お疲れ様でした。 ここまでで学んだ内容は、すぐにあなたの役に立ちます。 ただし、この 3 つの章では、フレームワークのアーキテクチャーについて深くは学びませんでした。 Symfony2 のアーキテクチャは、さまざまなフレームワークの中でも際立っています。 この章では Symfony2 のアーキテクチャについて学びます。 ディレクトリ構造について¶ Symfony2 アプリケーション のディレクトリ構造の制限は緩く柔軟ですが、Standard Edition ディストリビューションでは、Symfony2 アプリケーションで典型的に使用するディレクトリの推奨構成が採用されています。 app/: アプリケーションのコンフィギュレーション src/: プロジェクトの PHP コード vendor/: サードパーティの依存
コーディング規約¶ Symfony2 にソースコードを提供する場合は、以下のコーディング規約に従ってください。コーディング規約を最も分かりやすい短い文にまとめると、既存の Symfony2 のソースコードの真似をするということです。 構文¶ ショートタグを使ってはなりません(<?) クラスファイルの末尾に、通常の PHP ブロックの終了タグ(?>)を付けてはなりません インデントには、空白4つを使い、タブを使ってはなりません 行の終端の改行には LF(0x0A)を使います カンマの後には空白を1つ開けます 開き丸括弧の後と閉じ丸括弧の前には、スペースを開けてはなりません 演算子(==、&&、...)の前後には空白を1つ開けます 制御構文のキーワード(if、else、for、while、...)と開き丸括弧との間には、空白を1つ開けます return 文の前には空行を1行開けます 行末に余分
ロギングで Monolog を使用する方法¶ Monolog は、 Symfony2 で採用している ロギングを行うライブラリです。 Monolog は、 Python の LogBook ライブラリにインスパイアされて作成されました。 使用方法¶ Monolog では、ロガーはそれぞれのロギングチャネルを定義します。そのチャネルは、多くのログを書くハンドラを持っています(ハンドラは、共有されます)。 ベースとなるハンドラは、 StreamHandler で、ストリーム内でログを書きます。デフォルトでは、本番環境では、 app/logs/prod.log へ、開発環境では、 app/logs/dev.log になります。 Monolog は、 FingersCrossedHandler と呼ばれる本番環境でのロギングのための、強力なビルトインされたハンドラも付属しています。このハンドラを使
Symfony2 でのページ作成¶ Symfony2 で新しいページを作成するには以下の2つの簡単なステップから構成されます。 ルート(route)の作成: ルートは作成するページへの URL(例えば about)を定義し、 Symfony2 が実行すべきコントローラ(PHP 関数)を特定します。 やってきたリクエストの URL がルートパターンにマッチするときに使われます。 コントローラの作成: コントローラはやってきたリクエストを取り込んで、 ユーザーに返却する Response オブジェクトに変換するような PHP 関数です。 このシンプルな方法は、ウェブの仕組みと一致していてとても美しいと言えます。 ウェブ上のあらゆる相互通信は HTTP リクエストによって開始されます。 アプリケーションの動作は、リクエストを読み取って適切な HTTP レスポンスを返すだけです。 Symfony2
フォーム¶ HTML のフォームを扱うことは多くの Web アプリケーションで行うことですが、考慮することが多く扱いが難しい部分の1つです。 Symfony2 の Form コンポーネントを活用すると、フォームを簡単に扱うことができるようになります。 本章では、複雑なフォームを1から作成を行う過程を通じて、フォームライブラリの重要な機能について学びます。 Note Symfony の Form コンポーネントは単独で利用できるように設計されています。 コンポーネントについて詳しく知りたい方は、Github の Symfony2 Form Component を見てください。 シンプルなフォームの作成¶ フォームを解説するために、商品を表示する簡単なストアアプリケーションを作成していきましょう。 このアプリケーションには、ユーザーが商品の作成や編集を行うためのフォームを作成する必要があります
ルーティング¶ まじめな WEB アプリケーションであれば、美しい URL というのは絶対に必要になります。index.php?article_id=57 のような醜い URL は捨て去って、/read/intro-to-symfony のような URL にしましょう、ということです。 加えて、柔軟性を得られるということがもっと重要な点です。例えば、とあるページの URL を、/blog から /news に変更する場合はどうしたらよいでしょうか?どれだけのリンクを探し出して、そして変更する必要があるでしょうか。Symfony のルータを使えば、変更は簡単です。 Symfony2 ルータでは、クリエティブな URL をいくつも定義できて、それらを、アプリケーション内の異なる場所にマップすることができます。この章が終わる頃には、次のようなことが可能になっているでしょう。 複雑なルートで、コン
セキュリティ¶ セキュリティは、特定のリソースに対するアクセス権限を持たないユーザからのアクセスを制御するために、2つのステップを行います。 まず第一のステップは、セキュリティシステムが、ユーザ認証で送られてくる情報から、そのユーザが誰かを識別することです。この処理は認証と呼ばれ、そのユーザが誰であるかを探そうとします。 そしてユーザを特定した後に、第二のステップとして、アクセスしようとしているリソースに対して、そのユーザがアクセス可能かどうかを判断します。この処理は承認と呼ばれ、そのユーザがある特定のアクションを行うことのできる権限を保持しているかどうかをチェックします。 もっとも良い学習方法はサンプルを見ることですので、早速始めましょう。 基本的なサンプル: HTTP 認証¶ セキュリティコンポーネントは、アプリケーションのコンフィギュレーションで設定できます。実際、最も標準的なセキュ
バンドルの継承を使って既存のバンドルのパーツを上書きする方法¶ サードパーティのバンドルを使用する際に遭遇する問題として、サードパーティのバンドルのファイルを自分の開発するバンドル内でオーバーライドする必要があるときがあります。 Symfony はコントローラ、テンプレート、翻訳、その他バンドルの Resources/ ディレクトリ内のファイルをオーバーライドする便利な方法を用意しています。 例として、 FOSUserBundle をインストールして、ベーステンプレートである layout.html.twig と、コントローラを1つオーバーライドしてみます。また、独自に AcmeUserBundle を開発しており、ファイルをオーバーライドすることにします。まず、 FOSUserBundle をあなたのバンドル AcmeUserBundle の “parent” として登録してください。
サービスにタグを使用する方法¶ Symfony2 のコアサービスには、どのサービスが、ロードされるべきか、イベントに通知されるべきか、何か特別な方法で処理すべきか、といったことを決めるためのタグに依存しているものがあります。例えば、 Twig は twig.extension というタグを使用し、追加のエクステンションをロードしています。 これらのタグは、あなたの開発するバンドルにも使用することができます。例えば、あなたのサービスが何かのコレクションを処理したり、”チェーン” を実装して、成功するまで代替戦略を試みたりするときなどです。この記事では、 \Swift_Transport を実装するクラスのコレクションである “transport chain” の例を使用します。このチェーンを使用して、成功するまで Swiftmailer がいくつかのトランスポートの使用を試みます。この内容は
Doctrine でファイルアップロードを扱う方法¶ Doctrine のエンティティでファイルアップロードを扱う方法は、他のファイルアップロードと違いはありません。つまり、同じようにフォーム情報を受け取った後にコントローラでファイルを移動できます。この例は、 file type reference ページを見て、その方法を学ぶことができます。 望むのであれば、ファイルアップロードをエンティティのライフサイクルにも統合することができます(作成、変更、削除など)。エンティティが Doctrine から作成、変更、削除がされれば、ファイルアップロードや削除の処理が自動的に行われます(コントローラで何もする必要はありません)。 これを実際に動作させるために、多くの細かいことに注意をする必要がありますが、それについては、このクックブックの記事で説明します。 // src/Acme/DemoBund
ビュー¶ チュートリアルの 2 つめのパートでは、Symfony2 のテンプレートエンジンである Twig に焦点をあてて学習します。 Twig は柔軟で高速、かつセキュアな PHP 用のテンプレートエンジンです。 Twig を使うとテンプレートの可読性が向上し、簡潔になります。 ですので、Web デザイナーにとっても扱いやすくなります。 Note Twig の代わりに PHP 形式のテンプレートを使うこともできます。 どちらのテンプレートエンジンも Symfony2 でネイティブにサポートされています。
コンソール/コマンドラインツールとしてのコマンドの作成方法¶ Symfony2 はコマンドラインツールとしてのコマンドを作成することのできるコンソールコンポーネントが付いてきます。コンソールコマンドは、cronジョブやインポートなどのバッチジョブなどの自動更新タスクに使用されます。 ベーシックなコマンドの作成¶ Symfony2 において、コンソールコマンドを自動的に使用可能にするには、 Command ディレクトリをバンドル内に作成し、その中に提供したいコマンドを実装した Command.php という接尾辞を追加した PHP ファイルを作成してください。例えば、 Symfony Standard Edition に含まれている AcmeDemoBundle を拡張し、コマンドラインから挨拶をしようとするならば、次のように GreetCommand.php ファイルを作成してください。
既にあるデータベースからエンティティを生成する方法¶ データベースを使用する新しいプロジェクトで、開発を始める際には、一般的に2つのシチュエーションが考えられます。ほとんどの場合、データベースのモデルは設計され、スクラッチで作成されます。しかし、毎回そうとは限りません。既にあるデータベースを使用しており、モデルを変更できない場合から始めるときもあります。幸運なことに、 Doctrine の多くの付属のツールが既存のデータベースからモデルクラスを生成するのを助けてくれます。 Note Doctrine tools documentation のドキュメントにあるように、リバースエンジニアリングは、プロジェクトを始める際に一度だけ行うものです。 Doctrine は、フィールド、インデックス、外部キー制約に基づく必須なマッピング情報の全てを変換することはできません。 Doctrine は逆のア
IPアドレスのブラックリストの独自 Voter の実装方法¶ Symfony2 のセキュリティコンポーネントは、ユーザ認証のための複数のレイヤーを用意しています。 voter と呼ばれるレイヤーは、その1つです。 voter はユーザがアプリケーションに接続できる権利があるかのチェックを行うクラスです。例えば、 Symfony2 は、ユーザが完全に認証されているか、また、必要な権限を保持しているかといったことをチェックするレイヤーを提供します。 フレームワークによる処理ではなく、特定のケースを処理するためのカスタム化された voter が役に立つこともあります。このセクションでは、 IP アドレスに基づきユーザをブラックリストに入れるための voter の作り方を学びましょう Voter インタフェース¶ カスタム Voter は、次の3つのメソッドを必要とする Symfony\Compo
ClassLoaderコンポーネント¶ ClassLoaderコンポーネントは、標準PHP規約に従っているプロジェクトのクラスを自動的に読みこみます。 未定のクラスを使用すると常に、PHP は、クラスのオートローディングのメカニズムを使用して、クラスが定義されているファイルをロードしようとします。Symfony2 は、”universal autoloader” を提供しており、次のいずれかの慣習に従って実装されたファイルからクラスを読み込むことができます。 PHP 5.3 のネームスペースとクラス名による、技術的な相互運用標準(PSR-0標準) PEAR のクラスの命名規則 あなたのクラスとサードパーティのライブラリが、この標準に従っていれば、Symfony2 のオートローダーのみで全て解決できます。 インストール¶ ClassLoaderコンポーネントをインストールする方法は何通りもあ
フォームのレンダリングのカスタマイズ方法¶ Symfony は、フォームのレンダリングをカスタマイズする方法をいくつか用意しています。この記事では、テンプレートエンジンに Twig, PHP のどちらを使用しても、最小の努力で全てのフォームのパーツをカスタマイズする方法を学びます。 フォームレンダリングの基本¶ 次のように form_row を使用することで、フォームフィールドのラベル、エラー、 HTML ウィジェットを簡単に表示することができるのを覚えてますでしょうか?
Note この記事は Symfony2 コンポーネントでフレームワークをつくる方法を説明した連載記事の一部です: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 Symfony2 は単体で独立していて、疎結合され、凝縮された PHP コンポーネントの集まりで、Web 開発の共通の問題を解決します。 これらの低水準のコンポーネントに取り組む代わりに、フルスタックフレームワークの Symfony2 をすぐに使い始めることができます。これは先ほどあげた Symfony2 のコンポーネントがもとになっています。もしくはまったくあなた独自のフレームワークを作ることもできます。この連載は後者に関するものです。 なぜあなたは独自のフレームワークを作りたいのでしょうか?¶ まず第一に、なぜ独自のフレームワークを作りたいのでしょうか?周りを見回すと、誰もが車輪を再発明することはよ
データベースからセキュリティユーザをロードする方法(エンティティプロバイダ)¶ Symfony の最もスマートツールの1つは、セキュリティレイヤーです。セキュリティレイヤーは、認証と承認のプロセスを処理します。内部的の動作を理解することは難しそうに見えます。しかし、セキュリティシステムはとても柔軟で、アクティブディレクトリ、OAuth認証、データベース認証などいろんな認証を統合することができるようになっています。 イントロダクション¶ この記事では、 Doctrine のエンティティクラスによるデータベーステーブルに対するユーザ認証にフォーカスを当ててみます。このレシピの内容は、3つに別れています。まず第1のパートでは、 Doctrine User エンティティクラスを設計して、 Symfony のセキュリティレイヤーで利用可能にすることに関して説明します。第2のパートでは、 Doctri
Symfony のインストールと設定¶ この章では、Symfony をインストールする方法について解説します。 Symfony では「ディストリビューション」が提供されています。 ディストリビューションとは入門者向けの Symfony プロジェクトファイル一式で、これをダウンロードすればすぐに開発を始められます。 Tip ソースコード管理システムの元でプロジェクトを新規作成し、ソースコード管理システムに登録するベストプラクティスを知りたい方は、この章のソースコード管理システムで管理するにはの節を参照してください。
“Remember Me” ログイン機能の追加方法¶ ユーザが認証されると、通常はセッションにその信用証明書(credential)が格納されます。これは、セッションが終了したら、ユーザは、ログアウトされたことになり、次回アプリケーションにアクセスをした際に、再びログインをしなければならないということを意味します。あなたは remember_me ファイアーウォールオプションのクッキーを使用して、通常のセッションよりも長くログイン状態を保つことができる選択肢を、ユーザに対し与えることができます。このファイアーウォールでは、クッキー情報を暗号化するために使われるシークレットキーを設定する必要があります。また、その他のデフォルト値を持ったオプションの値は次の通りです: # app/config/security.yml firewalls: main: remember_me: key: aS
エラーメールを送る Monolog の設定方法¶ Monolog は、アプリケーションでエラーが起きた際にメールを送信するように設定することができます。あまりにも多くのメールを受け取らないようにするために、コンフィギュレーションで少しネストされたハンドラが必要になります。次のようになりますが、最初は複雑に見えますがハンドラ1つずつを見ていけば、とても簡単です。 # app/config/config.yml monolog: handlers: mail: type: fingers_crossed action_level: critical handler: buffered buffered: type: buffer handler: swift swift: type: swift_mailer from_email: [email protected] to_email: [e
symfony1 ユーザーのための Symfony2¶ Symfony2 は、 symfony1 と比べると、 著しい進化が取り込まれています。 幸い、 Symfony2 の中核は MVC アーキテクチャーで、 symfony1 のプロジェクトをマスターするために使用した技術は、 Symfony2 で開発するときにも十分意味があります。 確かに、 app.yml は無くなりましたが、ルーティングやコントローラーやテンプレートは、全て残っています。 このガイドでは、 symfony1 と Symfony2 の違いを概観していきましょう。 見ていくとわかりますが、多くの機能は少々異なった方法で取り組まれています。 このちょっとした違いによって、 Symfony2 アプリケーションのコードの、安定性、予測可能性、テスト可能性、独立性が増すことに感謝するようになるでしょう。 さて、それでは “過去
サービスコンテナ¶ モダンな PHP アプリケーションにはたくさんのオブジェクトがあります。あるオブジェクトが E メールメッセージの配信を容易にしている間に、別のオブジェクトは情報をデータベースに永続化できます。あなたのアプリケーションでは、プロダクト一覧を管理するオブジェクトを作成したり、サードパーティの API からのデータを処理するオブジェクトを作成できます。モダンなアプリケーション多くのことを行い、各タスクを扱うために多くのオブジェクトで構成されているのがポイントです。 この章では、インスタンス化を助け、アプリケーションの多くのオブジェクトを組み立て、取り出す Symfony2 における特別な PHP オブジェクトについて解説します。このオブジェクトはサービスコンテナと呼ばれ、アプリケーションを構成するオブジェクトを標準化し、一元化できるようになります。コンテナはエンジニアライフ
Asset の管理にどうやって Assetic を使うか?¶ Assetic は主に Asset とフィルターの二つの機能をあわせたものです。 Asset とは CSS や Javascript 、それに画像などのリソースファイルの事です。 フィルターとはこれらのファイルをブラウザに転送する前に何らかの処理を行う機能です。 Assetic はアプリケーション内での Asset の格納と、実際にユーザーへの表示の処理を分離を可能にします。 もし Assetic がなかったら、 Asset ファイルを Web 公開ディレクトリに保存して、 アプリケーションから該当ファイルへのパスを出力するだけになります。
テスト¶ ソースコードに新しい行を1行追加するたびに、潜在的に新しいバグを追加しているかもしれません。 テストを自動化しておくことで、このようなバグを回避できます。 ここでは、Symfony2アプリケーション向けにユニットテストとファンクショナルテストを記述する方法について説明します。 テスティングフレームワーク¶ Symfony2のテストは、PHPUnitと、PHPUnitで培われてきたベストプラクティスやいくつかの規約に大きく依存しています。 これらについては詳しく解説しませんが、まだ読まれていない場合は、PHPUnitのドキュメントを読んでおくことをおすすめします。
HTTP キャッシュ¶ リッチな Web アプリケーションの本質は、それが動的であるということでしょう。 アプリケーションがどんなに効率的であったとしても、静的なファイルと比較して動的なファイルへのリクエストは必ずオーバーヘッドが発生します。 多くの Web アプリケーションのケースでは、Symfony2 はとても高速に動作するので、苦労してチューニングしなくても、サーバーに負荷をかけることなく、素早くレスポンスが返されます。 しかし、サイトへのアクセスが多くなると、小さなオーバーヘッドでも現実問題となってくるケースもあります。 このような場合は、それまでリクエストのたびに実行していた処理を、1 回だけ実行されるようにします。 これがキャッシュの目的です。 巨人の肩に乗ってキャッシュする¶ アプリケーションのパフォーマンスを向上させる最も効果的な方法は、ページ全体の出力をキャッシュし、それ
バリデータは、制約 に対してオブジェクトを検証するように設計されています。 現実の世界では、制約はたとえば「ケーキは焼いてはいけない」となります。 Symfony2 の世界でも同様です。 制約とは、特定の状況を満たしていることを表明するものです。
データベースと Doctrine (“The Model”)¶ 現実を認めよう。どんなアプリケーションにとっても、データベースへの情報の永続化やデータベースからの情報の取得は、最もよく使われ、そしてチャレンジしがいのあるタスクです。そのタスクを簡単にこなすことができる強力なツールを提供する、というただ一点の目的だけに特化した Doctrine というライブラリを、幸運なことにも Symfony は統合しています。この章では、Doctrine の基本的なフィロソフィと、どれだけ簡単にデータベースを使うことができるか、という点を見ていきます。 Note Doctrine 自体は、Symfony とは完全に独立していて、Symfony で使用することはオプションです。この章は、オブジェクトとリレーショナルデータベース(MySQL や PostgreSQL、Microsoft SQL)をマップする
テンプレートの基本¶ ご存知のとおり、コントローラ は、Symfony2 アプリケーションに入ってきたリクエストを扱う役割を果たします。ただし、実際は、コードのテストのしやすさや再利用性のために、重い処理を別の部分に任せていることもあります。コントローラは、HTML や CSS その他のコンテンツを生成する際は、その生成処理をテンプレートエンジンに引き継ぎます。本章では、ユーザに提示するコンテンツや、メール本文などのテンプレートの記述方法をマスターしていきます。テンプレートを継承したりコードを再利用する方法も勉強していきましょう。 テンプレート¶ テンプレートとは、テキストベースのフォーマット(HTML、XML、CSV、LaTeX ...)なら何でも生成することが可能な、シンプルなテキストファイルです。一番身近なのは PHP テンプレートでしょう。テキストと PHP コードが混ざったテキス
次のページ
このページを最初にブックマークしてみませんか?
『Symfony2 ドキュメントポータル』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く