symfony3.4 Предупреждение: spl_object_hash () ожидает, что параметр 1 будет объектом, задана строка - PullRequest
0 голосов
/ 11 марта 2019

Когда я пытаюсь перейти на страницу регистрации, у меня появляется эта ошибка

Предупреждение: 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...