CakePHP: 3 уровня глубоких ассоциаций не работают должным образом - PullRequest
0 голосов
/ 02 марта 2012

В моем приложении у пользователя есть профиль, и он может оставлять комментарии и сообщения.

При просмотре списка комментариев к сообщению я хочу показать имя человека, который оставил комментарий. Я пробовал следующее:

<?php if ( ! empty($post['Comment']) ): ?>
        <ul>
            <?php foreach ($post['Comment'] as $comment): ?>
            <li id="comment-<?php echo $comment['id']; ?>">
                <h3><?php echo $this->Html->link($comment['User']['Profile']['firstname'] . ' ' . $comment['User']['Profile']['lastname'], array('controller'=>'profiles','action'=>'view','userName'=>$comment['User']['username'])); ?></h3>
                <?php echo $comment['content']; ?>
                <?php echo $comment['datetime']; ?>
            </li>
            <?php endforeach; ?>
        </ul>
        <?php else: ?>
        <p>No comments...</p>
        <?php endif; ?>

Но я получаю следующую ошибку: Undefined index: User [APP/View/Posts/view.ctp, line 37]

Есть идеи, как решить проблему?

У меня есть следующее для метода контроллера:

function view ( $id = null, $slug = null )
    {   
        $post = $this->Post->find('first',array('contain'=>array('Comment','User'=>array('Comment','Profile')),'conditions'=>array('Post.id'=>Tiny::reverseTiny($id))));

        if (!$post)
        {
            throw new NotFoundException('404');
        }
        else if($post['Post']['status'] == '0') // 0=draft 1=open 2=open
        {
            if($post['Post']['user_id'] == $this->Auth->user('id'))
            {
                $this->Session->setFlash('Your post has NOT been published yet');
            }
            else
            {
                throw new NotFoundException('404');
            }
        }

        if (Inflector::slug($post['Post']['title']) != $slug || $slug = null)
        {
            $this->redirect(array('id'=>Tiny::toTiny($post['Post']['id']),'slug'=>Inflector::slug($post['Post']['title'])));
        }

        $this->set(compact('post'));
    }

Все ассоциации моделей должны быть правильными, так как я хорошо вижу комментарии и информацию о профиле для самого сообщения, просто комментарии, которые не отображают информацию профиля.

Спасибо всем, кто может помочь.

1 Ответ

1 голос
/ 02 марта 2012

Вы устанавливаете $post['Comment'] как $comment в вашем foreach, тогда как ваши пользовательские данные находятся не в $post['Comment']['User'], а в $post['User'], поэтому ваш вызов с $comment['User'] не будет работать, так как этот индекс не существует.

Используйте debug($var) в будущем, чтобы вы могли видеть, как выглядит ваша структура массива в любой данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...