我试图了解Cakephp。我按照官方页面http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/blog.html中的说明进行操作,现在我可以在页面上显示一些帖子。由于某些原因,所有文件和函数都必须具有名称" Posts"但是当你想要搜索数据库表时,你必须写" post" [$ this-> set(' posts',$ this-> post-> find(' all'));]。为什么?我读到了CakePHP约定,但它没有意义。如果我有一个hello.ctp页面和一个" goodmorning"表名?我花了2天时间,我总是这样做:错误:在非对象上调用成员函数find()。我想展示我的帖子和我的#34; goodmorning"表在同一页面上。
为了说清楚,我有两张桌子:
CREATE TABLE `Posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(50),
`body` TEXT,
`created` DATETIME DEFAULT NULL,
`modified` DATETIME DEFAULT NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `Comments` (
`id` int(11) DEFAULT NULL,
`name` VARCHAR(50),
`comment` TEXT,
`created` DATETIME DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
PostController.php
<?php
class PostsController extends AppController {
public function index() {
$posts = $this->Post->find('all');
$this -> set ('posts',$posts);
$comments = $this->comment->find('all');
$this -> set ('comments',$comments);
}
}
?>
PostsModel.php
<?php
class Posts extends AppModel {
}
?>
CommentsModel.php
<?php
class Comments extends AppModel {
}
?>
如果我从PostController中删除这些行:
$comments = $this->comment->find('all');
$this -> set ('comments',$comments);
&#34;帖子&#34;表格将显示(localhost / cake / Posts)。在纯PHP中我可以在几分钟内构建它,但在cakephp中我真的感到绝望
答案 0 :(得分:0)
行$this->set('posts', $this->Post->find('all'));
将转到Posts模型,执行find()函数,然后将该数据设置为视图变量$posts
。您可以将变量名称更改为&#39;帖子&#39;在$this->set()
的第一个参数中,数据将被设置为$Posts
的视图变量。
CakePHP的命名约定不适用于变量名称。你应该定义一个你喜欢的风格并坚持下去。帮助文档通常使用所有小写名称,其中的单词用下划线分隔,但除非您引用CakePHP的预定义值之一,否则它与任何内容无关。
您的goodmorning
表名称的问题是CakePHP约定的表名应该是小写,复数,并且单词应该用下划线分隔。如果你想要&#34; Cake Magic&#34;要按惯例将所有名称无形地连接在一起,您要创建的是名为good_mornings
的数据库表,名为GoodMorning
的模型和名为GoodMorningsController
的控制器。
答案 1 :(得分:0)
在Cakephp中
使用具有自定义名称的表
<?php
class Post extends AppModel {
public $useTable = 'goodmorning';
}
?>
使用带自定义名称的视图
public function index() {
$this->autoRender = false;
$this->render('hello');
}
答案 2 :(得分:0)
表名必须是小写和复数(例如帖子)
模型名称必须是小写,除了第一个字母和单数(例如Post)
控制器名称必须是复数并附加到单词&#34; Controller&#34; (例如PostsController)
表id必须命名为&#34; id&#34; (但可以使用其他名称命名,您必须在Model类中指定不同的名称。例如$this->Post->id = $newId
)