2

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

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

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

4

2 回答 2

4

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

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

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

您确定您的课堂需要完整的应用程序吗?依赖注入的重点是直接注入依赖,而不是注入容器(没错,就是Silex\Applicationextends \Pimple,就是一个依赖注入容器。

于 2011-12-08T15:12:03.297 回答
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');
  }
}

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

于 2013-06-18T11:25:19.853 回答