Wie der Zugriff auf repository-Methoden für ein Unternehmen in symfony2?
Ich komme bei einem problem bitte helfen Sie mir mit ihm. Hier ist die scenarario:
Ich habe eine Entität "Benutzer" und die entsprechende repository "UserRepository" in meiner Einheit gibt es nur getter-und setter-Methoden. Alle benutzerdefinierten Abfragen habe ich geschrieben um UserRepository. Jetzt in meinem UserController, ich bin versucht, Zugriff auf repository-Methoden, die ich bin nicht in der Lage, dies zu tun.
z.B.
Entität " Benutzer:
class User
{
...
public function getId()
{
return $this->id;
}
public function setId($id)
{
return $this->id=$id;
}
public function setProperty($property)
{
$this->property = $property;
}
public function getProperty()
{
return $this->property;
}
....
}
?>
UserRepository:
class UserRepository extends EntityRepository
{
public function findUsersListingById($id)
{
$queryBuilder = $this->getEntityManager()->createQueryBuilder();
$query = $em->createQuery(
"SELECT U
FROM UserEntityPathGoesHere
WHERE U.id IN (".implode(",", $id).")"
);
$users = $query->getResult();
return $users;
}
public function sayHelloWorld(){
echo ' Hello World';
}
}
?>
UserController
class UserController
{
...
$users=$this->getDoctrine()
->getRepository('MyUserEntityPath')
->findUsersListingById($ids);
//now I have multiple users I want to iterate through each user for associating additional data with each user
foreach($users as $user)
{
$temp = array();
//I am able to access getId method which is defined in User entity
$temp['id'] = $user->getId();
//however I am not able to access method from UserRepository, I tried something like below which gives me error call to undefined function sayHelloWorld
$temp['status'] = $user->sayHelloWorld();
....
}
}
....
Wie kann ich access repository-Methoden für ein Unternehmen? Ist es möglich ? Wenn nicht, dann was sind die alternativen für die Lösung?
- Ich sich der Tatsache bewusst entity-und repository-brauchen nicht zu wissen, jeder andere, ich versuche nur, um Zugriff auf repository-Methoden
- Nein. Sie keinen Zugriff auf repository-Methoden direkt aus Ihrer Entität. Es gibt keine direkte Verbindung zwischen den beiden. Die sayHelloWold Methode in der entity selbst. Oder Sie übergeben ein Unternehmen es: $userRepository->sayHelloWorld($user);
- vielen Dank für Ihre Gedanken, ich bin in der Lage, call-repository-Methoden durch die übergabe Unternehmens selbst, aber ich Frage mich, ist dies der geeignete Weg, es zu tun? gibt es irgendeine andere alternative, wie die Erstellung von service, der Methoden aktuell halten, indem UserRepository? Ich denke zum erstellen von Dienst-eher vorbei Entität auf jede Methode im repositoy
- Ich habe Methoden für die Iteration einer Benutzer-Entität entweder einen controller oder eine Vorlage.
- Ich habe $em>getRepository('AcmeDemoBundle:User')->findById(array(1,2,3,4,5)); fetch mehrere Benutzer.eine Jedoch für meine Hauptsorge, wie @cerad erwähnt in seinem Kommentar ist es nicht mehr möglich direkt auf repository-Methoden, die ich versuchte zu erreichen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alles ist möglich jedoch sollten Sie nicht auf das Unternehmens-repository von der Person selbst wegen der Trennung von Bedenken.
Sehen diese Stackoverflow-Antwort für mehr details.
Im Grunde die ganze Idee ist, dass Sie wollen, um Ihre Anwendung organisiert der folgenden Weise.
Kurz:
Controller > Repository > Personen.
Sollte es nicht gehen in die andere Richtung, sonst entsteht ein Durcheinander.
Wenn Sie wollen ein bisschen weiter gehen, in die Trennung von Anliegen können Sie das folgende tun.
Controller > Service > Repository > Entitäten
Alternative Lösungen:
Gibt es wohl andere, aber Sie würden besser wissen, wie deine Anwendung aufgebaut ist.
*.json.twig
). Ihre beste Wette ist, laden Sie die Daten "parallel", injizieren es in den Entitäten und den Zugriff auf die Daten über Ihre Person. Es wird leichter sein, zu Debuggen und optimieren Sie später.Müssen Sie erklären die
UserRepository
alsEntityRepository
für Ihre Benutzer-Entität. In IhremUser
Person hinzufügen, diese Anmerkung:Sehen die docs für eine detailliertere Beschreibung.
Wenn das bundle Acme/DemoBundle, dann würde man erwarten, dass mindestens
Entität "Benutzer"
Benutzer-repository
Es ist auch wahr, dass mit einem array von ids, man kann auch in einem controller:
Durchlaufen thru Benutzer in einem controller, kann man dann mit einer foreach-Schleife wie in:
oder in eine Vorlage:
$users = ...->findAllById($idArray); $firstUser = $users[0];
Können Sie die postLoad Veranstaltung von Lehre und Spritzen alles, was, die Sie wollen in das Unternehmen. Der Ereignis-listener sieht so aus:
und service.yml:
Natürlich die Entität, muss die Methode setEntityManager und Ihr seid bereit.