目次
Symfony2は、相互に結び付けられていないスタンドアロンの再利用可能なライブラリのセットであり、Web開発の一般的なタスクを解決します。
低レベルのコンポーネントを使用する代わりに、これらのコンポーネントに基づいた本格的なフレームワークを使用できます-Symfony2 ...または、独自のフレームワークを作成できます。 後者に関するこの一連の記事。
なぜ独自のフレームワークが必要なのですか? (独自のフレームワークを作成する理由は何ですか?)
まず、なぜ独自のフレームワークを作成したいのですか? 結局のところ、見れば、誰もが車輪を再発明するべきではなく、既成のソリューションを使用するべきだと言うでしょう。 ほとんどの場合、それらは正しいでしょうが、フレームワークの開発を開始する理由はいくつかあります。
- 最新のWebベースのフレームワーク、特にSymfony2とそのコンポーネントの低レベルアーキテクチャを調査する。
- 特定のニーズに合わせてターンキーフレームワークを作成します。 (ニーズが本当に具体的であることを確認してください)
- 楽しみのための実験のために(学習と採点)
- より現代的で十分に確立された実用的なソリューションを必要とする既存のアプリケーションをリファクタリングするため。
- あなたがそれができることを証明するために(...少し助けがあったとしても)
ステップごとに簡単に説明し、独自のフレームワークを作成するトピックを紹介します。 各ステップで、既成のソリューションとして、またはさらなる開発の基礎として使用できる、完全に機能するフレームワークがあります。 シンプルなものから始め、時間の経過とともにフレームワークがより機能的になります。
後で、完全に機能するフレームワークができます。
そしてもちろん、すべてのステップで、Symfony2とそのコンポーネントについてさらに学習します。
- 一連の記事をすべて読む時間がない場合、または今すぐ開発を開始したい場合は、 Silexに注目してください。これはSymfony2コンポーネントに基づくマイクロフレームワークです。
多くの最新のフレームワークは、MVCフレームワークとしての基盤となっています。 このシリーズの記事では、MVCモデルについては説明しません。Symfony2コンポーネントに基づいて、このモデルに基づかないフレームワークを作成できるからです。 いずれにせよ、MVCの構築を見た場合、このパートでは、このアーキテクチャでContollerの一部を作成する方法について説明します。
モデルとビューの場合、それはすべてあなたの好みに依存し、任意のライブラリを使用する機会を提供します(たとえば、Doctrine、Propel、またはモデルやPHPの古き良きPDO、ViewのTwig)。
フレームワークを作成するときの主な目標は、盲目的にMVCパターンに従うのではなく、コンポーネントに分離することです。 Symfony2コンポーネントの基本原則は、HTTPプロトコル仕様に基づいています。 したがって、作成するフレームワークは、より正確にHTTPフレームワークまたは要求/応答フレームワークと呼ばれます。
始める前に
フレームワークの作成について読むだけでは十分ではありません。 あなたは本当に私たちが見ている例のコードを書く必要があります。 これには、PHP(バージョン5.3.8以降)、Webサーバー(ApacheまたはNginx)、PHPおよびOOPの十分な知識が必要です。
準備はいい? それでは始めましょう。
ブートストラップ
フレームワークについて考え始める前に、コードを保存する場所、クラスを呼び出す方法、外部依存関係を接続/処理する方法など、いくつかの規則を規定する必要があります。
フレームワークを配置するには、サーバーのどこかにディレクトリを作成します。
mkdir framework cd framework
コーディング標準
誰かがこれについて大喜びする前に、たとえば、どの標準を使用するかは問題ではないことを認めましょう。 したがって、これらの記事のシリーズでは、 「Symfony2コーディング標準」を使用します。
コンポーネントのインストール
フレームワークの必要なコンポーネントをインストールするには、PHPのプロジェクト依存関係マネージャーであるComposerを使用します。 composer.jsonで説明する最初のオプションは次のようになります。
{ "require": { "symfony/class-loader": "2.1.*" } }
ここでは、プロジェクトがSymfony2 ClassLoaderコンポーネントバージョン2.1.0以降を使用することを発表します。 プロジェクトの依存関係をダウンロードしてインストールするには、次の手順を実行します。
$ wget http://getcomposer.org/composer.phar $ # or $ curl -O http://getcomposer.org/composer.phar $ php composer.phar install
インストールコマンドを実行すると、Symfony2 ClassLoaderコンポーネントのコードを含むベンダーディレクトリが表示されます。
- Composerを使用することをお勧めしますが、アーカイブされたコンポーネントをダウンロードするか、Gitサブモジュールを使用できます。 それはあなた次第です。
命名規則とオートロード
すべてのクラスに自動ロードを適用します。 起動せずに、機能を使用する前に目的のファイルを要求する必要があります。 しかし、今度はPHPにこれを行わせます。
Symfony2は、クラスの命名とオートローダーについて、PHPの事実上の標準、特にPSR-0に従います。 Symfony2 ClassLoaderコンポーネントはPSR-0標準を提供し、ほとんどの場合、このコンポーネントをダウンロードするだけです。
ファイルに空のスタートアップマネージャーを作成します:autoload.php:
<?php // framework/autoload.php require_once __DIR__.'/vendor/symfony/class-loader/Symfony/Component/ClassLoader/UniversalClassLoader.php'; use Symfony\Component\ClassLoader\UniversalClassLoader; $loader = new UniversalClassLoader(); $loader->register();
これで、コンソールを使用してこのファイルを実行できます。アクションは実行されず、エラーは発生しません。
$ php autoload.php
- ClassLoaderコンポーネントの詳細については、Symfony2 Webサイトをご覧ください。
Composerは、必要なすべてのコンポーネントのオートローダーを自動的に作成します。 (autoload.phpファイルの代わりに)vendor / .composer / autoload.phpファイルを含めることができます。
私たちのプロジェクト
テンプレートからフレームワークを作成する代わりに、最も単純なアプリケーションを何度も繰り返し作成し、毎回1レベルの抽象化を追加します。 PHPで最も単純なWebアプリケーションから始めましょう。
<?php $input = $_GET['name']; printf('Hello %s', $input);
これで最初の部分は終了します。 次のパートでは、HttpFoundationコンポーネントと、それが提供する機能について検討します。