如何在Sonata Admin类(v4.0.0-rc.1版本)中获取容器实例
Sonata Admin v4.0.0-rc.1 容器实例获取方案
原有的 $this->getConfigurationPool()->getContainer() 方法在v4版本中已经被官方移除,你可以使用以下两种方案替代:
方案1:构造方法依赖注入(官方首选)
Sonata Admin v4 遵循Symfony依赖注入规范,推荐按需注入你需要的单个服务,而非获取整个容器,这也是Symfony生态的通用最佳实践。
示例:如果需要注入twig服务,直接在Admin类的构造方法中声明即可,无需额外配置:
use Sonata\AdminBundle\Admin\AbstractAdmin; use Twig\Environment; class CustomAdmin extends AbstractAdmin { public function __construct( // 声明你需要用到的服务 private Environment $twig, // 保留AbstractAdmin需要的原生参数 string $code = null, string $class = null, string $baseControllerName = null ) { parent::__construct($code, $class, $baseControllerName); } public function yourBusinessMethod() { // 直接使用注入的服务 $content = $this->twig->render('demo/tpl.html.twig'); } }
方案2:特殊场景下直接获取容器
如果确实有不可替代的场景需要获取完整容器实例,可以直接访问Admin类内置的受保护属性$container:
// 在你的Admin类方法内直接调用 $container = $this->container;
注意:该方式仅建议临时过渡使用,直接依赖容器会降低代码的可测试性和可维护性,符合规范的依赖注入是更优选择。
内容的提问来源于stack exchange,提问作者atlantic022
相关产品推荐
相关产品推荐

