Php Symfony:can';无法启用自定义存储库

Php Symfony:can';无法启用自定义存储库,php,symfony,doctrine-orm,doctrine,Php,Symfony,Doctrine Orm,Doctrine,我正在尝试为我的symfony 2.8网站使用自定义存储库: 自定义存储库: // src/AppBundle/Entity/ExperimentationRepository namespace AppBundle\Entity; use Doctrine\ORM\EntityRepository; class ExperimentationRepository extends EntityRepository { public function getExperiment

我正在尝试为我的symfony 2.8网站使用自定义存储库:

自定义存储库:

// src/AppBundle/Entity/ExperimentationRepository
namespace AppBundle\Entity;

use Doctrine\ORM\EntityRepository;

class ExperimentationRepository extends EntityRepository
{    
    public function getExperimentationByUser($id){
        // do stuff and return results
    }    
}
实体:

// src/AppBundle/Entity/Experimentation
namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Experimentation
 *
 * @ORM\Table(name="experimentation")
 * @ORM\Entity(repositoryClass="AppBundle\Entity\ExperimentationRepository")
 */
class Experimentation{
   // sutff
}
控制器(我尝试在另一个捆绑包中使用自定义存储库的位置):

我得到了以下错误:

未定义的方法“GetExperimentByUser”。 方法名称必须以findBy或findOneBy开头

经过一些研究,我尝试检查是否调用了自定义存储库:

$repository=$this->getDoctrine()
        ->getRepository('AppBundle:Experimentation');
        $repositoryClass=get_class($repository);
echo $repositoryClass;
exit;
返回:

Doctrine\ORM\EntityRepository
所以我想我的自定义存储库根本没有被调用。但我无法找到原因。我尝试了几个动作(经过一些挖掘):

  • 清除缓存(
    应用程序/控制台缓存:清除
  • 清除条令缓存(
    app/console条令:缓存:清除元数据
  • 检查config.yml(在条令:orm下):
    自动映射:true
  • 检查config.yml(在条令:dbal下):
    type:annotation
  • 我没有任何配置/条令文件夹(这正常吗?)
什么都没用。还是有同样的错误。看起来框架完全忽略了实体类中的注释。有什么想法/建议吗

谢谢你的帮助

你试过这样做吗:

// src/ManageBundle/Controller/ManageController

$em = $this->getDoctrine()->getManager();
$repository = $em->getRepository('AppBundle:Experimentation');
$experimentations = $repository->getExperimentationByUser($id);
并生成实体

php app/console doctrine:generate:entities Experimentation

我终于成功了。在执行了几个命令之后,我成功地创建了
AppBundle/Resources/config/doctor文件
。它充满了
.orm.xml
文件,所以我从文档中获取了xml语法:

  <entity
     name="AppBundle\Entity\Experimentation"
     repository-class="AppBundle\Entity\ExperimentationRepository">


然而,我仍然不明白为什么注释系统不工作,因为我已经尽了很大努力来启用它。是否至少有一种方法可以检查启用了什么系统(XML、YAML或注释)?如果您有任何线索,请随时发表评论。

您只需删除缓存文件夹。使用CLI命令清除缓存对我不起作用<代码>php应用程序/控制台缓存:清除

是否生成了实体?相当神秘。您只定义了一个实体管理器?我怀疑某个地方有一个简单的打字错误。应用程序/控制台原则:映射:信息是否提取实体?是的,在使用注释时,将config/doctor设置为空是正常的。config/doctor是yaml或xml映射文件通常所在的位置。事实上,如果您在那里有文件,那么注释将被忽略。实体将被生成
app/console原则:映射:info
使用“OK”标记选择所有实体。请尝试将实体注释更改为
ORM\entity(repositoryClass=“Test”)
。您应该得到一个致命错误:
致命错误:在…中找不到类“Test”
如果您没有得到此错误,则无法正确读取批注。请在此处抓取线索。您是否确定编辑了正确的experiments.php文件?我有时会感到困惑,在不同的项目中编辑了一个完全不同的文件,或者忘记保存我的更改。您是否已将代码签入github?如果你有,我来看看。可能是一个简单的配置错误。是的,我试图生成实体。一切看起来都很好,只是加载页面时它不起作用。我尝试了您的代码,即使它与我的代码完全相同(您只需在中间添加一个存储库变量);这也解决不了问题。无论如何谢谢你!在最初的问题中,你说你检查了配置/条令?您是否也检查了AppBundle/Resources/config/doctor。如果你在那里有文件,那就可以解释为什么注释被忽略了。这正是发生的事情。如果我删除这些文件,会考虑使用注释吗?看起来这些XML是您自己创建的,在最初通过shell导入时没有使用注释格式?
  <entity
     name="AppBundle\Entity\Experimentation"
     repository-class="AppBundle\Entity\ExperimentationRepository">