IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Catchable Fatal Error: Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::construct()


Sujet :

Symfony PHP

  1. #1
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut Catchable Fatal Error: Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::construct()
    salut mes amis,

    j'ai un problème qui bloque mon travail , je sais pas comment le résoudre.
    'idée est d'affecter au groupe un seul role séléction par l'administrateur . et un role peut avoir plusieurs groupe (ManyTOOne)
    j'ai essayé ce code: le type "groups" est collection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     ->add('groups', 'entity',array(
                                                //'class' => 'GroupsBundle:Roles',
                                                'class'=> 'MemberShipManagement\GroupsBundle\Entity\Roles',
                                                'choice_label' => 'name_role',
                                              /*  'query_builder' => function(EntityRepository $er)
                                                {
                                                 return $er->createQueryBuilder('r')
                                                 ->orderBy('r.id', 'ASC');
                                                },*/
                                                 'required' => false,
                                                 'placeholder' => 'Choisir le role du votre groupe'
                                             )
               )
    Mais il affiche le probléme suivant:
    Catchable Fatal Error: Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be of the type array, object given, called in /home/syrine01/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/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php at line 48 -
    *
    * @param array $elements
    */
    public function __construct(array $elements = array())
    {
    $this->elements = $elements;
    }


    at ErrorHandler ->handleError ('4096', 'Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be of the type array, object given, called in /home/syrine01/Desktop/Project_Console/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php on line 555 and defined', '/home/syrine01/Desktop/Project_Console/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php', '48', array())
    in vendor/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php at line 48
    Aprés un recherhe sur internet , j'ai trouvé que le champ de type "collection" traité d'une autre façon.
    Ce type collection contient tous les noms des rôles ( d’après un requête qui affiche les noms des rôles d’après la BD)
    voilà le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ->add('groups', 'collection', array('class'  => 'GroupsBundle:Roles',
                                                     'query_builder' => function ($repository)
                                                     {
                                                         return $repository->createQueryBuilder('p')->orderBy('p.name_role', 'ASC');
                                                     },
                                                   )
    -> Un erreur sera affiché car les options que j'ai ajouté n'existe pas, mais j'ai besoin de faire une requête dedans.
    The options "class", "query_builder" do not exist. Defined options are: "action", "allow_add", "allow_delete", "allow_extra_fields", "attr", "auto_initialize", "block_name", "by_reference", "cascade_validation", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_provider", "csrf_token_id", "csrf_token_manager", "data", "data_class", "delete_empty", "disabled", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "inherit_data", "intention", "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "mapped", "max_length", "method", "options", "pattern", "post_max_size_message", "property_path", "prototype", "prototype_name", "read_only", "required", "translation_domain", "trim", "type", "validation_groups", "virtual".
    Merci,

  2. #2
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    j'ai essayé cette solution: les Id dans la BD des rôles sont 0,1,2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
             ->add('groups', 'choice', array(
                 'choice_list' => new ChoiceList(
                    array(1, 0.5, 0.1), // les valeurs sont 0,1,2
                     array('ROLE_ADMIN', 'ROLE_USER', 'ROLE_CLIENT')
                 ),
                     'placeholder' => 'Choisir le role du votre groupe',
                     'required' => false,
                      'label' => 'Role',
             )
              )
    donc les paramètres sont bien envoyé dans la requête Request , mais lors d’enregistrement un probléme se présente:
    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
    name_groups => sdsdsd, 
      role => [
        groups => 0, 
        permissions_role => [
          0 => 2
        ]
      ], 
      submit => , 
      _token =>  rXWryaWSSpUmIPq0
    ]
    //erreur:
    Warning: spl_object_hash() expects parameter 1 to be object, integer given
    in vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php at line 1602   -
         */
        private function doPersist($entity, array &$visited)
        {
            $oid = spl_object_hash($entity);
            if (isset($visited[$oid])) {
                return; // Prevent infinite recursion
     
    at ErrorHandler ->handleError ('2', 'spl_object_hash() expects parameter 1 to be object, integer given', '/home/syrine01/Desktop/Project_Console/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php', '1602', array('entity' => '1', 'visited' => array('0000000063deb594000000000771fbd8' => object(Groups), '0000000063deb596000000000771fbd8' => object(Images), '0000000063deb668000000000771fbd8' => object(Roles)))) 
     
    at spl_object_hash ('1') 
    in vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php at line 1602   
     
    at UnitOfWork ->doPersist ('1', array('0000000063deb594000000000771fbd8' => object(Groups), '0000000063deb596000000000771fbd8' => object(Images), '0000000063deb668000000000771fbd8' => object(Roles))) 
    in vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php at line 2225
    meric de résoudre ce probléme

  3. #3
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    expects parameter 1 to be object, integer given

    c'est pourtant clair, il attend un objet et il reçoit un entier !

  4. #4
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    oui c'est ça le probléme et j'en sais pas comment le corriger car je suis débutante concernant l'utilisation des relations en SF2.

    Les relations entre les deux entités:

    • Un groupe doit savoir obligatoirement un rôle.
    • Un rôle peut ou ne peut pas savoir des groupes.
    • Un role peut avoir plusieurs ou une permissions.
    • Une permission peut ou ne peut pas avoir un ou des rôles.
    • Un groupe peut ou ne peut pas avoir une image ( une seule image par groupe)


    Voilà la relation entre les deux entités Roles et Groups
    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
     
     
    Class Groups{
     /**
         * @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;
    }
     
    Class Roles{
       /**
         * @var ArrayCollection $groups
         *
         * @ORM\OneToMany(targetEntity="Groups", mappedBy="role", cascade={"persist","merge"})
         *@Assert\Valid()
         */
        protected $groups;
    }
    Merci mon ami,

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Essais de suivre cette exemple http://future500.nl/articles/2013/09...in-doctrine-2/ ,
    Au debut , tu as
    ArrayCollection::__construct() must be of the type array, object given,
    et apres
    expects parameter 1 to be object, integer given
    .
    Je crois que ArrayCollection est mal utilisé.Si le probleme persiste , montre nous les deux entités completes.

  6. #6
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Merci pour ta réponse.
    j'ai essayé de suivre ce lien, mais si j'envoie la requête (lors du clique sur bouton create) la requête ne peut pas être traité!!! meme si la route est existe "/groups/create"
    L'erreur;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    URL:http://www.website.com/app_dev.php/groups/create
    The www.website.com page isn’t working
    www.website.com is currently unable to handle this request.
    HTTP ERROR 500
    -Voilà tous mes entités:

    *Class Groups:
    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
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    <?php
     
    namespace MemberShipManagement\GroupsBundle\Entity;
     
    use Doctrine\Common\Collections\ArrayCollection;
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
    use Symfony\Component\Validator\Constraints as Assert;
     
     
    /**
     * groups
     *
     * @ORM\Table(name="groups")
     * @ORM\Entity(repositoryClass="MemberShipManagement\GroupsBundle\Entity\groupsRepository")
     *
     */
    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")
         * @ORM\JoinColumn(name="role_id", referencedColumnName="id", nullable=false)
         *
         * @Assert\Valid()
         */
        protected $role;
     
        /**
         * groups constructor.
         */
        public function __construct()
        {
            $this->date_create=new \DateTime();
            $this->image = new Images();
     
            /*if($this->image->getPath()==NULL)
            {
                $this->image->setPath('unknown.png');
            }else
            {
                 $this->image->setPath($this->image->getPath());
            }*/
          //  $this->role = new ArrayCollection();
     
        }
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Get id
         *
         * @return integer
         */
        public function setId( $id)
        {
            $this->id=$id;
        }
     
            /**
         * @return mixed
         */
        public function getImage()
        {
            return $this->image;
        }
     
        /**
         * @param mixed $image
         */
        public function setImage(Images $image)
        {
            $this->image = $image;
        }
     
     
        /**
         * @return string
         */
        public function getNameGroups()
        {
            return $this->name_groups;
        }
     
        /**
         * @param string $name_groups
         */
        public function setNameGroups($name_groups)
        {
            $this->name_groups = $name_groups;
        }
     
        /**
         * @return DateTime
         */
        public function getDateCreate()
        {
            return $this->date_create;
        }
     
        /**
         * @param DateTime $date_create
         */
        public function setDateCreate($date_create)
        {
            $this->date_create = $date_create;
        }
     
        /**
         * @return array role
         */
        public function getRole()
        {
            return $this->role;
        }
     
        /**
         * @param Region $role
         */
        public function setRole(Roles $role= null)
        {
            if ($this->role !== null) {
                $this->role->removeRoles($this);
            }
     
            if ($role !== null) {
                $role->addRoles($this);
            }
     
            $this->role = $role;
            return $this;
        }
     
    }
    *Class Roles:
    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
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    <?php
     
    namespace MemberShipManagement\GroupsBundle\Entity;
     
    use Doctrine\Common\Collections\ArrayCollection;
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
    use Symfony\Component\Validator\Constraints as Assert;
     
    /**
     * Roles
     *
     * @ORM\Table(name="roles")
     * @ORM\Entity(repositoryClass="MemberShipManagement\GroupsBundle\Entity\groupsRepository")
     *
     */
    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)
         *
         *
         */
        Private $name_role;
     
        /**
         * @var ArrayCollection $groups
         *
         * @ORM\OneToMany(targetEntity="Groups", mappedBy="role", cascade={"remove"} )
         *@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();
        }
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * @return string
         */
        public function getNameRole()
        {
            return $this->name_role;
        }
     
        /**
         * @param string $name_role
         */
        public function setNameRole($name_role)
        {
            $this->name_role = $name_role;
        }
     
        /**
         * @return ArrayCollection
         */
        public function getGroups()
        {
            return $this->groups->toArray();
        }
     
        /**
         * @param ArrayCollection $groups
         */
        public function setGroups($groups)
        {
            $this->groups = $groups;
        }
     
        /**
         * Add group
         * @param Groups $grp
         */
        public function addRoles(Groups $grp) {
          //  $grp->setRole($this);
            // Si l'objet fait déjà partie de la collection on ne l'ajoute pas
            if (!$this->groups->contains($grp)) {
                $this->groups->add($grp);
            }
     
            return $this;
        }
     
        /**
         * Remove groups
         *
         * @param Groups $groups
         */
        public function removeRoles(Groups $groups)
        {
           /* $this->groups=$groups;
            unset($this->groups);
            $groups->setRole($this);*/
            if ($this->groups->contains($groups)) {
                $this->groups->removeElement($groups);
            }
     
            return $this;
        }
     
        /**
         * @return ArrayCollection
         */
        public function getPermissionsRole()
        {
            return $this->permissions_role->toArray();
        }
     
     
        /**
         * Add permission
         * @param Permissions $per
         */
        public function addPermissions(Permissions $per)
        {
            // Si l'objet fait déjà partie de la collection on ne l'ajoute pas
            if (!$this->permissions_role->contains($per)) {
                $this->permissions_role->add($per);
            }
        }
     
     
        public function setPermissionsRole($permissions_role)
        {
            if ($permissions_role instanceof ArrayCollection || is_array($permissions_role)) {
                foreach ($permissions_role as $item) {
                    $this->addPermissions($item);
                }
            } elseif ($permissions_role instanceof Permissions) {
                $this->addPermissions($permissions_role);
            } else {
                throw new Exception("$permissions_role must be an instance of Permission or ArrayCollection");
            }
        }
     
        public function __toString()
        {
            return (string) $this->name_role;
        }
     
     
     
    }
    * CLass Permissions:
    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
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    <?php
     
    namespace MemberShipManagement\GroupsBundle\Entity;
     
    use Doctrine\Common\Collections\ArrayCollection;
    use Doctrine\ORM\Mapping as ORM;
     
    use Symfony\Component\Security\Acl\Exception\Exception;
    use Symfony\Component\Validator\Constraints as Assert;
    use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
     
    /**
     * Permissions
     *
     * @ORM\Table(name="permissions")
     * @ORM\Entity(repositoryClass="MemberShipManagement\GroupsBundle\Entity\PermissionsRepository")
     */
    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_role", cascade={"persist", "merge"})
         *@Assert\Valid()
         */
        protected $roleGroup;
     
     
     
          public function __construct()
          {
              $this->roleGroup = new ArrayCollection();
          }
     
     
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * @return string
         */
        public function getNamePermissions()
        {
            return $this->name_permissions;
        }
     
        /**
         * @param string $name_permissions
         */
        public function setNamePermissions($name_permissions)
        {
            $this->name_permissions = $name_permissions;
        }
     
     
        public function addPermissionRoles(Roles $role)
        {
            if (!$this->roleGroup->contains($role)) {
                if (!$role->getPermissionsRole()->contains($this)) {
                    $role->addPermissions($this);
                }
                $this->roleGroup->add($role);
            }
        }
     
     
        /**
         * set roleGroup
         * @param $roleGroup
         */
        public function setRoleGroup($roleGroup)
        {
            if ($roleGroup instanceof ArrayCollection || is_array($roleGroup)) {
                foreach ($roleGroup as $item) {
                    $this->addPermissionRoles($item);
                }
            } elseif ($roleGroup instanceof Roles) {
                $this->addPermissionRoles($roleGroup);
            } else {
                throw new Exception("$roleGroup must be an instance of Client or ArrayCollection");
            }
        }
     
     
     
        public function getRoleGroup()
        {
            return $this->roleGroup;
        }
     
     
        public function toArray()
        {
            return array(
                'id' => $this->getId(),
                'name' => $this->getNamePermissions()
            );
        }
     
         public function __toString()
        {
        return $this->name_permissions;
         }
     
     
    }
    *Class Images:
    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
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    <?php
     
    namespace MemberShipManagement\GroupsBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Validator\Constraints as Assert;
    use Symfony\Component\HttpFoundation\File\UploadedFile;
    use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
    /**
     * Images
     *
     * @ORM\Table(name="images")
     * @ORM\Entity(repositoryClass="MemberShipManagement\GroupsBundle\Entity\ImagesRepository")
     */
    class Images
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id_images", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;
     
     
        /**
         * @var file $file
         *
         * @Assert\File(
         *      maxSize = "2M",
         *      mimeTypes = {"image/jpeg", "image/pjpeg", "image/png", "image/x-png", "image/gif"},
         *      mimeTypesMessage = "seulement le type jpeg, png, pjpeg ,et gif sont autorisés",
         *      uploadIniSizeErrorMessage = "erreur d'upload l'image est dde taille suppérieur",
         *      uploadFormSizeErrorMessage = "erreur le type de l'image n'est de forme jpeg, pjeg, png ou gif",
         *      uploadErrorMessage = "erreur d'upload",
         *      maxSizeMessage = "le taille ne dépasse pas 2M"
         * )
         */
        private $file;
     
        /**
         * @ORM\Column(type="string", length=255, nullable=true)
         */
        private $path;
     
        /**
         * groups constructor.
         */
        public function __construct()
        {
            $this->path = 'male-users.png';
        }
     
        /**
         * @return file
         */
        public function getFile()
        {
            return $this->file;
        }
     
     
        public function setFile($file)
        {
            $this->file = $file;
            return $this;
        }
     
     
        /**
         * @return mixed
         */
        public function getPath()
        {
            return $this->path;
        }
     
     
        public function setPath($path)
        {
            $this->path = $path;
            return $this;
        }
     
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
     
     
        /**
         * @return string
         */
        protected function getUploadDir()
        {
            return 'uploads/img/users';
        }
     
        public function getWebPath()
        {
            return null === $this->path ? null : $this->getUploadDir().'/'.$this->path;
        }
     
        /**
         * @return string
         */
        protected function getUploadRootDir()
        {
            // le chemin absolu du répertoire où les documents uploadés doivent être sauvegardé
            return __DIR__.'/../../../../web/'.$this->getUploadDir();
        }
     
        /**
         * @return bool
         */
        public function upload()
        {
            // var_dump(pathinfo($this->file, PATHINFO_EXTENSION));die();
            if (null === $this->icone) return false;
            else $this->path = sha1(uniqid(mt_rand(), true)).'.'.$this->icone->guessExtension();
     
            $this->icone->move($this->getUploadRootDir(), $this->path);
            unset($this->icone);
            return true;
        }
     
    }
    -Le code du controller;
    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
     /**
         * 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->getReference('MemberShipManagement\GroupsBundle\Entity\Groups',$entity.getId());
                $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(),
            ));
        }
    Vraiment j'ai pas compris ou se trouve le probléme pour faire la correction. Merci d'obtenir la correction de ce probléme

  7. #7
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Ce probléme a été résolu grâce a la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $php app/console cache:clear --env=prod
    L'erreur là concerne quoi !
    Catchable Fatal Error: Object of class Closure could not be converted to string
    500 Internal Server Error - ContextErrorException

    --
    Stack Trace
    in vendor/symfony/symfony/src/Symfony/Component/Form/ChoiceList/Factory/DefaultChoiceListFactory.php at line 166 -
    // If "choice_label" is set to false and "expanded" is true, the value false
    // should be passed on to the "label" option of the checkboxes/radio buttons
    $dynamicLabel = call_user_func($label, $choice, $key, $value);
    $label = false === $dynamicLabel ? false : (string) $dynamicLabel;
    }
    $view = new ChoiceView(


    at ErrorHandler ->handleError ('4096', 'Object of class Closure could not be converted to string', '/home/syrine01/Desktop/Project_Console/vendor/symfony/symfony/src/Symfony/Component/Form/ChoiceList/Factory/DefaultChoiceListFactory.php', '166', array('choice' => 'query_builder', 'value' => 'query_builder', 'label' => object(Closure), 'keys' => array('class' => '0', 'query_builder' => '1', 'required' => '2', 'multiple' => '3', 'expanded' => '4', 'placeholder' => '5'), 'index' => '2', 'attr' => null, 'isPreferred' => array(), 'preferredViews' => array(), 'otherViews' => array(object(ChoiceView)), 'key' => '1', 'nextIndex' => '1', 'dynamicLabel' => object(Closure)))

    in vendor/symfony/symfony/src/Symfony/Component/Form/ChoiceList/Factory/DefaultChoiceListFactory.php at line 166 +

    at DefaultChoiceListFactory ::addChoiceView ('query_builder', 'query_builder', object(Closure), array('class' => '0', 'query_builder' => '1', 'required' => '2', 'multiple' => '3', 'expanded' => '4', 'placeholder' => '5'), '2', null, array(), array(), array(object(ChoiceView)))
    in vendor/symfony/symfony/src/Symfony/Component/Form/ChoiceList/Factory/DefaultChoiceListFactory.php at line 232 +

    at DefaultChoiceListFactory ::addChoiceViewsGroupedBy (array('class', 'query_builder', 'required', 'multiple', 'expanded', 'placeholder'), object(Closure), array('class' => 'class', 'query_builder' => 'query_builder', 'required' => 'required', 'multiple' => 'multiple', 'expanded' => 'expanded', 'placeholder' => 'placeholder'), array('class' => '0', 'query_builder' => '1', 'required' => '2', 'multiple' => '3', 'expanded' => '4', 'placeholder' => '5'), '2', null, array(), array(), array(object(ChoiceView)))
    in vendor/symfony/symfony/src/Symfony/Component/Form/ChoiceList/Factory/DefaultChoiceListFactory.php at line 131 +

    at DefaultChoiceListFactory ->createView (object(ArrayKeyChoiceList), array(), object(Closure), null, null, null)
    in vendor/symfony/symfony/src/Symfony/Component/Form/ChoiceList/Factory/PropertyAccessDecorator.php at line 23
    - Le formType:
    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
     
    class RolesType extends AbstractType
    {
        /**
         * @param FormBuilderInterface $builder
         * @param array $options
         */
     
     
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
           // $groups=new Groups();
            $builder
               ->add('groups', 'choice', array(
                                                 'choices' => array(
                                                                      'class' => 'GroupsBundle:Roles',
                                                                      'query_builder' => function(EntityRepository $er)
                                                                                        {
                                                                                            return $er->createQueryBuilder('r')
                                                                                            ->orderBy('r.id', 'ASC');
                                                                                         },
                                                                      'required' => false,
                                                                       'multiple' => false,
                                                                       'expanded' => false,
                                                                       '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.name_permissions', 'ASC');
                       },
                       'required' => true
                   )
                   )
     
     
            ;
        }
    Merci

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Je comprends pas pourquoi tu as deux EntityField dans ton form ,la premiere c'est choice et la deuxieme c'est entity !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ->add('groups', 'choice', array(
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->add('permissions_role','entity',array(
    Je t"invite a utiliser 'entity' pour les deux .
    La methode de createQueryBuilder est efficace pour afficher des enregistrements dan ton Form ok mais la tu dois préciser quel attribut a afficher dans la liste déroulante ou machein..C'est a dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     'class' => 'GroupsBundle:Permissions',
                        'property' => 'name_permissions par exemple', // ce que l'utilisateur va voir pour en choisir un ou plusieurs
                        'choice_label' => 'permission',
                       'multiple' => true,
                       'expanded' => true,
    Autre remarque, je vois que tu fais un tri par id
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->orderBy('r.id', 'ASC');
    si cet id est generé auto , ça va servir a rien pour toi , surtout en mode prod .

  9. #9
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Merci pour ton aide, j'ai essayé de corriger mon code et voilà la dernier version:
    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
     
     public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
     
              ->add('groups', 'entity',array(
                                                'class' => 'GroupsBundle:Roles',
                                                'property' => 'name_role',
                                                 'required' => false,
                                                 'placeholder' => 'Choisir le role du votre groupe'
                                             )
               )
     
     
               ->add('permissions_role','entity',array(
                       'class' => 'GroupsBundle:Permissions',
                       'property' => 'name_permissions',
                       'multiple' => true,
                       'expanded' => true,
                       'required' => true
                   )
                   )
     ;
    }
    Le formulaire est bien affiché avec les différents rôles et les permissions sauf que le serveur du symfony 2.7 ne peut pas traité la requête (j'en sais pas pourquoi !!). même si j'ai utilisé la commande "php app/console cache:clear --env=prod":
    The 127.0.0.1 page isn’t working
    127.0.0.1 is currently unable to handle this request.
    HTTP ERROR 500
    -Dans l'attribut "property" j'ai mis les noms des rôles("name_role") qui seront afficher dans la liste déroulante. Ma question, si l'utilisateur a choisir par exemple "ROLE_ADMIN", donc dans la BD il stocke le nom du rôle ("ROLE_ADMIN") ou bien son "id"?
    Merci

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    la formType fais reference à une classe , dans ce cas , elle contient les objets que tu as ajouté en mapping (Many To one etc ..)
    Dans la bdd ca va enregistrer l'id de l'objet choisis par la form pas son nom .

  11. #11
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Oui j'ai testé avec les id et il reste le même probléme .
    Voilà le fichier Dev.log du serveur:
    *Dev.log

    [2016-07-12 00:23:49] doctrine.DEBUG: SELECT p0_.id_per AS id_per0, p0_.nom_permisions AS nom_permisions1 FROM permissions p0_ [] []
    [2016-07-12 00:23:49] doctrine.DEBUG: SELECT r0_.id AS id0, r0_.nom_roles AS nom_roles1 FROM roles r0_ WHERE r0_.id IN (?) [["0"]] []
    [2016-07-12 01:51:58] php.DEBUG: fsockopen(): unable to connect to 127.0.0.1:8000 (Connection refused) {"type":2,"file":"/home/syrine01/Desktop/Project_Console/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Command/ServerCommand.php","line":59,"l
    evel":28928} [] // ici le probléme
    WARNING - Translation not found.
    Context: {"id":"Image","domain":"messages","locale":"fr"}
    WARNING - Translation not found.
    Context: {"id":"File","domain":"messages","locale":"fr"}
    WARNING - Translation not found.
    Context: {"id":"Name groups","domain":"messages","locale":"fr"}
    WARNING - Translation not found.
    Context: {"id":"Nom du groupe","domain":"messages","locale":"fr"}
    WARNING - Translation not found.
    Context: {"id":"Role","domain":"messages","locale":"fr"}
    WARNING - Translation not found.
    Context: {"id":"Groups","domain":"messages","locale":"fr"}
    WARNING - Translation not found.
    Context: {"id":"Choisir le role du votre groupe","domain":"messages","locale":"fr"}
    WARNING - Translation not found.
    Context: {"id":"Permissions role","domain":"messages","locale":"fr"}
    WARNING - Translation not found.
    INFO - Matched route "groups_new".
    Context: {"route_parameters":{"_controller":"MemberShipManagement\\GroupsBundle\\Controller\\GroupsController::newAction","_route":"groups_new"},"request_uri":"http://127.0.0.1:8000/groups/new"}
    DEPRECATED - The Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderAdapter class is deprecated since version 2.4 and will be removed in version 3.0. Use the Symfony\Component\Security\Csrf\CsrfTokenManager class instead. +
    INFO - Populated the TokenStorage with an anonymous Token.
    DEPRECATED - MemberShipManagement\GroupsBundle\Form\GroupsType: The FormTypeInterface::setDefaultOptions() method is deprecated since version 2.7 and will be removed in 3.0. Use configureOptions() instead. This method will be added to the FormTypeInterface with Symfony 3.0. +
    DEPRECATED - MemberShipManagement\GroupsBundle\Form\ImagesType: The FormTypeInterface::setDefaultOptions() method is deprecated since version 2.7 and will be removed in 3.0. Use configureOptions() instead. This method will be added to the FormTypeInterface with Symfony 3.0. +
    DEPRECATED - MemberShipManagement\GroupsBundle\Form\RolesType: The FormTypeInterface::setDefaultOptions() method is deprecated since version 2.7 and will be removed in 3.0. Use configureOptions() instead. This method will be added to the FormTypeInterface with Symfony 3.0. +
    DEPRECATED - The "property" option is deprecated since version 2.7 and will be removed in 3.0

Discussions similaires

  1. [2.x] Catchable Fatal Error: Argument 1 passed to setApp()
    Par aitiahcene dans le forum Symfony
    Réponses: 9
    Dernier message: 09/09/2013, 13h29
  2. [2.x] Formulaire: Catchable Fatal Error: Argument 1 passed to
    Par oukacha dans le forum Symfony
    Réponses: 2
    Dernier message: 02/05/2012, 20h36
  3. Catchable fatal error
    Par Tchupa dans le forum Langage
    Réponses: 2
    Dernier message: 17/03/2009, 10h24
  4. soucis Catchable fatal error: Object of class stdClass
    Par nimbus_77 dans le forum Langage
    Réponses: 2
    Dernier message: 24/06/2008, 10h45
  5. [Oracle] Catchable fatal error: (suite à une mise à jour en PHP 5.2)
    Par nyto-86 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/06/2008, 12h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo