所以我是CakePHP的新手,并尝试建立一个类似于CakePHP博客教程的小项目。
我做了什么:
我的问题是:
尝试访问时 会话,我会收到这个错误:
"错误:调用未定义的方法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。有人有线索吗?
谢谢!
答案 0 :(得分:3)
在考虑项目中的模型/控制器/组件/助手/等名称时,您必须记住,除非您想要遇到意外错误,否则最好不要使用一组保留字。一般来说,你必须要考虑语言的特定保留词和框架词。这不仅适用于PHP和Cakephp,还适用于Java和X框架,python和Django以及所有其他。
现在,为此,错误是对模型使用名称“Session”,因为Cake使用“Sessions”作为其组件和帮助器。所以,理智的事情要做:只需更改名称。
对于将来的参考资料,我会在这里留下链接来获取php中的保留字和蛋糕(我可能错过了一些)。
对于蛋糕,你必须密切注意蛋糕的类(不要指出你的任何模型/组件/等),以及恒定和全局功能。
Cake's classes(您的错误落在此处,在文件夹Controller / Component中)/ SessionComponent