2016-12-08 15 views
-1

Ich versuche ein benutzerdefiniertes ORM-Repository von Doctrine zu erstellen und zu erweitern, aber ich finde keinen Weg, es zum Laufen zu bringen. Bisher das ist, was ich habe:Ich kann das Doctrine-Repository nicht erweitern

Das ursprüngliche Repository

//AppBundle\Repository\LocaleRepository.php 

namespace AppBundle\Repository; 

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

class LocaleRepository extends EntityRepository 
{ 

    protected myCustomFunction(){ 
    } 
} 

Der erweiterte Repository

//OfficeBundle\Repository\OfficeRepository.php 

namespace OfficeBundle\Repository; 

use AppBundle\Repository\LocaleRepository; 

class OfficeRepository extends LocaleRepository 
{ 
    //Empty class 
} 

Mein entiy:

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{ 
    //... 
} 

Und schließlich der Anruf:

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

Diese trows die Ausnahme:

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

Wenn ich myCustomeFunction innerhalb des OfficeRepository legen es gut funktioniert, aber es senkt den Zweck extendind Repository. Außerdem ist das vom Controller geladene Repository das richtige, und die Klasse zeigt Folgendes: "OfficeBundle \ Repository \ OfficeRepository".

Schließlich verwende ich KNP DoctrineBehaviors (übersetzbar) auf der Büroeinheit.

Antwort

4

Sie müssen Ihre Methode public erstellen, wenn Sie sie außerhalb der Repository-Klasse verwenden möchten.

class LocaleRepository extends EntityRepository 
{ 

    public function myCustomFunction() 
    { 
     .... 
    } 
} 
+0

Danke, es war so obvius ... Ich bin Dump –

Verwandte Themen