- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遵循了 Fabien Potiencier 的教程,关于 how to create your own Framework on top of the Symfony Components .现在我需要一个方法。我想将依赖容器注入(inject)我所有的 Controller ,而不是将每个 Controller 都定义为服务。
在原始的 Symfony2 框架中,所有 Controller 都扩展了位于 Symfony\Bundle\FrameworkBundle\Controller\Controller.php
中的 Controller
类:
namespace Symfony\Bundle\FrameworkBundle\Controller;
class Controller extends ContainerAware
{
// ...
}
Controller
类扩展了 ControllerAware
类,因此您可以在您的 Controller 中执行以下操作:
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class MyController extends Controller
{
public function someAction()
{
$this->container->get('dependencie_xyz);
}
}
所以我的问题是:我怎样才能在我的框架中完成同样的事情?
最佳答案
我花了一段时间,但我终于明白了 Symfony2 框架是如何做到的。在 SymfonyFrameworkBundle 中是一个自定义的 ControllerResolver,它在解析的 Controller 上调用 setContainer 方法。 Controller 必须是 ContainerAwareInterface 的实例。
简化版:
class ContainerAwareControllerResolver extends ControllerResolver
{
private $container;
public __construct(ContainerInterface $container)
{
$this->container = $container;
parent::__construct();
}
public function getController(Request $request)
{
$controller = parent::getController($request);
if($controller instanceof ContainerAware ){
$controller->setContainer($this->container);
}
}
}
来源:
关于symfony - 创建一个实现 ContainerAwareInterface 的基础 Controller 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14939720/
当我扩展 ContainerAware 或实现 ContainerAwareInterface 时,该服务不会调用 setContainer。 class CustomService implemen
我遵循了 Fabien Potiencier 的教程,关于 how to create your own Framework on top of the Symfony Components .现在我
我是一名优秀的程序员,十分优秀!