获取Silex \ Application的实例

时间:2011-12-08 11:46:20

标签: php dependency-injection silex

我正在使用Silex创建一个应用程序,并想知道是否有可能以某种方式将Silex\Application的实例放在方法中我无法做method_name(Application $application)的地方参数Δ

例如,假设我在控制器上有一个不是动作的私有方法。如果我将Application $application作为参数,则会抛出一个错误,说我需要将其传入。

如果我不需要,我宁愿不必手动传递该方法。

2 个答案:

答案 0 :(得分:4)

实际上只有两种方法可以做到。

a)将Silex\Application作为参数传递给类的构造函数,并将其指定为实例变量。

b)手动将Silex\Application作为参数传递给私有方法。

您确定在课堂上需要完整的应用程序吗?依赖注入点是直接注入依赖项,而不是注入容器(是的,Silex\Application extends \Pimple,这是一个依赖注入容器。

答案 1 :(得分:2)

根据您对其他答案的评论,您获得Silex / Application的目标是获得Twig服务。我在Silex项目的另一个函数中解决当前应用程序的问题是:

use \Silex\Application;
use \Symfony\Component\HttpFoundation\Request;

class myController {
  private $a;

  // Route defined as:
  // $app->get('/foo', 'myController::showPage');
  public function showPage(Application $a) {
    $this->a = $a;
    return $this->doAwesome();
  }

  private function doAwesome() {
    $twig = $this->a['twig'];
    return $twig->render('awesomePage.twig');
  }
}

作为路径端点的每个函数都会将传递给它的Application保存为类属性,以便其他函数可以使用。这意味着您必须记住在使用$this->a = $a;之前调用doAwesome())的每个函数中执行doAwesome(),但这是我提出的最干净的方法解决这个问题。