Comment accéder au référentiel de méthodes pour une entité dans symfony2?
Je suis coincé avec un problème s'il vous plaît m'aider avec elle. Voici la scenarario:
J'ai une entité "User" et de ce référentiel "UserRepository", à l'intérieur de l'entité, il y a seulement les méthodes getter et setter. Toutes les requêtes que j'ai écrite à UserRepository. Maintenant à l'intérieur de mon UserController je suis en train de dépôt d'accès à des méthodes dont je ne suis pas en mesure de le faire.
par exemple
L'utilisateur de l'entité:
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();
....
}
}
....
Comment puis-je accéder au référentiel de méthodes pour une entité? Est-il possible ? Si non, quelles sont les alternatives pour la solution?
J'ai conscience de la réalité de l'entité et de référentiel n'avez pas besoin d'être au courant de toutes les autres, je suis juste essayer de méthodes de dépôt d'accès
Pas de. Vous ne pouvez pas accéder référentiel de méthodes directement à partir de votre entité. Il n'y a pas de lien direct entre les deux. Le sayHelloWold méthode doit être dans l'entité elle-même. Ou bien vous passez une entité: $userRepository->sayHelloWorld($utilisateur);
merci pour vos pensées, je suis capable d'appel référentiel de méthodes par le passage de l'entité elle-même, cependant, je me demande est-ce la façon appropriée de le faire? est-il d'autres alternatives, comme la création d'un service qui ont des méthodes détiennent actuellement par UserRepository? Je pense à propos de la création d'un service plutôt en passant entité pour chaque méthode dans repositoy
J'ai ajouté des méthodes pour l'itération d'une entité utilisateur soit d'un contrôleur ou d'un modèle.
Je n'ai $em->getRepository('AcmeDemoBundle:l'Utilisateur')->findById(array(1,2,3,4,5)); pour récupérer plusieurs utilisateurs.une Cependant à l'adresse de ma préoccupation majeure, comme @cerad mentionné dans son commentaire, il n'est pas possible directement à l'accès référentiel des méthodes que j'essayais d'atteindre
Pas de. Vous ne pouvez pas accéder référentiel de méthodes directement à partir de votre entité. Il n'y a pas de lien direct entre les deux. Le sayHelloWold méthode doit être dans l'entité elle-même. Ou bien vous passez une entité: $userRepository->sayHelloWorld($utilisateur);
merci pour vos pensées, je suis capable d'appel référentiel de méthodes par le passage de l'entité elle-même, cependant, je me demande est-ce la façon appropriée de le faire? est-il d'autres alternatives, comme la création d'un service qui ont des méthodes détiennent actuellement par UserRepository? Je pense à propos de la création d'un service plutôt en passant entité pour chaque méthode dans repositoy
J'ai ajouté des méthodes pour l'itération d'une entité utilisateur soit d'un contrôleur ou d'un modèle.
Je n'ai $em->getRepository('AcmeDemoBundle:l'Utilisateur')->findById(array(1,2,3,4,5)); pour récupérer plusieurs utilisateurs.une Cependant à l'adresse de ma préoccupation majeure, comme @cerad mentionné dans son commentaire, il n'est pas possible directement à l'accès référentiel des méthodes que j'essayais d'atteindre
OriginalL'auteur Rahul | 2014-07-12
Vous devez vous connecter pour publier un commentaire.
Tout est possible cependant vous ne devriez pas accéder à l'entité du référentiel de l'entité elle-même en raison de la séparation des préoccupations.
Voir ce Stackoverflow réponse pour plus de détails.
Fondamentalement, l'idée est que vous voulez que votre application soit organisé de la façon suivante.
En bref:
Contrôleur > Référentiel > Entités.
Il ne faut pas aller dans l'autre sens, sinon cela crée un désordre.
Si vous souhaitez aller un peu plus loin dans la séparation des préoccupations, vous pouvez effectuer les opérations suivantes.
Contrôleur > Service > Référentiel > Entités
Solutions alternatives:
Il y a probablement d'autres, mais vous savez mieux comment votre application est organisé.
Vous devriez certainement utiliser des templates twig (c'est toujours utile) et elle est faite pour que (l'extension de fichier peut également être
*.json.twig
). Votre meilleur pari est de charger les données en "parallèle", et l'injecter dans vos entités et d'accéder aux données par le biais de votre entité. Il sera plus facile à déboguer et optimiser plus tard.désolé je n'ai pas "charger les données en "parallèle "" pouvez-vous svp me donner des infos?
comme un autre Référentiel méthode, un appel de vos entités, un appel pour les données supplémentaires
OriginalL'auteur Thomas Potaire
Vous devez déclarer le
UserRepository
comme unEntityRepository
pour votre entité utilisateur. Dans votreUser
entité ajouter cette annotation:Voir les docs pour une description plus détaillée.
OriginalL'auteur ferdynator
Si le bundle est Acme/DemoBundle, alors on pourrait s'attendre à un minimum
Entité utilisateur
Utilisateur référentiel
Il est vrai aussi qu'avec un tableau d'id, on peut aussi faire ce qui suit dans un contrôleur:
Pour itérer thru utilisateurs dans un contrôleur, on peut alors utiliser une boucle foreach, comme dans:
ou dans un modèle:
Vous pourriez faire
$users = ...->findAllById($idArray); $firstUser = $users[0];
oui je pourrais le faire, je veux dire que je suis en mesure d'effectuer une itération utilisateurs, mon souci principal est l'accès "référentiel" des méthodes pour chaque utilisateur. Est-il possible de faire ceci: $firstUser->someMethodFromUserRepo();
Pas de. Ajouter un référentiel méthode avec un utilisateur en tant que paramètre. Injecter de l'entité qui n'est pas le référentiel.
OriginalL'auteur geoB
Vous pouvez utiliser le test de charge de l'événement, de la doctrine et de l'injecter tout ce que vous voulez dans l'entité. L'écouteur d'événement ressemble:
et de service.yml:
De cource de votre Entité a besoin de la méthode setEntityManager et vous êtes prêt.
OriginalL'auteur Rawburner