php - CakePHP 2.0 对象不是数组

标签 php arrays cakephp object cakephp-2.0

我目前是 CakePHP 的初学者,并且使用过 CakePHP 1.3,但最近发布了 CakePHP 2.0。

到目前为止,我喜欢它,但唯一令人痛苦的是它不返回对象,而只返回数组。我的意思是,必须执行 $post['Post']['id'] 几乎没有意义。 (在我看来)只做 $post->id 更实用。

现在在 Google 之后我偶然发现了 this链接,但是,当使用 Form 类时,这会不断产生关于未定义索引的错误(猜测这是因为它正在获取对象化版本而不是数组版本)。

我正在关注博客教程(已经在 1.3 下关注了它,但在 2.0 中再次关注它)

那么,有人知道如何在不干扰 Form 类的情况下实现这一点吗?

最佳答案

鲜为人知的事实:Cake 确实将它们作为对象或对象的良好属性返回。数组 是语法糖:

    // In your View:
    debug($this->viewVars);

显示 $this 是一个 View 对象 并且 viewVars 属性 对应于 $this ->set('key', $variable)$this->set(compact('data', 'for', 'view')) 来自 Controller 操作。

为了击键而将它们压缩到 $Post->id 中的问题是 Cake 的原因。 Cake 被设计成举重运动员,所以它的内置 ORM 非常强大,不可避免,并且旨在处理无限关联表的无限行 - 自动回调,自动数据传递,查询生成等。多维数组的基础深度取决于在您的 find 方法中,一旦您处理多个关联模型的多个 $Post(例如),您就已经将数组引入组合中,这是不可避免的。

不同的find 方法返回不同深度的数组。从默认生成的 Controller 代码中可以看出,index 使用了 $this->set('posts', $this->paginate()); - view 使用了 $this->set ('post', $this->Post->read(null, $id)); 并且编辑根本不使用 $this->set 和 Post 查找 -它分配 $this->data = $this->Post->read(null, $id);

FWIW,Set::map 可能会抛出那些 undefined index 错误,因为(猜测)您碰巧正在尝试映射编辑操作,amirite?默认情况下,编辑操作仅使用 $this->set 将关联的模型查找设置到 View 。 $this->read 的结果被发送到 $this->data。这可能就是 Set::map 失败的原因。无论哪种方式,你仍然会以 $Post[0]->id$Post->id 为目标(取决于你找到的方法),这并没有太大的改进。

以下是这些操作的 Set::map() 属性深度的一些通用示例:

    // In posts/index.ctp
    $Post = Set::map($posts);
    debug($Post);
    debug($Post[0]->id);

    // In posts/edit/1
    debug($this-viewVars);
    debug($this->data);

    // In posts/view/1
    debug($this-viewVars);
    $Post = Set::map($post);
    debug($Post->id);

http://api13.cakephp.org/class/controller#method-Controllerset

http://api13.cakephp.org/class/model#method-Modelread

http://api13.cakephp.org/class/model#method-ModelsaveAll

HTH.

关于php - CakePHP 2.0 对象不是数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7946480/

相关文章:

c++ - vector 数组的默认值是多少?

php - 按 slug 查询还是按 id 查询?

php - _POST 方法返回 ???当请求utf8字符时

php - 不寻常的三元运算

objective-c - 在 Objective-C 中使用 strcpy 处理字符数组和字符串值时出现问题

Cakephp 2.3 $this->Auth->allow() 未按预期工作

CSS 不适用于 CakePHP,使用 MAMP

php - WooCommerce 结账的时间循环从日期选择器输入字段中选择选项

php - 在Elasticsearch上忽略ASCII字符

PHP 使用破折号箭头 "->"检索数组值