Bonjour,
j'ai un problème avec cakephp 3, du coté des bahavior.
Je vais essayer de d'écrire au mieux le problème.
Situation :
je veux créer un behavior qui va permettre à mes entity (ou controller) de rassembler les champs en commun.
Mon behavior s'appelle 'SeoBehavior', il a va ajouter des les champs 'slug, title, description et keywords'.
J'ai pour le moment deux controllers 'Articles' et 'Projets'.
J'ai associé à ces deux controller le behavior de cette maniére :
Dans les Template 'edit' de mes deux controllers j'ai ajouté dans le formulaire les champs qui sont associé à mon behavior.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $this->addBehavior('Seo', []);
Comme ci-dessous :
Jusque là ça ce passe bien pour mes deux controllers 'Articles' et 'Projets'.
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 echo $this->Form->input('seo.slug', [ 'label' => [ 'class' => '', 'text' => 'L url ' ] ]); echo $this->Form->input('seo.title', [ 'label' => [ 'class' => '', 'text' => 'Le title de la page ' ] ]); echo $this->Form->input('seo.description', [ 'rows' => '2', 'label' => [ 'class' => '', 'text' => 'La méta description de la page' ] ]); echo '<p>Elle doit être différente de la description</p>'; echo $this->Form->input('seo.keywords', [ 'label' => [ 'class' => '', 'text' => 'Les mots cles' ] ]);
Le problème vient maintenant.
Je veux capter c'est champs quand le formulaire est validé.
Dans le behavior "SeoBehavior" j'ai cette fonction "beforeSave"
Quand j'enregistre un 'Projet' c'est bon dans la fonction beforesave du behavior j'ai bien un object et je peux manipuler l'entity comme je le veux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public function beforeSave(Event $event, Entity $entity) { $config = $this->config(); //on récupere la cfg de bahavior debug($entity->seo); exit(); //return true;
Par contre quand j'enregistre un 'Article' le debug retourne un simple tableau et du coup je ne peux pas manipuler l'entity.
Résultat du débug pour 'Article' dans ce cas ce n'est pas bon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 /src/Model/Behavior/SeoBehavior.php (line 135) [ 'slug' => 'ddddd', 'description' => 'ddddd', 'keywords' => 'ddd' ]
Résultat du débug pour 'Projet' (dans ce cas c'est bon):
Posez vos questions car je ne suis peut être pas assez clair ou ca manque d'information essentielle.
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 /src/Model/Behavior/SeoBehavior.php (line 135) object(Cake\ORM\Entity) { 'new' => true, 'accessible' => [ '*' => true ], 'properties' => [ 'slug' => 'zezzz cent pr cent', 'title' => '', 'description' => '', 'keywords' => '' ], 'dirty' => [ 'slug' => true, 'title' => true, 'description' => true, 'keywords' => true ], 'original' => [], 'virtual' => [], 'errors' => [], 'repository' => 'Seos' }
Ps : cakephp 3
Partager