私が持っているもの:
# index.php
$app = new Silex\Application();
... (loading routes file by YamlFileLoader) ...
$app['routes']->addCollection($loader->load('routes.yml'));
$app->run();
ルーティング:
# routes.yml
home:
pattern: /
defaults: { _controller: 'Controllers\DefaultController::indexAction' }
コントローラー内の $app インスタンスにアクセスするにはどうすればよいですか? それは簡単です:
# controllers/DefaultController.php
class DefaultController
{
public function indexAction(Request $request, Application $app)
{
// this is the place!
return $app['twig']->render('index.twig');
}
}
わかりました、それは問題ありませんが、この方法が私にとって受け入れられない理由がいくつかあります. そして、私は古典的な方法を使いたい:
# controllers/DefaultController.php
class DefaultController
{
public function indexAction()
{
return $this->twig->render('index.twig');
}
}
それを提供するために、親基本クラスを使用したいと思います。
# controllers/BaseController.php
class BaseController
{
protected $twig;
public function __construct(Application $app)
{
$this->twig = $app['twig'];
}
}
そして、あなたが期待するように:
# controllers/DefaultController.php
class DefaultController extends BaseController
...
では、Base Controller に silex $app を注入するには、どの方法が良いでしょうか?