我正在使用Silex创建一个应用程序,并想知道是否有可能以某种方式将Silex\Application
的实例放在方法中我无法做method_name(Application $application)
的地方参数Δ
例如,假设我在控制器上有一个不是动作的私有方法。如果我将Application $application
作为参数,则会抛出一个错误,说我需要将其传入。
如果我不需要,我宁愿不必手动传递该方法。
答案 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()
,但这是我提出的最干净的方法解决这个问题。