我正在使用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()
之前),但这是我想出的最干净的方法来解决这个问题。