Ich habe ein benutzerdefiniertes Repository in meinem Symfony-Projekt und möchte es wie ein Suchwerkzeug verwenden. Die Struktur meines Projekts ist die folgende:Wie verwende ich ein benutzerdefiniertes Repository in Symfony?
P.D. AKTUALISIERT Frage und Code
-Manager:
* BaseManager.php
* MyEntityManager.php
-Repository:
* BaseRepository.php
* MyEntityRepository.php
Nun, ich möchte den Zugang zu meinen benutzerdefinierten Repository und verwenden Sie die folgende Methode findByTitle
, die Methode sollte ein Array mit Objekten zurück, die Beschreibungsfeld ähnlich sein. Ich habe einen einfachen Druck (var_dump des Begriffs eingegeben) innerhalb meiner Funktion zu sehen, ob mein Browser zeigt es, aber es ist noch nicht zeigte ...
Mein BaseManager:
<?php
namespace AppBundle\Manager;
use AppBundle\Repository\BaseRepository;
class BaseManager
{
/**
* @var BaseRepository
*/
protected $repo;
/**
* @param BaseRepository $repo
*/
public function __construct(BaseRepository $repo)
{
$this->repo = $repo;
}
/**
* @param $model
* @return bool
*/
public function create($model)
{
return $this->repo->create($model);
}
/**
* @param CrudModel $model
* @return bool
*/
public function update($model)
{
return $this->repo->save($model);
}
/**
* @param CrudModel $model
* @return bool
*/
public function delete($model)
{
return $this->repo->delete($model);
}
/**
* @param $id
* @return null|object
*/
public function getOneById($id)
{
return $this->repo->findOneById($id);
}
/**
* @return array
*/
public function all()
{
return $this->repo->all();
}
}
MyEntityManager:
<?php
namespace AppBundle\Manager;
use AppBundle\Repository\MyEntityRepository;
use AppBundle\Entity\MyEntity;
/**
* Class MyEntityManager
* @package AppBundle\Manager
*/
class MyEntityManager extends BaseManager{
public function findByTitle($title){
echo '<h1>flux of code here</h1>';
return $this->repo->findByTitle($title);
}
public function findSimilars($term){
echo '<h1>flux of code here</h1>';
return $this->repo->findSimilars($term);
}
}
BaseRepository:
<?php
namespace AppBundle\Repository;
use Doctrine\ORM\EntityRepository;
abstract class BaseRepository extends EntityRepository
{
public function create($model, $autoFlush = true)
{
return $this->insert($model,$autoFlush);
}
public function save($model, $autoFlush = true)
{
return $this->insert($model,$autoFlush);
}
public function delete($model)
{
try{
$this->getEntityManager()->remove($model);
$this->getEntityManager()->flush();
return true;
}catch (\Exception $e){
echo $e->getMessage();
}
}
public function findOneById($id)
{
return $this->findOneBy(array('id' => $id));
}
public function all()
{
return $this->findAll();
}
private function insert($model, $autoFlush = true)
{
$this->getEntityManager()->persist($model);
if ($autoFlush) {
$this->getEntityManager()->flush();
return true;
}
}
}
MyEntityRepository:
<?php
namespace AppBundle\Repository;
use Doctrine\ORM\EntityRepository;
/**
* Class MyEntityRepository
* @package AppBundle\Repository
*/
class MyEntityRepository extends BaseRepository{
private function findById($id){
$query = $this->createQueryBuilder('myentity')
->where('myentity.id = :id')
->setParameter('id', $id)
->getQuery();
$myentity = $query->getResult();
return $myentity;
}
private function findByTitle($term){
echo '<h1>';
var_dump($term);
echo '</h1>',
$query = $this->createQueryBuilder('myentity')
->andwhere('myentity.description = :description')
->setParameter('description', $term)
->getQuery();
$myentity = $query->getResult();
return $myentity;
}
}
Der Anfang MyEntity:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Table(name="myentity")
* @ORM\Entity
* @ORM\Entity(repositoryClass="AppBundle\Repository\MyEntityRepository")
*/
class MyEntity {
......
Mein services.yml:
parameters:
app.myentity.repository.class: AppBundle\Repository\MyEntityRepository
app.myentity.manager.class: AppBundle\Manager\MyEntityManager
services:
app.myentity.repository:
class: %app.myentity.repository.class%
public: true
factory_service: doctrine.orm.entity_manager
factory_method: getRepository
arguments: [ AppBundle\Entity\MyEntity ]
app.myentity.manager:
class: %app.myentity.manager.class%
arguments: [@app.myentity.repository]
Und ich meinen Dienst in der folgenden Art und Weise aufrufen:
public function searchAction(Request $request, $term){
$manager = $this->get('app.myentity.manager');
$result = $manager->findByTitle($term);
echo '<h5>';
var_dump($result);
echo '</h5>';
....
}
Having Probleme beim Verständnis Ihrer Sätze, aber Sie könnten prüfen, ob Ihr Entity Manager Ihrer Entitätsklasse korrekt zugeordnet ist. Es klingt so, als ob Sie das Basisrepository erhalten und nicht Ihr eigenes. – Cerad
Sie sollten den Code angeben, den Sie verwenden möchten. –
Ja, es scheint, dass ich nur mein BaseRepository bekomme ... aber ich sehe meine Schuld nicht @Cerad –