CakePHP 2.2.4:未定义的索引错误

时间:2012-12-03 18:03:01

标签: php cakephp cakephp-appmodel

  

可能重复:
  PHP: “Notice: Undefined variable” and “Notice: Undefined index”

很多人都提出了有关“Notice(8)Undefined Index”错误消息的问题,但没有一个解决方案对我有用。我不确定我的模型关系是否设置正确。请指教。我在ARTICLES INDEX.CTP页面上得到了未定义的索引错误,它说“Avatar”是未定义的部分。

在我的USERS VIEW.CTP页面上我回应

$this->Custom->UserAvatar($article['User']['Avatar']['file'], $article['User']['username'], 'avatar_large');

它为我提供了正确的用户头像。

我的用户模型设置如下:

class User extends AppModel {

var $belongsTo = array(
   'Avatar' => array(
      'className'    => 'Avatar',
      'dependent'    => true,
      'foreignKey'  => 'id = Avatar.id'    ),

   );
    public $hasMany = array(
        'Favorite' => array(
            'className' => 'Favorite',
        ),
        'Article' => array(
            'className'  => 'Article',
        )
    );

} // end Model

我的文章模型设置如下:

class Article extends AppModel {
    public $validate = array(
        'title' => array(
            'rule' => 'notEmpty'
        ),
        'content' => array(
            'rule' => 'notEmpty'
        )
    );

var $belongsTo = array(
   'User' => array(
      'className'    => 'User',
      'dependent'    => true,
      'foreignKey'  => 'user_id'),

   );

} // end Model

我的AVATAR MODEL设置如此(此时此模型是否必要?):

class Avatar extends AppModel {

var $hasmany = array(
   'User' => array(
      'className'    => 'User')
   );

} // end Model

我把$ users = array('Users','Avatar')放在ARTICLES CONTROLLER中以防万一。

我不确定这些关系是否正确。 我的桌子:

Articles (id, user_id...etc) 
Users(id, avatar_id...etc)
Avatars(id, file...etc)

编辑:确切的错误读取...

Notice (8): Undefined index: Avatar [/APP/View/Articles/index.ctp, line 35]
include- APP/View/Articles/index.ctp, line 35
View::_evaluate() - CORE/Cake/View/View.php, line 920
View::_render() - CORE/Cake/View/View.php, line 883
View::render() - CORE/Cake/View/View.php, line 475
Controller::render() - CORE/Cake/Controller/Controller.php, line 957
Dispatcher::_invoke() - CORE/Cake/Routing/Dispatcher.php, line 193
Dispatcher::dispatch() - CORE/Cake/Routing/Dispatcher.php, line 161
[main] - APP/webroot/index.php, line 92

编辑:根据要求提供的ArticlesController.php

App::uses('AppController', 'Controller');
/**
 * Articles Controller
 *
 * @property Article $Article
 */
class ArticlesController extends AppController {


/**
 * index method
 *
 * @return void
 */
    public function index() {
        // $this->Article->recursive = 0; // I used this originally
        // $this->set('articles', $this->paginate()); // I used this originally
                $this->Article->find('all');
        $this->set('articles', $this->paginate());

    }

$ article或$ article的调试在User停止。头像应该是User数组中的一个数组。

$article = array(
    'Article' => array(
        'id' => '11',
        'page_id' => '2',
        'topic_id' => '7',
        'user_id' => '29',
        'title' => 'Test title for article 11'
    ),
    'Page' => array(
        'id' => '2',
        'category_id' => '1',
        'title' => 'Dexter',
    ),
    'Topic' => array(
        'id' => '7',
        'page_id' => '11',
        'title' => 'Press'
    ),
    'User' => array(
        'password' => '*****',
        'id' => '29',
        'username' => 'testuser',
        'avatar_id' => '519'
    )
)

2 个答案:

答案 0 :(得分:0)

看起来你的用户到头像属于设置不正确,但你说它有效吗?实际上,如果使用约定,则不需要foreignKey字段。所以,除非有其他事情发生,否则你的

'foreignKey'  => 'id = Avatar.id'

看起来应该是

'foreignKey'  => 'avatar_id'

您确实需要为我们添加更多代码/完整错误,以确定发生了什么。

答案 1 :(得分:0)

在文章控制器中设置recurisve = 2就可以了。还必须调整我在用户模型中的用户和头像之间的关联(必须让用户属于头像并且用户具有许多头像)。

我有点担心recursize = 2会降低应用程序的速度,因为文章与我在我网站上的所有其他用户内容模块相关联的评论相关联。