无法扩展Doctrine的存储库

时间:2016-12-08 01:18:38

标签: symfony doctrine-orm

我正在尝试制作一个自定义Doctrine的ORM存储库并对其进行扩展,但我找不到让它工作的方法。到目前为止,这就是我所拥有的:

原始存储库

//AppBundle\Repository\LocaleRepository.php

namespace AppBundle\Repository;

use Doctrine\ORM\EntityRepository;
use JMS\DiExtraBundle\Annotation as DI;

class LocaleRepository extends EntityRepository
{

    protected myCustomFunction(){
    }
}

扩展存储库

//OfficeBundle\Repository\OfficeRepository.php

namespace OfficeBundle\Repository;

use AppBundle\Repository\LocaleRepository;

class OfficeRepository extends LocaleRepository
{
    //Empty class
}

我的好意:

namespace OfficeBundle\Entity;
// some calls to traits
use Doctrine\ORM\Mapping as ORM;

/**
 * Office
 *
 * @ORM\Table(name="office__office")
 * @ORM\Entity(repositoryClass="OfficeBundle\Repository\OfficeRepository")
 */
class Office implements TranslatableInterface{
    //...
}

最后是电话:

 $em = $this->getDoctrine()->getManager();
 $this->getEntityManager();
 $office=$em->getRepository('OfficeBundle:Office')->myCustomeFunction($slug);

这让例外:

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

如果我将myCustomeFunction放在OfficeRepository中,它可以正常工作,但它会降低存储库的extendind的目的。此外,控制器加载的存储库是正确的,vardumping类显示:'OfficeBundle \ Repository \ OfficeRepository'。

最后,我在办公室实体上使用KNP DoctrineBehaviors(可翻译)。

1 个答案:

答案 0 :(得分:4)

如果要在存储库类之外使用它,则必须创建方法 function resizePageFullScreen(){ window.moveTo(0,0) ; window.resizeTo(screen.availWidth,screen.availHeight); } <body onload="resizePageFullScreen();">

public