CakePHP调用未定义的方法find()

时间:2014-06-18 14:58:42

标签: cakephp find

所以我是CakePHP的新手,并尝试建立一个类似于CakePHP博客教程的小项目。

我做了什么:

  • 创建了一个数据库表" sessions"
  • 在Controller文件夹中创建了一个SessionsController.php
  • 在Model文件夹
  • 中创建了Session.php
  • 在View
  • 中创建了一个Sessions文件夹
  • 在Sessions文件夹中创建了一个index.ctp

我的问题是:

尝试访问时     会话,我会收到这个错误:

"错误:调用未定义的方法SessionComponent :: find()
文件:C:\ xampp \ htdocs \ JFKTransparency \ app \ Controller \ SessionsController.php 行:12"

这是我的SessionsController.php:     

class SessionsController extends AppController {
    public $helpers = array('Html', 'Form');
    public $layout = 'jfklayout'; 
    public function index() { 
        $this->loadModel('Councillor');
        $this->set('councillors', $this->Councillor->find('all', array('order'=> array('Councillor.id' => 'asc'))));
        $this->set('sessions', $this->Session->find('all'));  <<<<------FAILS HERE
    }
    public function view($id = null) {
        if (!$id) {
           throw new NotFoundException(__('Invalid post'));
        }

        $session = $this->Session->findById($id);
        if (!$session) {
            throw new NotFoundException(__('Invalid post'));
        }
        $this->set('session', $session);
    } 
}

这是我的Session.php:

<?php

class Session extends AppModel {

    public $hasmany = array('Decision' => array('className' => 'Decision','foreign_key' => 'session_id'));

} 

这是我的index.ctp:

<h1> Ratssitzungen </h1>

<table>
    <tr>
        <th>Id</th>
        <th>Date</th>
        <th>Title</th>
        <th>Description</th>

        <?php foreach ($sessions as $session): ?>
            <th>
        <div class="councillor">
            <?php echo $this->Html->image($councillor['Councillor']['imageurl'], array('alt' => $councillor['Councillor']['first_name'], 'border' => '1')) ?>
            <p><?php echo $councillor['Councillor']['first_name'] . " " . $councillor['Councillor']['last_name']; ?></p>
        </div>
    </th>
<?php endforeach; ?>
</tr>

<?php foreach ($sessions as $session): ?>
    <tr>
        <td><?php echo $session['Session']['id']; ?></td>
        <td><?php echo $session['Session']['session_date']; ?></td>
        <td><?php echo $session['Session']['title']; ?></td>  
    </tr>
    <tr COLSPAN="3">
        <td>
            <?php echo h($session['Session']['description']); ?>
        </td>
    </tr>
<?php endforeach; ?>
<?php unset($session); ?>
</table>

我知道这应该可行,因为我可以从CakePHP教程中从PostsController访问Sessions就好了:

$this->loadModel('Session');
$this->set('sessions', $this->Session->find('all')); 

此代码适用于PostsController。有人有线索吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

在考虑项目中的模型/控制器/组件/助手/等名称时,您必须记住,除非您想要遇到意外错误,否则最好不要使用一组保留字。一般来说,你必须要考虑语言的特定保留词和框架词。这不仅适用于PHP和Cakephp,还适用于Java和X框架,python和Django以及所有其他。

现在,为此,错误是对模型使用名称“Session”,因为Cake使用“Sessions”作为其组件和帮助器。所以,理智的事情要做:只需更改名称。

对于将来的参考资料,我会在这里留下链接来获取php中的保留字和蛋糕(我可能错过了一些)。

PHP keywords

对于蛋糕,你必须密切注意蛋糕的类(不要指出你的任何模型/组件/等),以及恒定和全局功能。

Cake's classes(您的错误落在此处,在文件夹Controller / Component中)/ SessionComponent

Global constants