それは可能です:($app->run();
前に)あなたのアプリケーションに続いて
namespace MyProject;
use Silex\ControllerResolver as BaseControllerResolver;
class ControllerResolver extends BaseControllerResolver
{
protected function instantiateController($class)
{
return new $class($this->app);
}
}
に登録:
は、プロジェクトのどこかControllerResolver.php
を作成し、この内部を入れ
$app['resolver'] = function ($app) {
return new \MyProject\ControllerResolver($app, $app['logger']);
};
今、あなたは、アプリのベースコントローラーを作成できます。例:
namespace MyProject;
use Silex\Application;
use Symfony\Component\HttpFoundation\Response;
abstract class BaseController
{
public $app;
public function __construct(Application $app)
{
$this->app = $app;
}
public function getParam($key)
{
$postParams = $this->app['request_stack']->getCurrentRequest()->request->all();
$getParams = $this->app['request_stack']->getCurrentRequest()->query->all();
if (isset($postParams[$key])) {
return $postParams[$key];
} elseif (isset($getParams[$key])) {
return $getParams[$key];
} else {
return null;
}
}
public function render($view, array $parameters = array())
{
$response = new Response();
return $response->setContent($this->app['twig']->render($view, $parameters));
}
}
そして、それを拡張するには:
class HomeController extends BaseController
{
public function indexAction()
{
// now you can use $this->app
return $this->render('home.html.twig');
}
}
私は、コントローラのサービスを使用してみましたが、私はリクエストを注入することはできません。 ($ app、$ request); }); $ app - > share(function(Request $ request))を使用してください。 – tdbui22
'$ app [" request "]'を介してリクエストにアクセスします。 – Maerlyn
小さなメモ:Silex 2.Xでは '$ app ['request']'が '$ app ['request_stack'] - > getCurrentRequest()'に変更されました。 – Davincho