我一直在尝试调用Entity Manager构造函数:
function __construct()
{
$this->getDoctrine()->getEntityManager();
...
Run Code Online (Sandbox Code Playgroud)
但是,正如我在这个答案中看到的:Stackoverflow问题,它无法完成.
所以我想知道是否有办法实现它,因为我必须经常调用它,并希望在获取存储库后在构造函数中做一些事情.
编辑:
我试过@MKhalidJunaid回答:
//src/MSD/HomeBundle/Resources/config/services.yml
services:
imageTransController.custom.service:
class: MSD\HomeBundle\Controller\ImageTransController
arguments:
EntityManager: "@doctrine.orm.entity_manager"
Run Code Online (Sandbox Code Playgroud)
-
//app/config/config.php
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: doctrine_extensions.yml }
- { resource: "@MSDHomeBundle/Resources/config/services.yml" }
Run Code Online (Sandbox Code Playgroud)
-
//src/MSD/HomeBundle/Controller/ImageTransController.php
namespace MSD\HomeBundle\Controller;
use Doctrine\ORM\EntityManager;
use MSD\HomeBundle\Entity\Imagen as Imagen;
use MSD\HomeBundle\Controller\HomeController as HomeController;
class ImageTransController extends HomeController
{
protected $em ;
function __construct(EntityManager $entityManager)
{
...
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误:
Catchable Fatal Error: Catchable Fatal Error: …Run Code Online (Sandbox Code Playgroud) 来自这个帖子和修复后的东西我在另一个问题/安全问题/问题.
正如你在其他帖子中看到的那样,我正在尝试在监听器中注入安全上下文,但是如果我保持代码完整而没有触摸我得到了这个错误:
ServiceCircularReferenceException:检测到服务"doctrine.orm.default_entity_manager"的循环引用
因此,阅读和研究我找到了一个解决方案,但我不清楚它是否是正确的,或者它对我的应用程序是否安全.所以这就是我做的:
而不是注入[@security.context]我这样做:
services:
orderhascomment.listener:
class: PL\OrderBundle\Listener\OrderHasCommentListener
arguments: [@service_container]
tags:
- { name: doctrine.event_listener, event: prePersist, method: onPrePersist }
Run Code Online (Sandbox Code Playgroud)
我的听众OrderHasCommentListener.php如下:
namespace PL\OrderBundle\Listener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\DependencyInjection\ContainerInterface;
class OrderHasCommentListener {
protected $container;
public function __construct(ContainerInterface $container = null) {
$this->container = $container;
}
/**
*
* @param LifecycleEventArgs $args
*/
public function onPrePersist(LifecycleEventArgs $args) {
$entity = $args->getEntity();
$user = $this->container->get('security.context')->getToken()->getUser();
$entity->setUser($user);
}
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?还是存在另一个?我认为注入整个容器是一个坏主意,因为我只需要安全上下文,那么解决方案是什么?(https://insight.sensiolabs.com/what-we-analyse)
试图在服务中转换UserCallable
我正在尝试UserCallable按照这里的说明转换服务,看看 …