我正在用Silex创建一个应用程序,并想知道是否有可能以某种方式获取Silex\Application
的实例,但我无法在方法参数中执行method_name(Application $application)
?获取Silex Application的实例
例如,假设我在控制器上有一个不是动作的私有方法。如果我把Application $application
作为参数,它会抛出一个错误,说我需要通过它。
如果我不需要,我宁愿不必手动传递该方法。
我正在用Silex创建一个应用程序,并想知道是否有可能以某种方式获取Silex\Application
的实例,但我无法在方法参数中执行method_name(Application $application)
?获取Silex Application的实例
例如,假设我在控制器上有一个不是动作的私有方法。如果我把Application $application
作为参数,它会抛出一个错误,说我需要通过它。
如果我不需要,我宁愿不必手动传递该方法。
真的只有两种方法可以做到这一点。
a)将Silex\Application
作为参数传递给您的类的构造函数,并将其指定为实例变量。
b)手动将Silex\Application
作为参数传递给您的私有方法。
你确定你需要在你的班级完整的应用程序?依赖注入的关键是直接注入依赖关系,而不是注入容器(是的,Silex\Application
延伸\Pimple
,这是一个依赖注入容器。
从你对另一个答案的评论,你的目标是获得Silex /的应用是让在枝条服务没有办法,我已经解决了让在我的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;
t使用doAwesome()
(之前调用doAwesome()
),但这是我提出来解决这个问题的最简洁的方法。
嗯,不,我只想找到储存在$ app ['twig']中的变量,我该怎么做?我想我只是不确定Pimple如何知道一个对象应该通过DI传递给一个方法,或者这是一个通常应该传递的正常参数。 – ryanzec
您不能自动将参数传递给方法调用。但是你可以将你的控制器类定义为一个服务,并将细枝注入该类的构造函数中。 – igorw
我试过这个:http://pastebin.com/LpuC0cYn:但它不起作用。 – ryanzec