スリムフレームワークベースのAPIを開発中です。 mvcパターンに続いて、私は自分のルートをロガーとレンダラーがすべてのコントローラーに注入されたコントローラー駆動にしたい。スリムフレームワーク3(mvcパターン)でルートコントローラを構成する方法
私はスリムスケルトンをMVCの例の数をチェックアウトして、この設定では、1つの特定のチュートリアルとサンプルプロジェクト(http://jgrundner.com/slim-oo-004-controller-classes/)
に私structorをベースにすることを決め、開始点として、注入は、ルータを追加することによって行われますこのようなアプリのコンテナにコントローラ:
$container = $app->getContainer();
$container['\App\Controllers\DefaultController'] = function($c){
return new \App\Controllers\DefaultController(
$c->get('logger'),
$c->get('renderer')
);
};
これは、素敵なきれいなルートとコントローラを可能に:
ルートの例:
$app->get('/[{name}]', '\App\Controllers\DefaultController:index');
コントローラ例えば:デフォルトのコントローラを拡張
namespace App\Controllers;
use Psr\Log\LoggerInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
class DefaultController{
private $logger;
private $renderer;
public function __construct(LoggerInterface $logger, $renderer){
$this->logger = $logger;
$this->renderer = $renderer;
}
public function index(RequestInterface $request, ResponseInterface $response, $args){
// Log message
$this->logger->info("Slim-Skeleton '/' route");
// Render index view
return $this->renderer->render($response, 'index.phtml', $args);
}
public function throwException(RequestInterface $request, ResponseInterface $response, array $args){
$this->logger->info("Slim-Skeleton '/throw' route");
throw new \Exception('testing errors 1.2.3..');
}
}
は、きちんとしたコントローラを続けていますが、クラスの多くを持っている場合、非効率的で厄介なようだ最初のアプリのコンテナにすべての新しいコントローラオブジェクトを追加する必要があります。
良い方法がありますか?
この記事でそれを行うには良い方法がありますhttp://glenneggleton.com/page/slim- 3コントローラとアクション –