Каков наилучший способ доступа к другой модели CakePHP в контроллере? - PullRequest
3 голосов
/ 12 мая 2010

Скажем, у меня есть два таких контроллера: Table1sController и Table2sController. С соответствующими моделями: Table1sModel, Table2sModel.

В Table1sController я получил это:

$this->Table1sModel->action();

Скажем, я хочу получить доступ к некоторым данным в Table2sModel.

Как можно сделать что-то подобное в Table1sController? Я пробовал это в Table1sController:

$this->Table2sModel->action();

Но я получил сообщение об ошибке, подобное этому:

Неопределенное свойство: Table1sController :: $ Table2sModel

Ответы [ 2 ]

8 голосов
/ 12 мая 2010

Есть несколько способов попасть сюда.

Если ваши модели имеют определенные ассоциации (hasMany и т. Д.), Вы можете получить доступ к методам этой модели (при условии, что вы находитесь в Model1Controller) с помощью:

$this->Model1->Model2->method();

Если между двумя моделями нет ассоциации моделей, но вы хотите иметь возможность использовать методы Model2, вы можете добавить запись в атрибуте $ used для model1Controller. Смотри http://book.cakephp.org/2.0/en/controllers.html#components-helpers-and-uses

Наконец, если это временное соединение (вам не нужно каждый раз загружать другие модели, потому что вы редко обращаетесь к model2), ознакомьтесь с разделом руководства по созданию / уничтожению ассоциаций на лету в http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

2 голосов
/ 12 мая 2010

Что-то не так с тем, что вы делаете.

В любом контроллере вы можете указать $ used = array ('Table1sModel', 'Table2sModel', 'LolModel') и использовать каждую модель, необходимую вам в вашем контроллере. Вы не вызываете другой контроллер для доступа к модели. Модели предназначены для доступа к данным, вы получаете доступ к нужным прямо с любого контроллера.

Я понимаю, что многие примеры MVC почти всегда показывают одну страницу одного контроллера с одной моделью, что ужасно неправильно, так как в 99% случаев у вас есть один сайт с одного контроллера, использующего много разных частей разных моделей.

(Если вам действительно нужно вызвать действие, используйте $ this-requestAction ())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...