Bonjour à tou.te.s !
j'ai créé un bundle basique pour en faire un vendor dans tous mes projets (histoire d'initialiser rapidement un nouveau projet).
Ce bundle contient une entité User avec les champs de base (login, mdp, rôles, etc)
J'ai ensuite créé un nouveau projet, avec ce bundle en vendor et sa propre entité User (qui extends celle du bundle) pour ajouter les champs spécifiques à mon projet (et notamment les relations).
Sauf que le framework manipule l'entité parente (et forcément, ça ne fonctionne pas "App\Controller\UserController::articles(): Argument #1 ($user) must be of type App\Entity\User, Global\CoreBundle\Entity\User given")
je ne peux pas simplement changer le typage de variables, car j'ai besoin de l'entité du projet pour avoir les champs spécifiques
ça fait des heures que je tourne en rond entre ParamConverter, Routing et autres ^^
y a -t-il une manière simple de manipuler la bonne entité ?
voici qq fichiers qui pourraient être la source de ce mal :
services.yaml
Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 parameters: services: _defaults: autowire: true # Automatically injects dependencies in your services. autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. App\: resource: '../src/' exclude: - '../src/DependencyInjection/' - '../src/Entity/' - '../src/Kernel.php' - '../src/Tests/' Global\CoreBundle\Controller\: resource: '../vendor/global/corebundle/src/Controller/' tags: ['controller.service_arguments'] App\Controller\: resource: '../src/Controller/' tags: ['controller.service_arguments'] Global\CoreBundle\Repository\UserRepository: tags: [ 'doctrine.repository_service' ] Global\CoreBundle\DataFixtures\UserFixtures: tags: [ 'doctrine.fixture.orm' ]
security.yaml
Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 security: password_hashers: App\Entity\User: algorithm: auto Global\CoreBundle\Entity\User: algorithm: auto enable_authenticator_manager: true providers: app_user_provider: entity: class: App\Entity\User property: login core_bundle_user_provider: entity: class: Global\CoreBundle\Entity\User property: login firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: lazy: true provider: app_user_provider logout: path: logout login_throttling: max_attempts: 3 custom_authenticator: App\Security\AppAuthenticator remember_me: secret: '%kernel.secret%' lifetime: 2592000 # 1 month in seconds path: / access_control: - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/articles/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
UserController.php
User.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <?php namespace App\Controller; use App\Entity\User; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class UserController extends AbstractController { #[Route('/articles/{user}', name: 'user_articles')] #[Entity('user', options: ['id' => 'user'])] public function articles(User $user): Response { dd($user->getArticles()); return $this->render('article/index.html.twig', [ 'controller_name' => 'UserController', 'username' => $user->getLogin() ]); } }
UserRepo
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 <?php namespace App\Entity; use Global\CoreBundle\Entity\User as CoreUser; use App\Repository\UserRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass=UserRepository::class) */ class User extends CoreUser { /** * @ORM\OneToMany(targetEntity=Article::class, mappedBy="user", orphanRemoval=true) */ private $articles; public function __construct() { $this->articles = new ArrayCollection(); } /** * @return Collection|Article[] */ public function getArticles(): Collection { return $this->articles; } public function addArticle(Article $article): self { if (!$this->articles->contains($article)) { $this->articles[] = $article; $article->setUser($this); } return $this; } public function removeArticle(Article $article): self { if ($this->articles->removeElement($article)) { if ($article->getUser() === $this) { $article->setUser(null); } } return $this; } }
merci d'avance !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <?php namespace App\Repository; use Global\CoreBundle\Repository\UserRepository as CoreUserRepository; class UserRepository extends CoreUserRepository { }
Partager