Bonjour,
Voilà je débute avec Symfony2 et je rencontre actuellement un souci avec FUB (FOSUserBundle).
Tout fonctionne correctement, mais j'ai un souci au niveau de la récupération du user connecté dans un contrôleur de gestion d'articles.
C'est pour gérer une référence utilisateur au niveau de la news pour savoir qui a créé/modifié la news.
Voici les codes de mes fichiers:
Test\UserBundle\TestUserBundle.php
Test\UserBundle\Entity\User
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?php namespace Test\UserBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; class TestUserBundle extends Bundle { public function getParent() { return 'FOSUserBundle'; } }
Test\SiteBundle\Entity\News.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 <?php namespace Test\UserBundle\Entity; use Doctrine\ORM\Mapping as ORM; use FOS\UserBundle\Entity\User as BaseUser; /** * Test\UserBundle\Entity\User * * @ORM\Table(name="users") * @ORM\Entity */ class User extends BaseUser { /** * @var integer $id * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM\Column(type="string", nullable=true) * @var type */ private $avatar; /** * Get id * * @return integer */ public function getId() { return $this->id; } [...]
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106 <?php namespace Test\SiteBundle\Entity; use Symfony\Component\Validator\Constraints\DateTime; use \Symfony\Component\Validator\Mapping\ClassMetadata; use \Symfony\Component\Validator\Constraints\NotBlank; use \Symfony\Component\Validator\Constraints\MinLength; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="Test\SiteBundle\Repository\NewsRepository") * @ORM\Table(name="news") * @ORM\HasLifecycleCallbacks() * * @author ke2007 * */ class News { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") * @var integer */ protected $id; /** * @ORM\Column(type="string") * @var string */ protected $title; /** ----------- [...] ----------- */ /** * @ORM\ManyToOne(targetEntity="Test\UserBundle\Entity\User") * @var int $user_created */ protected $user_created; /** * @ORM\Column(nullable=true) * @ORM\ManyToOne(targetEntity="Test\UserBundle\Entity\User") * @var int $user_updated */ protected $user_updated; public function __construct() { $this->setUserUpdated(NULL); } /** * Get id * @return integer */ public function getId() { return $this->id; } /** ----------- [...] ----------- */ /** * Set user_updated * * @param string $userUpdated */ public function setUserUpdated($userUpdated) { $this->user_updated = $userUpdated; } /** * Get user_updated * * @return string */ public function getUserUpdated() { return $this->user_updated; } /** * Set user_created * * @param Test\UserBundle\Entity\User $userCreated */ public function setUserCreated(\Test\UserBundle\Entity\User $userCreated) { $this->user_created = $userCreated; } /** * Get user_created * * @return Test\UserBundle\Entity\User */ public function getUserCreated() { return $this->user_created; } }
Et enfin la classe du contrôleur de "news" où je souhaiterai récupérer et utiliser le user pour définir qui a créé et par la suite modifié la "news".
Test\SiteBundle\Controller\NewsController.php
Le message d'erreur que j'obtiens et le suivant:
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
55
56 <?php namespace Test\SiteBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use \FOS\UserBundle\Model\UserInterface; use \Symfony\Component\Security\Core\Exception\AccessDeniedException; use Test\SiteBundle\Form\NewsType; use Test\SiteBundle\Entity\News; class NewsController extends Controller { /** ---------- [...] --------------- */ public function createAction() { $news = new News(); $user = $this->getUser(); $news->setUserCreated($user); $form = $this->createForm(new NewsType(), $news); $form->bindRequest($this->getRequest()); if($form->isValid()) { $em = $this->getDoctrine()->getEntityManager(); $em->persist($news); $em->flush(); $this->get('session')->setFlash('notice-flash', 'News créée avec succès'); $this->generateUrl('TestSite_news_show', array( 'id' => $news->getId() )); } return $this->render('TestSiteBundle:News:form.html.twig', array( 'news' => $news, 'form' => $form->createView() )); } /** ---------- [...] --------------- */ /** * Méthode pour récupérer un user mais qui ne fonctionne pas... */ protected function getUser() { $user = $this->container->get('security.context')->getToken()->getUser(); if(!is_object($user) || !$user instanceof UserInterface) throw new AccessDeniedException('Vous n\'avez pas accès à cette section'); } }
Merci de votre aideCatchable Fatal Error: Argument 1 passed to Test\SiteBundle\Entity\News::setUserCreated() must be an instance of Test\UserBundle\Entity\User, null given, called in C:\wamp\www\Test\src\Test\SiteBundle\Controller\NewsController.php on line 29 and defined in C:\wamp\www\Test\src\Test\SiteBundle\Entity\News.php line 218![]()
Partager