Bonjour,
Voila je rencontre un petit problème avec mon code.
Alors, avant de posté ce sujet, je tiens à signalé que j'ai fais le tour de quelques sujets du même genre mais ils proposent tous la même solution (vider le cache en ligne de commande, manuellement, avoir l'annotation @ORM\Entity(repositoryClass="monBundle\Repository\EntityRepository" dans son Entity).
J'ai essayé ses solutions mais... :(
Sujets vus:
1 - https://openclassrooms.com/forum/sujet/symfony-3-undefined-method-getadverts
2 - https://openclassrooms.com/forum/sujet/symfony-3-26
3 - https://openclassrooms.com/forum/sujet/symfony-2-repository-non-reconnu-29501 (Pour celui-ci, ce serait un bug au niveau de Symfony)
4 - https://zestedesavoir.com/forums/sujet/1352/foire-aux-questions-symfony/?page=2#p23300
Je vous donne mes codes
Le controller.php
<?php
namespace ISIBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use ISIBundle\Entity\Eleve;
use ISIBundle\Repository\EleveRepository;
use ISIBundle\Entity\Anneescolaire;
use ISIBundle\Form\EleveType;
use Doctrine\ORM\EntityRepository;
class EleveController extends Controller
{
public function indexAction(Request $request, $as, $regime)
{
$repoEleve = $this->getDoctrine()->getManager()->getRepository('ISIBundle:Eleve');
$repo = get_class($repoEleve);
if($regime === 'AC')
{
$eleves = $repoEleve->elevesAcademie();
}
else {
$eleves = $repoEleve->elevesCentreFormation();
}
return $this->render('ISIBundle:Eleve:index.html.twig', array(
'asec' => $request->query->get('as'),
'eleves' => $eleves,
'regime' => $regime
));
// return new Response($repo);
}
}
?>
Et là, le Repository.php
<?php
namespace ISIBundle\Repository;
use Doctrine\ORM\QueryBuilder;
use ISIBundle\Repository;
use ISIBundle\Entity\Eleve;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManagerInterface;
class EleveRepository extends \Doctrine\ORM\EntityRepository
{
// Récuperation des élèves de l'académie
public function elevesAcedemie()
{
// $elevesAcademie = $this->_em->createQuery('SELECT * FROM ISIBundle:Eleve e WHERE e.matricule LIKE '*A*'');
$qb = $this->createQueryBuilder('e');
$qb->where('a.matricule LIKE LIKE '*A*'');
// return $elevesAcademie->getResult();
return $qb->getQuery()
->getResult();
}
// Récuperation des élèves du centre de formation
public function elevesCentreFormation()
{
$elevesCentreFormation = $this->_em->createQuery('');
return $elevesCentreFormation->getResult();
}
// Récupération du dernier matricule enregistré
public function dernierMatricule()
{
$dernierMatricule = $this->_em->createQuery(
'SELECT
MAX(DISTINCT(SUBSTRING(SUBSTRING(e.matricule, 1, LENGTH(e.matricule) - 4), 5))) AS plus_grand_matricule
FROM ISIBundle:Eleve e');
return $dernierMatricule->getResult();
}
}
//MAX(DISTINCT(CAST(SUBSTRING(SUBSTRING(e.matricule, 1, LENGTH(e.matricule) - 4), 5) AS SIGNED INTEGER))) AS plus_grand_matricule
?>
Et enfin mon Entity.php
<?php
namespace ISIBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Eleve
*
* @ORM\Table(name="eleve", indexes={@ORM\Index(name="contact_pere", columns={"contact_pere"}), @ORM\Index(name="contact_mere", columns={"contact_mere"}), @ORM\Index(name="contact", columns={"contact"})})
* @ORM\Entity(repositoryClass="ISIBundle\Repository\EleveRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Eleve
{
//l'entity fais plus de mille lignes, je ne présente donc que ça définition
}
Je veux accéder à la méthode de mon Repository
Voici le message que j'obtiens lorsque que je veux accéder à une méthode de mon répository:
Undefined method 'maMethodePersonnelle'. The method name must start with either findBy or findOneBy!
Avec tous ce code (qui a mon sens est bien écrit : le repositoryClass de l'entité bien défini, le Repository lui même dans monBundle\Repository, l'Entity dans monBundle\Entity) je ne comprends pas d'où vient cette erreur.
Pourriez-vous me proposer une solution
Mon problème est résolue.
Tu pourrais nous présenter ton code? Histoire de voir ce que tu fais.
@youstra j'ai résolu ce problème là, il me suffit de supprimer le dossier Doctrine qui a été généré lors du mapping. En tout cas, merci!