Bonjour ,
Je voudrais recuperé tous les commentaires liés à un event,
voic le code du controller

$this->Event->Recursive=-1;
$this->paginate = array(
 'conditions' => array('user_id'=>$id),
 'order' => array('Event.created'=>'DESC'),
 'limit'=>6,
 'contain'=>array('User','Comment','Like'));
 $event = $this->Paginate('Event'); 
foreach($event as $key=>$value){
$content=$value['Event']['content'];
$event_id=$value['Event']['id'];
$val=$this->getVideoInfo($content);
$value['Event']['video']=$val;
$event[$key]=$value;
$event_id= $value['Event']['id'];
}   

le debug de $event donne ça

array(
    (int) 0 => array(
        'Event' => array(
            'id' => '13',
            'event' => 'zeeeppeppe',
            'content' => 'mfsldlmdldmfdf,l,lffkmdlf',
            'filename' => 'uploads/events/Facebook.mp4',
            'user_id' => '56',
            'created' => '2015-06-07 19:41:02',
            'slug' => 'zeeeppeppe',
            'link' => array(
                'controller' => 'Users',
                'action' => 'event',
                'slug' => 'zeeeppeppe',
                'id' => '13',
                'ext' => 'html'
            ),
            'video' => array(
                'id' => (int) -1,
                'type' => '',
                'titre' => 'no title',
                'description' => '',
                'img' => 'no image',
                'code' => 'no code'
            )
        ),

        'Comment' => array(
            (int) 0 => array(
                'id' => '49',
                'user_id' => '56',
                'event_id' => '13',
                'content' => 'sddllkflfkkflklflk',
                'email' => '',
                'created' => '2015-06-08 20:22:48'
            ),
            (int) 1 => array(
                'id' => '50',
                'user_id' => '56',
                'event_id' => '13',
                'content' => 'teste2',
                'email' => '',
                'created' => '2015-06-08 20:31:34'
            )
        )
    )

dans view pour recupérer tous les comment liés à un event je fais ceci

foreach($event as $key=>$value){
//traitement event
$comments=$value['Event']['Comment'];
foreach($comments as $v){
//traitement comment
}
}

mais j'ai l'erreur suivante:

mais dans ma view j'ai l'erreur suivante :
Notice (8): Undefined index: Event [APP/View/Users/view.ctp, line 216]

Warning (2): Invalid argument supplied for foreach() [APP/View/Users/view.ctp, line 219]

je suis un peu confus, quelqu'un pour m'eclairer.
merci

7 réponses


Pour commencer, comment se fait t'il que tu aies un id qui soit négatif ('id' => (int) -1) ?
Ensuite, c'est quoi ce trafic ?

$val = $this->getVideoInfo($content);
$value['Event']['video'] = $val;
$event[$key] = $value;
$event_id = $value['Event']['id'];

Et à quoi correspond ce :

$this->getVideoInfo($content);

Pourquoi la ligne suivante est-elle doublée dans le foreach du controller :

$event_id = $value['Event']['id'];

Pour terminer, tu fais un foreach sur la variable $event et tu définies en partie cette même variable dans ce même foreach ?

Pour ce qui concerne le problème de l'index Event, essaies de remplacer :

$comments = $value['Event']['Comment'];

Par :

$comments = $value['Comment'];
wenz
Auteur

ça ne marche pas j'ai cette erreur:
Notice (8): Undefined index: Comment [APP/View/Users/view.ctp, line 216]

Warning (2): Invalid argument supplied for foreach() [APP/View/Users/view.ctp, line 219]

Voilà la réponse :

<?php

$items = array(
    (int) 0 => array(
        'Event' => array(
            'id' => '13',
            'event' => 'zeeeppeppe',
            'content' => 'mfsldlmdldmfdf,l,lffkmdlf',
            'filename' => 'uploads/events/Facebook.mp4',
            'user_id' => '56',
            'created' => '2015-06-07 19:41:02',
            'slug' => 'zeeeppeppe',
            'link' => array(
                'controller' => 'Users',
                'action' => 'event',
                'slug' => 'zeeeppeppe',
                'id' => '13',
                'ext' => 'html'
            ),
            'video' => array(
                'id' => (int) -1,
                'type' => '',
                'titre' => 'no title',
                'description' => '',
                'img' => 'no image',
                'code' => 'no code'
            )
        ),

        'Comment' => array(
            (int) 0 => array(
                'id' => '49',
                'user_id' => '56',
                'event_id' => '13',
                'content' => 'sddllkflfkkflklflk',
                'email' => '',
                'created' => '2015-06-08 20:22:48'
            ),
            (int) 1 => array(
                'id' => '50',
                'user_id' => '56',
                'event_id' => '13',
                'content' => 'teste2',
                'email' => '',
                'created' => '2015-06-08 20:31:34'
            )
        )
    )
);

$items = $items[0];
$event = $items['Event'];
$comments = $items['Comment'];

echo '<h1>L\'evenement</h1>';

echo 'Id : ' . $event['id'] . '<br/>';
echo 'Event : ' . $event['event'] . '<br/>';
echo 'Content : ' . $event['content'] . '<br/>';
echo 'Filename : ' . $event['filename'] . '<br/>';
echo 'User id : ' . $event['user_id'] . '<br/>';
echo 'Created : ' . $event['created'] . '<br/>';
echo 'Slug : ' . $event['slug'] . '<br/>';
echo 'Lien <a href=": http://tonsite.com/' . $event['link']['controller'] . '-' . $event['link']['action'] . '-' . $event['link']['slug'] . '-' . $event['link']['id'] . '.' . $event['link']['ext'] . '">Voir le lien</a>';

echo '<h4>Infos Video</h4>';

echo 'Id : ' . $event['video']['id'] . '<br/>';
echo 'Type : ' . $event['video']['type'] . '<br/>';
echo 'Titre : ' . $event['video']['titre'] . '<br/>';
echo 'Description : ' . $event['video']['description'] . '<br/>';
echo 'Image : ' . $event['video']['img'] . '<br/>';
echo 'Code : ' . $event['video']['code'] . '<br/>';

echo '<h2>Les commentaires</h2>';

foreach ($comments as $comment) {
    echo '<fieldset>';
    echo '<legend>Commentaire (#' . $comment['id'] . ') </legend>';
    echo 'Id : ' . $comment['id'] . '<br/>';
    echo 'User id : ' . $comment['user_id'] . '<br/>';
    echo 'Event id : ' . $comment['event_id'] . '<br/>';
    echo 'Contenu : ' . $comment['content'] . '<br/>';
    echo 'Email : ' . $comment['email'] . '<br/>';
    echo 'Created : ' . $comment['created'] . '<br/>';
    echo '</fieldset>';
}
wenz
Auteur

Liek tu as raison mais il peut y avoir plusieurs event c'est pourquoi je prefere utiliser un foreach

@Couleurs Afrik Marcello : Si tu ne réponds pas aux questions que je te pose, ne t'attends plus à ce que je réponde à tes sujets.
@Liek : Qu'est-ce que tu nous fait là ? Je te rappelle que ça concerne CakePHP et tu nous montre entre-autre un pauvre lien basique, sans la moindre convention du Framework

@Lartak : Désolé, mais toi de quoi tu me parles, on s'en fout du lien, c'est juste pour la démo. S'il veut utiliser le helper de CakePHP il peut le faire.

Le code final donne :

<?php

$items = array();
foreach($items as $item) {

    $event = $item['Event'];
    $comments = $item['Comment'];

    echo '<h1>L\'evenement #' . $event['id'] .  '</h1>';

    echo 'Id : ' . $event['id'] . '<br/>';
    echo 'Event : ' . $event['event'] . '<br/>';
    echo 'Content : ' . $event['content'] . '<br/>';
    echo 'Filename : ' . $event['filename'] . '<br/>';
    echo 'User id : ' . $event['user_id'] . '<br/>';
    echo 'Created : ' . $event['created'] . '<br/>';
    echo 'Slug : ' . $event['slug'] . '<br/>';
    echo 'Lien <a href=": http://tonsite.com/' . $event['link']['controller'] . '-' . $event['link']['action'] . '-' . $event['link']['slug'] . '-' . $event['link']['id'] . '.' . $event['link']['ext'] . '">Voir le lien</a>';

    echo '<h4>Infos Video</h4>';

    echo 'Id : ' . $event['video']['id'] . '<br/>';
    echo 'Type : ' . $event['video']['type'] . '<br/>';
    echo 'Titre : ' . $event['video']['titre'] . '<br/>';
    echo 'Description : ' . $event['video']['description'] . '<br/>';
    echo 'Image : ' . $event['video']['img'] . '<br/>';
    echo 'Code : ' . $event['video']['code'] . '<br/>';

    echo '<h2>Les commentaires</h2>';

    foreach ($comments as $comment) {
        echo '<fieldset>';
        echo '<legend>Commentaire (#' . $comment['id'] . ') </legend>';
        echo 'Id : ' . $comment['id'] . '<br/>';
        echo 'User id : ' . $comment['user_id'] . '<br/>';
        echo 'Event id : ' . $comment['event_id'] . '<br/>';
        echo 'Contenu : ' . $comment['content'] . '<br/>';
        echo 'Email : ' . $comment['email'] . '<br/>';
        echo 'Created : ' . $comment['created'] . '<br/>';
        echo '</fieldset>';
    }
}
wenz
Auteur

Bonjour lartak pour répondre à ta question

$val = $this->getVideoInfo($content);
$value['Event']['video'] = $val;
$event[$key] = $value;
$event_id = $value['Event']['id'];

ce code me permet de recupérer des vidéos youtube posté des membres.
pour ce qui concerne ce code $event_id = $value['Event']['id']; c'est un oublie de ma part.

pour ce qui concerne ma question j'ai reglé ça c'est une mauvaise interpretation de ma part .

 <?php foreach($event as $key=>$s): $comments = $s['Comment'];$s=$s['Event']; $i++;?>
 // traitement event
 <?php   foreach($comments as $v){?>
  // traitement comment
 <?php ?>
 <?php endforeach ;?>

voilà c'est corrigé merci.