鮮爲人知的事實:蛋糕DOES將它們作爲對象或井對象的屬性返回。的陣列是語法糖:
// In your View:
debug($this->viewVars);
Shwoing $this
是一個視圖對象和的viewVars
屬性與來自控制器動作$this->set('key', $variable)
或$this->set(compact('data', 'for', 'view'))
對應。
爲了擊鍵而將它們壓扁爲$Post->id
的問題是Cake是爲什麼。 Cake的設計是一個沉重的舉手,所以它的內置ORM是非常強大的,不可避免的,並且用於處理無窮大的無窮大關聯表 - 自動回調,自動數據傳遞,查詢生成等。多維數組的底層深度取決於在您的查找方法中,只要您處理多個具有多個關聯模型的$ Post,例如,您已經將數組引入混合中,並且沒有任何迴避。
不同的find
方法返回不同深度的數組。從默認生成的控制器代碼中,您可以看到該索引使用$this->set('posts', $this->paginate());
- 查看使用$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
將相關模型查找設置爲視圖。 $ this-> read的結果將發送到$this->data
。這可能是Set :: map失敗的原因。無論哪種方式,你仍然最終瞄準$Post[0]->id
或$Post->id
(取決於你找到的方法你使用),這是沒有太大的改善。
這裏是集::地圖()屬性深度的這些行動的一些通用的例子:
// 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。
這工作!謝謝!它可能不像你所說的那麼完美,但是這樣我就可以訪問數組和對象版本,如果我以某種方式需要它的話!謝謝 –