undersanding CakePHP's controller


undersanding CakePHP's controller

我正在学习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新手,我认为我可能缺少一些部分。

您的模型控制数据库访问。所以,当你想从你的数据库中获取数据时,在你的控制器中,你需要使用模型来检索它。

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

告诉'Post'模型检索所有的Post。

最佳实践实际上是根本不使用控制器中的find()方法,而是调用在模型中创建的自定义方法。例如:

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

当你添加条件、限制、命令时,情况通常会变得复杂得多。等,但这样做,它更接近MVC, M(模型)是做所有的数据检索。(也使您的代码更干净,所以任何时候您想要更新查找,您只需要在一个地方做,而不是跨多个控制器)

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

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

和返回将是这样的

(这是唯一的例子,它将取决于你的数据库和你的模型post/user…等)

Array
(
    [Post] => Array
        (
            [id] => 83
            [desc] => 'it is a test post'
            [user_id] => 2
        )
    [user] => Array
        (
            [id] => 2
            [name] => 'rafael'
            [phone] => '9999-000'
        )
)

和这个数组对于变量'posts'中的视图访问是不可用的。