Как получить доступ к модели плагина из обычного контроллера в PHP Cake 1.1 - PullRequest
0 голосов
/ 28 апреля 2010

Надеюсь, простой вопрос: у меня есть плагин, который использует набор таблиц (kb_items, kb_item_tags и т. Д.). и я хотел бы иметь возможность доступа к этим моделям с другого контроллера (скажем, моего контроллера страниц), таким образом:

class PagesController extends AppController{

function knowledgebase(){
  $items = $this->KbItem->findAll(...);
}

}

По общему признанию, я немного нарушаю правила (не помещая этот контроллер в плагин базы знаний), но в данном случае это настраиваемая страница, которая не должна быть частью базы кода плагина базы знаний.

Пожалуйста, дайте мне знать, если вам нужно больше деталей. Заранее спасибо за любую помощь!

Ответы [ 3 ]

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

Мне просто нужно было сделать это самому, и размещение названия модели в массиве «Uses» работает. Если вам не нужен доступ к модели в нескольких действиях контроллера, вы также можете использовать loadModel () для доступа к ней только в тех действиях, которые вам нужны. Например, допустим, вам нужен только доступ к этой модели в действии view () данного контроллера:

function view() {
  // load the model, making sure to add the plug-in name before the model name
  // I'm presuming here that the model name is just 'Item', and your plug-in is called 'Kb'
  $this->loadModel('Kb.Item');

  // now we can use the model like we normally would, just calling it 'Item'
  $results = $this->Item->find('all');
  }

Надеюсь, это поможет.

1 голос
/ 30 апреля 2010

Не уверен, работает ли это так в 1.1, но в 1.2+ вы добавляете префикс модели к имени модуля и точку в массиве использования контроллера:

class PagesController extends AppController
{
    var $uses = array('Page','Kb.KbItem');

    function knowledgebase()
    {
         // This now works
         $items = $this->KbItem->findAll();
    }
}
0 голосов
/ 29 апреля 2010

Просто добавьте модели в свойство $uses вашего контроллера:

class PagesController extends AppController
{
    var $uses = array('Page','KbItem');

    function knowledgebase()
    {
         // This now works
         $items = $this->KbItem->findAll();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...