了解CakePHP控制器

时间:2013-04-15 19:59:52

标签: php cakephp

我正在阅读CakePHP的初学者教程,我有一个问题:

在博客教程中,已在Controller中创建了以下功能

public function index() {
    $this->set('posts', $this->Post->find('all'));
}

我正在努力更好地理解这意味着什么,特别是

$this->Post->find('all')

这是对Controller对象的Post对象的引用,然后调用它的find函数。 这个Post对象是Post对象的linkedList(或其他一些数据结构)吗?这似乎是唯一合理的方式,但我想确定。我已经习惯了Java中的OOP和PHP中的OOP新手,并且认为我可能会遗漏一些碎片。

2 个答案:

答案 0 :(得分:1)

您的模型控制数据库访问。因此,当您需要数据库中的数据时,在Controller中,您需要使用模型来检索它。

$this->Post->find('all');

告诉'发布'模型检索所有帖子。

最佳做法实际上是不要使用Controller中的find()方法,而是调用模型中创建的自定义方法。例如:

//inside PostsController
$posts = $this->Post->getPosts();

//inside Post Model
public function getPosts() {
    return $this->find('all');
}

当你添加条件,限制,订单等等时,这通常会变得更复杂,但是这样做,它更接近MVC,M(模型)是所有数据检索。 (并且还使您的代码更清晰,因此无论何时您想要更新查找,您只需要在一个地方进行,而不是跨越多个控制器)

答案 1 :(得分:0)

它调用模型Post的方法find。 您的模型已找到,因为它扩展了AppModel。

   App::uses('AppModel', 'Model');
  class Post extends AppModel {
        public $name = 'Post';
    }

并返回ll是这样的

(它唯一的例子,它将依赖于你的数据库和你的模型帖子/用户......等)

Array
(
    [Post] => Array
        (
            [id] => 83
            [desc] => 'it is a test post'
            [user_id] => 2

        )

    [user] => Array
        (
            [id] => 2
            [name] => 'rafael'
            [phone] => '9999-000'
        )
)

并且这个数组在变量'posts'中对你的视图访问是不可取的。