symfony3.4 Warning: spl_object_hash() expects parameter 1 to be object, string given
J'ai cette erreur quand j'essaie de me rendre sur la page d’enregistrement :
Citation:
Warning: spl_object_hash() expects parameter 1 to be object, string given,
HTTP 500 Internal Server Error, Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException.
Je suis conscient que s'agissant de cette erreur bien de résolution existe déjà sur les forums populaires mais cela ne résous pas mon problème. Et c'est pour cette raison que je poste une fois de plus cette erreur en espérant avoir de l'aide. Voici mon controller d’enregistrement:
EmployeController.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public function newAction(Request $request)
{
$employe = new Employe();
/*$user = new User();*/
$form = $this->createForm('AppBundle\Form\EmployeType', $employe);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager()->getRepository(Employe::class);
/*$em2 = $this->getDoctrine()->getManager()->getRepository(User::class)->findBy(['roles']);*/
$vars = explode('@', $employe->getUser()->getEmail());
$employe->getUser()->setUsername($vars[0] . date('s'));
/*$employe->setUser($user->setRoles($em2));*/
$em->persist($employe);
$em->flush();
return $this->redirectToRoute('employe_show', array('id' => $employe->getId()));
}
return $this->render('employe/new.html.twig', array(
'employe' => $employe,
'form' => $form->createView(),
));
} |
Pour plus d'indication, l'erreur à été relevé ici:
Code:
$form = $this->createForm('AppBundle\Form\EmployeType', $employe);
Voilà le type de formulaire que j'envoi à la vue:
EmployeType.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->setAction($options['action'])
->add('nom')
->add('prenom')
->add('tel')
->add('email')
->add('user', EntityType::class, [
'class' => 'AppBundle\Entity\User',
'choice_label' => function (User $user){
return $user->getRoles();
},
'choices' => [
'Employé' => 'ROLE_USER',
'Responsable' => 'ROLE_ADMIN',
'GRH' => 'ROLE_SUPER_ADMIN',
],
'label' => 'Rôle',
'multiple' => true,
'expanded' => false
]); |
L'entité employe:
Employe.php
Code:
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
| namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Employe
*
* @ORM\Table(name="employes")
* @ORM\Entity(repositoryClass="AppBundle\Repository\EmployeRepository")
*/
class Employe
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=255)
*/
protected $nom;
/**
* @var string
*
* @ORM\Column(name="prenom", type="string", length=255)
*/
protected $prenom;
/**
* @var string
*
* @ORM\Column(name="tel", type="string", length=255, unique=true)
*/
protected $tel;
/**
* @ORM\OneToOne(targetEntity="User", mappedBy="employe")
*/
private $user;
/**
* @ORM\OneToMany(targetEntity="Conge", mappedBy="employe")
*/
private $conges;
/**
* @ORM\OneToMany(targetEntity="Affecter", mappedBy="employe")
*/
private $affecters; |
Et l'entité User:
User.php
Code:
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
| namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User extends BaseUser
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var array
*/
//protected $roles;
/**
* @ORM\OneToOne(targetEntity="Employe", inversedBy="user", cascade={"persist"})
* @ORM\JoinColumn(name="employe_id", referencedColumnName="id", nullable=false)
*/
private $employe;
public function __construct()
{
parent::__construct();
$this->setPlainPassword(substr(uniqid(), 0, 7));
} |
NB: J'utilise FOSUserBundle pour la gestion des utilisateurs