このスケルトンアプリケーションを使用して、新しい胚フレームワーク3アプリケーションの作業を開始できます。
作曲家の使用:
$ composer create-project davidecesarano/embryo [my-app-name]
胚はDotenv PHPライブラリを利用します。新鮮な胚のインストールでは、アプリケーションのルートディレクトリには.env.exampleファイルが含まれます。 Composerを介してEmbryoをインストールすると、このファイルは.envに自動的に変更されます。
| ディレクトリ | 説明 |
|---|---|
| アプリ | アプリケーションのコアコードが含まれています。このディレクトリには、 Controllers 、 Exceptions 、 Helpers 、 Middleware 、 Models 、 Servicesなど、さまざまな追加ディレクトリが含まれています。 |
| ブートストラップ | アプリのインスタンス化、ミドルウェア、サービス、設定など、アプリケーションをブートストラップするファイルが含まれています。 |
| 公共 | すべてのリクエスト( index.phpファイル)とassetsディレクトリのエントリポイントが含まれています。 |
| ルート | アプリケーションのすべてのルート定義が含まれています。デフォルトでは、いくつかのルートファイルが胚に含まれています: app.phpおよびapi.php 。 |
| ストレージ | ログ( logs )、コンパイルされたテンプレートファイル( views )、ファイルベースのセッション( sessions )、キャッシュファイル( cache )が含まれます。 |
| 翻訳 | 言語ファイルが含まれています。 |
| ビュー | ビューファイルが含まれています。 |
bootstrap/app.phpにEmbryoApplicationクラスでインスタンス化されています。インスタンス中に、Embryoは依存関係( bootstrap/services.php )、middlewares( bootstrap/middleware.php )、およびルートファイル( routesディレクトリ)のサービスをレジスタします。アプリケーションコンストラクターは、アプリケーションの動作を構成するオプションの設定配列を受け入れます( bootstrap/settings.php )。routesでは、direcotryアプリケーションインスタンスのルーティング方法を使用してルートを定義します。これらのインスタンスメソッドは、アプリケーションのルーターオブジェクトにルートを登録します。各ルーティングメソッドはルートインスタンスを返します。これにより、ルートインスタンスのメソッドをすぐに呼び出して、ミドルウェアを追加したり、名前を割り当てることができます。public/index.phpで、アプリケーションインスタンスのrun()メソッドを呼び出します。この方法は、次のプロセスを開始します。胚は、リクエストと応答オブジェクトのPSR-7インターフェイスをサポートします。
胚アプリケーションの前後にコードを実行して、リクエストと応答オブジェクトを操作して、適合します。これはミドルウェアと呼ばれます。ミドルウェアは、PSR-15ミドルウェアインターフェイスを実装します。
Embryoは、依存関係コンテナを使用して、アプリケーションの依存関係を準備、管理、および注入します。胚は、PSR-11を実装する容器をサポートします。
アプリケーションインスタンスのルーティング方法を使用して、アプリケーションルートを定義できます。すべての方法は2つの引数を受け入れます。
class@method文字列または['class', 'method']アレイ) use Embryo Http Message { Response , ServerRequest };
// GET Route
$ app ->get( ' /blog/{id} ' , function ( ServerRequest $ request , Response $ response , int $ id ) {
return $ response -> write ( ' This is post with id ' . $ id );
}胚ルーティングは、GET、POST、PUT、PATCH、削除、およびオプションのリクエストメソッドをサポートします。すべての要求方法は、ルーターオブジェクトのメソッドに対応します: get() 、 post() 、 put() 、 patch() 、 delete() 、およびoptions() 。すべての方法または特定のルートメソッドをサポートするために、 all()およびmap()メソッドを使用できます。
完全なドキュメント:胚ルーティングを参照してください。
すべての胚ルートは、ルートファイルで定義されており、 routesディレクトリにあります。これらのファイルは、アプリケーションによってboostrap/app.phpファイルで自動的にロードされます。新しいruoteファイルを作成したい場合は、ルートディレクトリに追加し、 boostrap/app.phpファイルのアプリケーションインスタンスのimport()メソッドに登録します。
$ app -> import ([
root_path ( ' bootstrap/services.php ' ),
root_path ( ' bootstrap/middleware.php ' ),
root_path ( ' routes/api.php ' ),
root_path ( ' routes/app.php ' ),
root_path ( ' routes/my_route_file.php ' )
]);胚ではappMiddlewareディレクトリにPSR-15ミドルウェアを作成できます。ミドルウェアをアプリケーション、特定のルート、またはルーティンググループに追加できます。
HTTP要求ごとにミドルウェアを登録する場合は、 bootstrapmiddleware.phpにアプリケーションミドルウェアを追加します。 addMiddleware()メソッドは、文字列、配列、またはPsrHttpServerMiddlewareInterfaceのインスタンスを受け入れます。
$ app -> addMiddleware ( App Middleware MyCustomMiddleware::class);middleware()メソッドを使用して、ルートで1つ以上のミドルウェアを割り当てることができます。 middleware()メソッドは、文字列、配列、またはPsrHttpServerMiddlewareInterfaceのインスタンスを受け入れます。
$ app -> get ( ' /users ' , function ( ServerRequest $ request , Response $ response ) {
//...
})-> middleware ( ' AppMiddlewareTestMiddleware1::class ' , ' AppMiddlewareTestMiddleware2::class ' );ルートに加えて、1つ以上のミドルウェアをグループ内およびグループ内の個々のルートに割り当てることができます。 middleware()メソッドは、文字列、配列、またはPsrHttpServerMiddlewareInterfaceのインスタンスを受け入れます。
$ app -> prefix ( ' /api ' )-> middleware ( App Middleware GroupMiddlewareTest::class)-> group ( function ( $ app ) {
$ app -> get ( ' /user/{id} ' , function ( ServerRequest $ request , Response $ response , int $ id ) {
//...
})-> middleware ( App Middleware RouteMiddlewareTest::class);
});ルートファイルの閉鎖としてすべての要求処理ロジックを定義する代わりに、「コントローラー」クラスを使用してこの動作を整理することをお勧めします。基本的なコントローラーの例を見てみましょう。コントローラーは、胚に含まれるベースコントローラークラスを拡張することに注意してください。
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message Response ;
class UserController extends Controller
{
/**
* @param int $id
* @return Response
*/
public function show ( int $ id ): Response
{
return $ this -> response ()-> write ( $ id );
}
}このコントローラーメソッドへのルートを次のように定義できます。
use App Controllers UserController ;
$ app -> get ( ' /user/{id} ' , [UserController::class, ' show ' ]);コントローラーは、基本クラスを拡張する必要があります。ただし、 get() 、 request() 、 response()メソッドなどの機能にアクセスできません。
コントローラーがコンストラクターに必要とする依存関係をヒントすることができます。宣言された依存関係は自動的に解決され、コントローラーインスタンスに注入されます。
namespace App Controllers ;
use Embryo Controller ;
use Path To Service ;
class UserController extends Controller
{
/**
* @var Service $service
*/
private $ service ;
/**
* @param Service $service
*/
public function __construct ( Service $ service )
{
$ this -> service = $ service ;
}
}コンストラクターの注入に加えて、コントローラーの方法にヒント依存関係を入力することもできます。
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message ServerRequest ;
class UserController extends Controller
{
/**
* @param ServerRequest $request
*/
public function store ( ServerRequest $ request )
{
//...
}
}さらに、ベースコントローラークラスのget()メソッドを使用することもできます。
namespace App Controllers ;
use Embryo Controller ;
use Path To Service ;
class UserController extends Controller
{
public function show ()
{
$ service = $ this -> get (Service::class);
//...
}
}ベースコントローラークラスには、PSR-7 request()およびresponse()メソッドにもアクセスできます。
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message Response ;
class UserController extends Controller
{
/**
* @return Response
*/
public function store (): Response
{
$ params = $ this -> request ()-> getParsedBody ();
//...
return $ this -> response ()-> write ( ' Hello! ' );
}
}または、 request()およびresponse()ヘルパーにアクセスすることもできます。
namespace App Controllers ;
use Embryo Controller ;
use Embryo Http Message Response ;
class UserController extends Controller
{
/**
* @return Response
*/
public function store (): Response
{
$ params = request ()-> getParsedBody ();
return response ()-> write ( ' Hello! ' );
}
}サービスプロバイダーは、すべての胚アプリケーションブートストラップの中心的な場所です。あなた自身のアプリケーションと、すべてのEmbryoのコアサービスは、サービスプロバイダーを介してブートストラップされています。
app/Servicesディレクトリにあるサービスプロバイダーの時代。すべてのサービスプロバイダーはEmbryoContainerServiceProviderクラスを拡張し、 registerメソッドが含まれています。レジスタメソッド内では、物事をサービスコンテナにバインドするだけです。
namespace App Services ;
use Embryo Container ServiceProvider ;
class TestService extends ServiceProvider
{
/**
* Registers service provider.
*
* @return void
*/
public function register ()
{
$ this -> container -> set ( ' test ' , function ( $ container ){
return ' Hello from my test service ' ;
});
}
}