在Controller中找到的存储库方法,但在Command中找不到

时间:2014-06-18 17:45:40

标签: symfony console repository

这只发生在我的生产服务器上。在我的开发框中,命令按预期工作。

当我在控制器中调用我的方法时,我可以很好地访问自定义存储库方法。 e.g:

$em = $this->getDoctrine()->getManager();

$myData = $em->getRepository('AcmeUserBundle:User')->customMethod();

当我在命令中请求相同的存储库和方法时,我得到:

Undefined method 'customMethod'. The method name must start with either findBy or findOneBy!

这告诉我它没有看到我的用户实体中定义的存储库。

这是我的命令代码:

<?php

namespace ACME\UserBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

class myCommand extends ContainerAwareCommand {

    protected function configure()
    {
        $this->setName("user:getMyData");
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {

        $logger = $this->getContainer()->get('logger');
        $logger->info('myCommand called');  
        // I'm also not getting this written to the logfile

        $em = $this->getContainer()->get("doctrine")->getManager();

        $myData = $em->getRepository('ACMEUserBundle:User')->customMethod();

        $output->writeln($myData);            

    }
}

如何在与控制器不同的命令中检索存储库?我知道使用 - &gt; getContainer(),否则?

由于记录器未记录,getContainer()是否存在问题?

1 个答案:

答案 0 :(得分:0)

您似乎为Doctrine的ORM提供了错误的服务名称。

更改您的服务名称

$this->get('doctrine')

$this->get('doctrine.orm.default_entity_manager')

您必须为ORM指定正确的服务名称,才能访问配置中定义的存储库方法。这些存储库已安装到您的ORM而不是Doctrine本身。

Custom Repositories

上的文档