这只发生在我的生产服务器上。在我的开发框中,命令按预期工作。
当我在控制器中调用我的方法时,我可以很好地访问自定义存储库方法。 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()是否存在问题?
答案 0 :(得分:0)
您似乎为Doctrine的ORM提供了错误的服务名称。
更改您的服务名称
$this->get('doctrine')
要强>
$this->get('doctrine.orm.default_entity_manager')
您必须为ORM指定正确的服务名称,才能访问配置中定义的存储库方法。这些存储库已安装到您的ORM而不是Doctrine本身。
上的文档