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

Bibliothèques et frameworks PHP Discussion :

Behavior Cakephp 3 qui ne fonctionne pas avec toutes les entity associées [CakePHP]


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Behavior Cakephp 3 qui ne fonctionne pas avec toutes les entity associées
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            $this->addBehavior('Seo', []);
    Dans les Template 'edit' de mes deux controllers j'ai ajouté dans le formulaire les champs qui sont associé à mon behavior.
    Comme ci-dessous :
    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'
    		]
    		]);
    Jusque là ça ce passe bien pour mes deux controllers 'Articles' et 'Projets'.

    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"

    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;
    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.

    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):
    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'
     
    }
    Posez vos questions car je ne suis peut être pas assez clair ou ca manque d'information essentielle.
    Ps : cakephp 3

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    J'ai trouvé une solution.

    Le problème venait du fait que mes articles étaient associés à des catégories.
    Du coup pour enregistrer l'association entre "Articles" et "Categories" je faisais ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $this->Articles->patchEntity($article, $this->request->data, ['associated'=>['Categories']]);
    $this->Articles->save($article, ['associated'=>['Categories']]));
    J'ai supprimé l'association dans le "patchEntity" et le "save".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $this->Articles->patchEntity($article, $this->request->data);
    $this->Articles->save($article));
    En faisant cela mon behavior "Seo" se comporte normalement.
    Et les catégories sont toujours bien associées à mes articles.

    Du coup j'ai l'impression que ça sert à rien de préciser les associations dans le save et le patchEntity.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Boucle For qui ne fonctionne pas pour toutes les valeurs
    Par pleskyd dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 13/02/2012, 15h16
  2. [CS5] Texte dynamique qui ne fonctionne pas avec tous les chiffres
    Par Shikam dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 10/12/2010, 07h17
  3. condition if qui ne fonctionne pas avec tous les elements
    Par oceane751 dans le forum Langage
    Réponses: 2
    Dernier message: 04/09/2008, 12h39
  4. Réponses: 10
    Dernier message: 13/03/2007, 11h38
  5. Requete qui ne fonctionne pas sur toutes les versions de MySQL
    Par goldorax113 dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/06/2006, 11h04

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