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
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()
        ]);
    }
}
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
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;
    }
}
UserRepo
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
{
 
}
merci d'avance !