2016-07-08 14 views
0

Ich versuche Symfony2 und zur Zeit zu lernen: Entity Relationships/Verbände (Beitritt zu verwandter Datensätze). Ich habe ein Problem, das ich nicht richtig bekommenNotice: Undefined index: Rollen in Symfony 2.7

Notice: Undefined index: roles 500 Internal Server Error - ContextErrorException

Dies ist mein Code:

* Klasse Rolle:

class Roles 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 


    /** 
    * @var string 
    * 
    * @ORM\Column(name="nom_roles", type="string", length=225, nullable=false) 
    *@Assert\NotBlank(message="le champ nom du role est obligatoire") 
    * 
    */ 
    Private $name_role; 

    /** 
    * @var ArrayCollection $groups 
    * 
    * @ORM\OneToMany(targetEntity="Groups", mappedBy="roles", cascade={"persist","merge"}) 
    *@Assert\Valid() 
    */ 
    protected $groups; 
    /** 
    * @var ArrayCollection Permissions $permision 
    * 
    * @ORM\ManyToMany(targetEntity="Permissions", inversedBy="roleGroup", cascade={"persist", "merge"}) 
    * @ORM\JoinTable(name="roles_permissions", 
    * joinColumns={@ORM\JoinColumn(name="id_rolesGR", referencedColumnName="id")}, 
    * inverseJoinColumns={@ORM\JoinColumn(name="id_permGR", referencedColumnName="id_per")} 
    *) 
    * @Assert\Valid() 
    */ 
    protected $permissions_role; 

    /** 
    * Roles constructor. 
    */ 
    public function __construct() 
    { 
     $this->groups = new ArrayCollection(); 
     $this->permissions_role = new ArrayCollection(); 
    } 

-Klasse Berechtigungen:

class Permissions { 

/** 
* @var integer 
* 
* @ORM\Column(name="id_per", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @var string 
* @ORM\Column(name="nom_permisions", length=255, nullable=true) 
* @Assert\NotBlank(message="le choix des permissions sont obligatoire") 
*/ 
private $name_permissions; 


/** 
* @var ArrayCollection Roles $roleGroup 
* 
* Inverse Side 
* 
* @ORM\ManyToMany(targetEntity="Roles", mappedBy="permissions", cascade={"persist", "merge"}) 
*@Assert\Valid() 
*/ 
protected $roleGroup; 

-Klasse Gruppen:

class Groups 
{ 

/** 
* @var integer 
* 
* @ORM\Column(name="id_groupes", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
* 
*/ 
private $id; 
/** 
* @var string 
* 
*-- contrainte sur le chmap 
* 
* @Assert\NotBlank(message="le champ nom du groupe est obligatoire") 
* 
* @Assert\Type(
*  type="string", 
*  message="la valeur {{ value }} n'est pas valide {{ type }}. 
*  Elle est de type chaine des cractéres" 
*) 
* 
* @Assert\Length(
*  min=5, 
*  max= 50, 
*  minMessage="votre nom du groupe doit comprendre au moins {{ limit }} caractéres", 
*  maxMessage="votre nom du groupe doit comprendre au maximun {{ limit }} caractéres" 
*) 
* 
* @ORM\Column(name="nom_groupe", type="string", length=225, nullable=false) 
*@Assert\NotBlank(message="le champ nom du groupe est obligatoire") 
* 
* 
*/ 
Private $name_groups; 

/** 
* @var DateTime() 
* 
* @ORM\Column(name="date_creation", type="datetime",nullable=false) 
* 
*@Assert\DateTime() 
*/ 
private $date_create; 

/** 
* @ORM\OneToOne(targetEntity="Images", cascade={"persist", "merge", "remove"}) 
* @ORM\JoinColumn(name="image_id", referencedColumnName="id_images") 
* @Assert\Valid() 
*/ 
protected $image; 
/** 
* @var Roles $role 
* 
* @ORM\ManyToOne(targetEntity="Roles", inversedBy="groups", cascade={"persist", "merge"}) 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="role_id", referencedColumnName="id", nullable=false) 
* }) 
* @Assert\Valid() 
*/ 
protected $role; 

-hier ist mein Controller

class GroupsController extends Controller 

{ public function indexAction() 
    { 
    $em = $this->getDoctrine()->getManager(); 

    $entities = $em->getRepository('GroupsBundle:Groups')->findAll(); 

    return $this->render('GroupsBundle:Groups:index.html.twig', array(
     'entities' => $entities, 
    )); 
} 
/** 
* Creates a new Groups entity. 
* 
*/ 
public function createAction(Request $request) 
{ 
    $entity = new Groups(); 
    $form = $this->createCreateForm($entity); 
    $form->handleRequest($request); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($entity); 
     $em->flush(); 

     return $this->redirect($this->generateUrl('groups_show', array('id' => $entity->getId()))); 
    } 

    return $this->render('GroupsBundle:Groups:new.html.twig', array(
     'entity' => $entity, 
     'form' => $form->createView(), 
    )); 
} 

/** 
* Creates a form to create a Groups entity. 
* 
* @param Groups $entity The entity 
* 
* @return \Symfony\Component\Form\Form The form 
*/ 
private function createCreateForm(Groups $entity) 
{ 
    $form = $this->createForm(new GroupsType(), $entity, array(
     'action' => $this->generateUrl('groups_create'), 
     'method' => 'POST', 
    )); 

    $form->add('submit', 'submit', array('label' => 'Create')); 

    return $form; 
} 

/** 
* Displays a form to create a new Groups entity. 
* 
*/ 
public function newAction() 
{ 
    $entity = new Groups(); 
    $form = $this->createCreateForm($entity); 

    return $this->render('GroupsBundle:Groups:new.html.twig', array(
     'entity' => $entity, 
     'form' => $form->createView(), 
    )); 
} 

/** 
* Finds and displays a Groups entity. 
* 
*/ 
public function showAction($id) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $entity = $em->getRepository('GroupsBundle:Groups')->find($id); 

    if (!$entity) { 
     throw $this->createNotFoundException('Unable to find Groups entity.'); 
    } 

    $deleteForm = $this->createDeleteForm($id); 

    return $this->render('GroupsBundle:Groups:show.html.twig', array(
     'entity'  => $entity, 
     'delete_form' => $deleteForm->createView(), 
    )); 
} 

/** 
* Displays a form to edit an existing Groups entity. 
* 
*/ 
public function editAction($id) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $entity = $em->getRepository('GroupsBundle:Groups')->find($id); 

    if (!$entity) { 
     throw $this->createNotFoundException('Unable to find Groups entity.'); 
    } 

    $editForm = $this->createEditForm($entity); 
    $deleteForm = $this->createDeleteForm($id); 

    return $this->render('GroupsBundle:Groups:edit.html.twig', array(
     'entity'  => $entity, 
     'edit_form' => $editForm->createView(), 
     'delete_form' => $deleteForm->createView(), 
    )); 
} 

/** 
* Creates a form to edit a Groups entity. 
* 
* @param Groups $entity The entity 
* 
* @return \Symfony\Component\Form\Form The form 
*/ 
private function createEditForm(Groups $entity) 
{ 
    $form = $this->createForm(new GroupsType(), $entity, array(
     'action' => $this->generateUrl('groups_update', array('id' => $entity->getId())), 
     'method' => 'PUT', 
    )); 

    $form->add('submit', 'submit', array('label' => 'Update')); 

    return $form; 
} 
/** 
* Edits an existing Groups entity. 
* 
*/ 
public function updateAction(Request $request, $id) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $entity = $em->getRepository('GroupsBundle:Groups')->find($id); 

    if (!$entity) { 
     throw $this->createNotFoundException('Unable to find Groups entity.'); 
    } 

    $deleteForm = $this->createDeleteForm($id); 
    $editForm = $this->createEditForm($entity); 
    $editForm->handleRequest($request); 

    if ($editForm->isValid()) { 
     $em->flush(); 

     return $this->redirect($this->generateUrl('groups_edit', array('id' => $id))); 
    } 

    return $this->render('GroupsBundle:Groups:edit.html.twig', array(
     'entity'  => $entity, 
     'edit_form' => $editForm->createView(), 
     'delete_form' => $deleteForm->createView(), 
    )); 
} 
/** 
* Deletes a Groups entity. 
* 
*/ 
public function deleteAction(Request $request, $id) 
{ 
    $form = $this->createDeleteForm($id); 
    $form->handleRequest($request); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $entity = $em->getRepository('GroupsBundle:Groups')->find($id); 

     if (!$entity) { 
      throw $this->createNotFoundException('Unable to find Groups entity.'); 
     } 

     $em->remove($entity); 
     $em->flush(); 
    } 

    return $this->redirect($this->generateUrl('groups')); 
} 

/** 
* Creates a form to delete a Groups entity by id. 
* 
* @param mixed $id The entity id 
* 
* @return \Symfony\Component\Form\Form The form 
*/ 
private function createDeleteForm($id) 
{ 
    return $this->createFormBuilder() 
     ->setAction($this->generateUrl('groups_delete', array('id' => $id))) 
     ->setMethod('DELETE') 
     ->add('submit', 'submit', array('label' => 'Delete')) 
     ->getForm() 
    ; 
} 

}

das Problem:

Catchable Fatal Error: Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be of the type array, object given, called in /home/cros/Desktop/Project_Console/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php on line 555 and defined 500 Internal Server Error - ContextErrorException

* Stack Trace:

in vendor/Lehre/Sammlungen/lib/Lehre/gemeinsame/Sammlungen/ArrayCollection.php in Zeile 48 -

at ErrorHandler ->handleError ('4096', 'Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be of the type array, object given, called in /home/cros/Desktop/Project_Console/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php on line 555 and defined', '/home/Cros/Desktop/Project_Console/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php',

Mein GroupsType und RolesType:

class GroupsType extends AbstractType 
    { 
     /** 
     * @param FormBuilderInterface $builder 
     * @param array $options 
     */ 
     public function buildForm(FormBuilderInterface $builder, array $options) 
     { 
      $builder 
       ->add('image',new ImagesType()) 
       ->add('name_groups', 'text',array('required' => true, 'attr' => array('placeholder' => 'Nom du groupe'))) 
       ->add('role', new RolesType()) 
      ; 
     } 
    } 

//My RolesType: 
class RolesType extends AbstractType 
    { 
public function buildForm(FormBuilderInterface $builder, array $options) 
     { 

      $builder 
       ->add('groups', 'entity',array(
               'class' => 'GroupsBundle:Roles', 
               'choice_label' => 'name_role', 
               /*'query_builder' => function(EntityRepository $er) 
               { 
               return $er->createQueryBuilder('r') 
               ->orderBy('r.id', 'ASC'); 
               },*/ 
               'required' => true, 
               'placeholder' => 'Choisir le role du votre groupe' 
              ) 
       ) 

       ->add('permissions_role','entity',array(
         'class' => 'GroupsBundle:Permissions', 
         'multiple' => true, 
         'expanded' => true, 
         'query_builder' => function(EntityRepository $er) { 
          return $er->createQueryBuilder('u') 
           ->orderBy('u.id', 'ASC'); 
         }, 
         'required' => true 
        ) 
        ) 
       // ->add('permissions_role','number') 

      ; 

Danke

+0

Wann wird dieser Fehler occcured? Anscheinend versuchen Sie, auf einen nicht vorhandenen Array-Schlüssel zuzugreifen. Können Sie uns den Kontext dieses Fehlers zeigen? (vielleicht ein Controller?). –

+0

Das Problem tritt auf, wenn ich alle Felder (Name, Rolle, Berechtigungen) ausgefüllt habe, um die Gruppe zu erstellen. (Ich habe das Thema gewechselt) kann hier das Problem sein -> mappedBy = "Rollen" !! – Cros

+0

Ein Stack-Trace wäre hier sehr hilfreich sein, sonst ist es fast ein Ratespiel – kix

Antwort

1

Es ist ziemlich schwer durch den gesamten Code zu graben Sie die hier geliefert haben, aber ich werde versuchen zu helfen.

Wie ich sehe, die $groups Eigenschaft in Ihrer Roles Klasse kommentierte mit OneToManymappedBy Satz "roles" mit.

/** 
* @var ArrayCollection $groups 
* 
* @ORM\OneToMany(targetEntity="Groups", mappedBy="roles", cascade={"persist","merge"}) 
* @Assert\Valid() 
*/ 
protected $groups; 

Die Zieleinheit der Beziehung Groups ist, und soweit ich das aus Ihrer Anzeigen sehen, wird diese Einheit keine roles Eigenschaft haben, hat es role statt:

/** 
* @var Roles $role 
* 
* @ORM\ManyToOne(targetEntity="Roles", inversedBy="groups", cascade={"persist", "merge"}) 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="role_id", referencedColumnName="id", nullable=false) 
* }) 
* @Assert\Valid() 
*/ 
protected $role; 

Sie sollten versuchen, Umbenennen dieser Eigenschaft zu roles stattdessen.

+0

ich die Lösung versucht, die Sie vorgeschlagen, aber es scheint ein anderes Problem beim Hinzufügen von :: -> Abfangbare Fatal Error: Argument 1 bestanden Lehre \ Common \ Collections \ Arraycollection :: __ construct() muß von der Art sein, Array, Objekt gegeben, genannt in/home/syrine01/Desktop/Project_Console/Verkäufer/Lehre/orm/lib/Lehre/ORM/UnitOfWork.php in Zeile 555 und definiert – Cros

+0

Dies deutet darauf hin, dass eines Ihrer Formulare möglicherweise ungültig ist. Versuchen Sie, den Stack-Trace zu untersuchen oder den Programmfluss mit XDebug zu verfolgen, um den genauen Ort zu ermitteln, an dem die Ausnahme auftritt. – kix

+0

das Problem in Constract Ich weiß nicht warum? – Cros

Verwandte Themen