相关疑难解决方法(0)

如何在构造函数中调用实体管理器?

我一直在尝试调用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)

php constructor entitymanager symfony

12
推荐指数
2
解决办法
2万
查看次数

Symfony2:注入@ security.context以获取当前用户.如何避免"ServiceCircularReferenceException"?注入整个容器?

来自这个帖子和修复后的东西我在另一个问题/安全问题/问题.

正如你在其他帖子中看到的那样,我正在尝试在监听器中注入安全上下文,但是如果我保持代码完整而没有触摸我得到了这个错误:

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按照这里的说明转换服务,看看 …

security dependency-injection symfony doctrine-orm

4
推荐指数
1
解决办法
7736
查看次数