Symfony 2.0の概要

Symfony 2は、1.xブランチと比較して大きな変更を受けています。 フレームワークはより柔軟で高速になりました。 開発者によると、これはPHPで記述された最速のフレームワークの1つです 。数値はこちらで確認できます 。 ただし、これらのステートメントを真剣に考えないでください。これは非常に重要です。より速く、より柔軟になりました。



Symfony 2は現在開発中であり、本番環境で使用する準備ができていません。 しかし、勉強するために試すことはすでに可能です。 フレームワークに基づくアプリケーションのレビューから知り合いを始めたいと思います。 githubの Symfony 2ソース。 githubには、Symfony 2.0で構築された既製のサンドボックスアプリケーションがありますが、Symfonyのバージョンは前回とは多少異なります。 したがって、サンドボックスのソースを受け取った後、私が最初にしたことは、 src/vendor/symfony



のSymfonyのバージョンを最新のものに置き換えることでした。

 git clone git://github.com/symfony/symfony-sandbox.git sandbox
 cd sandbox / src /ベンダー
 rm -rf symfony
 git clone git://github.com/symfony/symfony symfony




したがって、最初に目を引くのは、アプリケーションのディレクトリ構造がまったく異なることです。 つまり、hello、src、webの3つのディレクトリがあります。





Webサーバーのルートディレクトリには、画像、スタイルシート、javascriptなど、Webから利用可能なすべてのファイルが含まれています。 また、本番環境用のフロントコントローラーindex.php



および開発環境用のindex_dev.php



もあります。 一般に、すべてが以前と同じですが、1つの例外を除き、Symfony 2.0システム要件への準拠について環境をチェックできる便利なcheck.php



スクリプトがここに表示されます。

check.phpの結果



フロントコントローラーは、アプリケーションのコアクラスを接続し、クラスのインスタンスを作成し、環境を定義し、 run



メソッドを呼び出してアプリケーションを起動します。



hello/



applicationディレクトリには、抽象クラスSymfony\Foundation\Kernel



を拡張し、基本的な定義を生成するアプリケーションコアクラスが含まれています。 特に、アプリケーションのルートディレクトリが定義され、「バンドル」が記録されます(これがSymfonyとその上に構築されたアプリケーションの現在の構成です)。「バンドル」を検索するパスが記録され、依存関係注入コンテナーが作成され、ルーティングルールが登録されます。 IOCコンテナを作成し、実装でルーティングルールをデフォルトで定義するメソッドは、 hello/



applicationディレクトリから構成ファイルをロードします。 ここで、カーネルクラスでは、2つの重要なファイルが接続されています: src/autoload.php



およびsrc/vendor/symfony/src/Symfony/Foundation/bootstrap.php



カーネルが正常に動作するために必要です。特に、クラスSymfony\Foundation\UnversalClassLoader



インスタンスがSymfony\Foundation\UnversalClassLoader



クラスファイルを自動ロードするためのカスタマイズ可能なパス。 パスは、2つのメソッドregisterNamespaces



によって設定されます-名前空間(名前空間)とregisterPrefixes



でクラスを検索するためのパスを指定できますSwift_



Zend_



などのクラスプレフィックスでファイルを検索する方法を指定できます 5.3以下のPHPバージョンのスタイルで記述されたクラスの場合



同じディレクトリにhello/console



ファイルがあります-Symfony 1.xのsymfony



ファイルの類似物、つまり コンソールからさまざまなコマンドを実行できるツール。

ディレクトリは次のとおりです。



src/



ソースコードディレクトリには、既に説明したsrc/autoload.php



とディレクトリが含まれていsrc/autoload.php







HelloBundleに含まれるもの:



重要なポイント-フレームワークはディレクトリの構造を決定せず、制限を課しません。 アプリケーションのカーネルクラスを見ると、すべてのパスがそこに書き込まれていることがわかります。 そして、私たちの裁量でそれらを変更することができます。 このディレクトリ構造は、サンドボックスアプリケーションによって正確に提案されたものであり、今後デフォルトとして提供される可能性があります。



アプリケーションのディレクトリ構造を調べた後、約束された柔軟性がどこに隠されているか、そして何が正確に変更できるかを見つけることができます。 正直なところ、ディレクトリ構造自体は、私たちの裁量で変更できる最初のものです。 Symfony 1.xには、一般的なコードを使用するさまざまなアプリケーションを含むapps/



ディレクトリがありました。 私たちの場合、このディレクトリは作成されていませんが、異なるアプリケーションを作成でき、私たちにとって便利な方法で作成できます。 たとえば、 src/



およびweb/



と同じレベルにアプリケーションディレクトリを作成できます。 このケースでは、 hello



アプリケーションで行われます。 別のアプリケーション、たとえばbye



追加できます。 または、アプリケーションのルートディレクトリを作成して、新しいByeKernel



アプリケーションのクラスをhello/



ディレクトリに追加するだけです。 ところで、誰もapps/



するためのapps/



ディレクトリの作成を禁止していません。 一般に、ディレクトリ構造に関しては、すべてが非常に柔軟です。



次に興味深い場所はバンドルです。 「バンドル」はSymfonyの「一流の市民」であり、特定の機能を実装し、他のアプリケーションの他の開発者が簡単に使用できる構造化されたファイルのセットです。 前述したように、これらはSymfony 1.xのプラグインとまったく同じではありません。 私が自分で見つけた最も近い例えは、Djangoの「アプリケーション」です。 Symfony 2では、すべてが「バンドル」で構成され、フレームワーク自体は「バンドル」のセットです。開発中のアプリケーションも「バンドル」または「バンドル」のセットです。 これにより、アプリケーションを柔軟に構成し、「バンドル」にパッケージ化された機能を接続できます。また、「バンドル」にパッケージ化してコードを配布することもできます。



たとえば、GitHubから取得したサンドボックスアプリケーションでは、カーネルクラスを見ると、使用されている「バンドル」を確認できます。これは次のようになります。



すべてのアプリケーションがHelloを出力し、パラメーターで渡された名前を印刷するという事実に基づいて、DoctrineBundle、SwiftmailerBundleを安全に無効にできます。



各「バンドル」は、構成ファイルを使用してカスタマイズできます。 アプリケーション構成は、 hello/config/



ディレクトリーにあります。 特に、次のものがあります。



興味深いことに、 config_dev.yml



ファイルとconfig_prod.yml



ファイルにconfig_dev.yml



config.yml



importsステートメントconfig.yml



config_prod.yml



ファイルがconfig_dev.yml



非常に便利です。 config.yml



ファイルを開くと、プラグインの「バンドル」の設定があります。

 #hello / config / config.yml
 kernel.config:〜
 web.web:〜
 web.templating:〜


kernel.config



などの各エントリは、バンドルの設定を定義します。 一部のバンドルには、 WebBundle



web.web



web.templating



2つのオカレンスがある複数のオカレンスがある場合がありweb.templating





環境ごとに、たとえばconfig_dev.yml



で行われるように、「バンドル」設定をオーバーライドできます。

 #hello / config / config_dev.yml
輸入:
   -{リソース:config.yml}
 web.debug:
  例外:%kernel.debug%
  ツールバー:%kernel.debug%

 zend.logger:
  優先度:情報
  パス:%kernel.root_dir%/ logs /%kernel.environment%.log


したがって、アプリケーションのレビューをまとめると、次の興味深い点を強調できます。 このフレームワークは、プラグイン「バンドル」を備えたマイクロカーネルのアイデアに基づいています。 これはすべて、依存性注入コンテナを使用してバインドします。 その結果、YamlまたはXML設定ファイルを使用してカスタマイズできる「バンドル」を接続/切断することで、アプリケーションの機能を追加/削除できます。 「バンドル」を無効化または置換することにより、フレームワーク自体の一部を無効化または置換できます。

これで、フレームワーク自体の内容を簡単に理解できます。これについては、 次のパートで説明します。



All Articles