Silex-Symfony2の作成者によるマイクロフレームワーク

ほぼ1年前、PHPで記述された「ファットフリー」と呼ばれるマイクロフレームワークに関する記事を公開しました。 その後、このフレームワークと記事自体が興味をそそったので、人気のあるシナトラ-Silexプロジェクトのスタイルで別のPHPマイクロフレームワークをレビューすることにしました。

画像

PHP界で有名なSensio Labsで作成された、今日では最も人気のあるPHPフレームワークの1つであるFabien Potencier-Symfonyの作者であるSilexは、Symfony2のファンの軍隊が期待する軽量バージョンです。



その仕事のために、SilexはSymfony2の主要なコンポーネントを、 Pimpleサービスコンテナーの形式で「Dependency Injection 」デザインパターンのシンプルな実装と組み合わせて使用​​します。



Symfony2と同様に、Silexには直感的なAPIがあり、開発プロセスが非常に楽しくなり、ほとんど数ステップでフレームワークに機能を追加できます。





応用例



最も単純なSilexアプリケーションは次のようになります。



require_once __DIR__.'/silex.phar'; // *.phar -      PHP 5.3. ,    ( *jar  Java?). $app = new Silex\Application(); //       PHP 5.3 —  .       . $app->get('/hello/{name}', function($name) { //       —    . return "Hello $name"; }); $app->run(); //  
      
      







ご覧のとおり、すべてが非常に簡単です。 ユーザーが/ hello / {name}に対してGETリクエストを行うと、コードはクロージャー関数内で実行されます。



設置



フレームワークが機能するには、php.iniにインストールされた5.3以上のPHPバージョンが必要です。



phar.readonly = Off

phar.require_hash = Off .







フレームワークのインストールは、上記の例に示すように、pharアーカイブをロードし、ブートストラップファイル(index.php)に添付することになります。

すべてのリクエストをこのファイルにリダイレクトする必要があることに注意してください。

Apacheを使用する場合は、index.phpの隣のルートディレクトリに次の内容の.htaccessを作成します。



<IfModule mod_rewrite.c>

RewriteEngine On

#RewriteBase /path/to/app

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php [QSA,L]









ルーティング



Silexでは、無制限の長さのルートを受け入れることができます。



 $app->get('/hello/awesome/pink/ponnies', function(){ ... });
      
      







ルートで変数を使用できます:



 $app->get('/hello/awesome/pink/{animal}', function($animal) { ... });
      
      







無制限の変数:



 $app->get('/hello/{impression}/{color}/{animal}', function($impression, $color, $animal) { ... });
      
      







もちろん、リクエストはPOSTにすることができます:



 $app->post('/ponnies', function() use ($app) { //  ,   $app          $request = $app['request']; echo $request->get('ponny'); }
      
      







そして、PUT:



 $app->put('/blog', function() { ... });
      
      







削除:



 $app->delete('/blog', function() { ... });
      
      







バリデーターのチェーンを各ルートに添付できます。



 $app->get('/blog/show/{postId}/{commentId}', function($postId, $commentId) { ... }) ->assert('postId', '\d+') //   ->assert('commentId', '\d+'); //  
      
      







また、名前を割り当てます。



 $app->get('/', function() { ... }) ->bind('homepage');
      
      





これらのルートへのリンクを生成するのに便利です。



各リクエストの前後に、適切な前後フィルターを使用して任意のコードを実行できます。



 $app->before(function() { //  }); $app->after(function() { //  });
      
      







サービス



にきびの形での依存性注入の実装は非常に単純で簡単です。



新しいアプリケーションインスタンスを作成します。



 use Silex\Application; $app = new Application();
      
      







そしてそれを配列として参照し、通常の変数として割り当てます:



 $app['some_parameter'] = 'value';
      
      







すでにおなじみのクロージャー:



 $app['some_service'] = function() { return new Service(); };
      
      







さらに使用するには、配列の要素として参照するだけで十分です。



 $service = $app['some_service'];
      
      







サービスを単一のインスタンスで作成する必要がある場合、アプリケーション共有メソッドを使用します。



 $app['some_service'] = $app->share(function() { return new Service(); });
      
      







この場合、$ app ['some_service']は呼び出し中に1回だけ作成され、その後の呼び出しではそのインスタンスが返されます。



拡張機能



フレームワークは、独自の機能を作成できる拡張機能の柔軟なシステムを実装します。

ファーフェッチ拡張機能を接続して使用してデータベースを操作する例:



 use Acme\DatabaseExtension; $app = new Application(); $app->register(new DatabaseExtension(), array( 'database.dsn' => 'mysql:host=localhost;dbname=myapp', 'database.user' => 'root', 'database.password' => 'secret_root_password', ));
      
      







現在利用可能な標準の拡張機能:







途中-Doctrine2と管理パネルジェネレータ。



そして、これはほんの始まりに過ぎません。 Silexの拡張としてのサードパーティライブラリの適応は非常に簡単です。そのため、このフレームワークを中心にコミュニティが形成されるとすぐに、多くのライブラリが存在します。



まとめ



マイクロフレームは、単純な構造のWebアプリケーションを作成する上で常に堅実な位置を占めます。Symfony2のような巨大企業の肩に基づいたマイクロフレームワークは、PHPの世界では確かに非常に重要なイベントです。



フレームワークWebサイト:http://silex-project.org



便利なリンク:


Symfony2ウェブサイト

Pharドキュメント

依存性注入



All Articles