Малоизвестный факт: Cake В любом случае возвращает их как объекты или свойства объекта. Массивы являются синтаксическим сахаром:
// In your View:
debug($this->viewVars);
Shwoing $this
- это объект View , а свойство viewVars
соответствует $this->set('key', $variable)
или $this->set(compact('data', 'for', 'view'))
из действия контроллера.
Проблема с раздавливанием их в $Post->id
ради нажатия клавиш - это Cake, почему. Cake спроектирован так, чтобы быть тяжелым помощником, поэтому его встроенный ORM невероятно мощный, неизбежный и предназначен для обращения к бесконечным строкам бесконечно связанных таблиц - автоматических обратных вызовов, автоматической передачи данных, генерации запросов и т. Д. Базовая глубина многомерных массивов зависит в вашем методе find, как только вы работаете с более чем одной $ 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
ошибки, потому что (догадываясь) вы случайно пытаетесь отобразить действие редактирования, амирит? По умолчанию в действиях редактирования используется только $this->set
для установки связанных видов моделей для просмотра. Результат $ 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
НТН.