我正在使用Silex创建一个应用程序,并且想知道是否有可能以某种方式Silex\Application
在我无法method_name(Application $application)
在方法参数中执行的地方获取实例?
例如,假设我在控制器上有一个不是操作的私有方法。如果我把Application $application
它作为参数,它会抛出一个错误,说我需要传递它。
如果不需要,我宁愿不必手动传递该方法。
我正在使用Silex创建一个应用程序,并且想知道是否有可能以某种方式Silex\Application
在我无法method_name(Application $application)
在方法参数中执行的地方获取实例?
例如,假设我在控制器上有一个不是操作的私有方法。如果我把Application $application
它作为参数,它会抛出一个错误,说我需要传递它。
如果不需要,我宁愿不必手动传递该方法。
实际上只有两种方法可以做到。
a)Silex\Application
作为参数传递给类的构造函数,并将其分配为实例变量。
b)Silex\Application
手动将 传递给您的私有方法作为参数。
您确定您的课堂需要完整的应用程序吗?依赖注入的重点是直接注入依赖,而不是注入容器(没错,就是Silex\Application
extends \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');
}
}
作为路由端点的每个函数都会将传递给它的应用程序保存为类属性,以供其他函数访问。这意味着您必须记住在使用(调用之前$this->a = $a;
)的每个函数中都做,但这是我想出的最干净的方法来解决这个问题。doAwesome()
doAwesome()