Когда я пытаюсь перейти на страницу регистрации, у меня появляется эта ошибка
Предупреждение: spl_object_hash () ожидает, что параметр 1 будет объектом, задана строка, внутренняя ошибка сервера HTTP 500, необработанное исключение PHP Symfony \ Component \ Debug \ Exception \ ContextErrorException
Я знаю, что такого рода вопросы часто публиковались в переполнении стека, но они все еще не могли решить мою проблему. Вот почему я снова спрашиваю здесь, надеюсь, кто-нибудь может мне помочь.
Это мой регистрационный код контроллера EmployeController
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(),
));
}
Для большей индикации здесь указывается ошибка
$form = $this->createForm('AppBundle\Form\EmployeType', $employe);
Это моя регистрационная формаType (EmployeType.php)
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
]);
Моя организация Сотрудник
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;
И субъект пользователя
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));
}
BN: я использую FOSUser