获得实例的Silex应用程序


Getting Instance Of SilexApplication

我正在使用Silex创建一个应用程序,并且想知道是否有可能以某种方式在我无法在方法参数中执行method_name(Application $application)的地方获得Silex'Application的实例?

例如,假设我在控制器上有一个私有方法,它不是操作。如果我把Application $application作为参数,它会抛出一个错误,说我需要传递它。

如果不需要的话,我宁愿不手动传递这个方法

实际上只有两种方法。

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

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

你确定在课堂上需要完整的应用程序吗?依赖注入的重点是直接注入依赖,而不是注入容器(是的,Silex'Application扩展了'Pimple,这是一个依赖注入容器。

从您对另一个答案的评论来看,您获得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保存为一个类属性,以供其他函数访问。这意味着你必须记住在使用doAwesome()的每个函数中执行$this->a = $a; (调用doAwesome()之前),但这是我想出的最干净的方法来解决这个问题。