вызов действия контроллера из файла ctp

Я хочу вызвать действие файла контроллера из файла .ctp в cakephp. Является ли это возможным? да чем как? пожалуйста помоги. например У меня есть действие в контроллере. users_controller.php

<?php
class UsersController extends AppController {

    function get_category() {
        ....
    }

}
?>

Я хочу вызвать его из файла /question/index.ctp.


person gautamlakum    schedule 01.11.2010    source источник
comment
почему ты хочешь сделать это? Это нарушение хороших практик MVC, и для меня это кричит о том, что что-то не было настроено должным образом.   -  person Travis Leleu    schedule 01.11.2010


Ответы (3)


Правильный способ сделать это:

$this->requestAction(array('controller' => 'users', 'action' => 'get_category'));

Создание URL-адреса the CakePHP way повысит производительность (не нужно будет использовать маршрутизатор). Также всегда будет работать, если делать это так: «users/get_category» может вызвать некоторые проблемы, когда вы не находитесь на странице индекса.

Его следует использовать только в элементах (особенно с кешем), если дело обстоит иначе - ссылайтесь на то, что Travis Leleu написал в своем комментарии.

person pawelmysior    schedule 01.11.2010
comment
Но он не генерирует вывод файла get_category.ctp. Я также хочу отобразить его вывод. - person gautamlakum; 06.11.2010

Следует отметить, что вам НЕ следует полагаться на requestAction как на обычную практику. requestAction — чрезвычайно трудоемкий вызов, и его следует использовать только в том случае, если вы не можете организовать свой код каким-либо другим способом.

В идеале вы должны отправлять данные, которые вам нужны, из действия вашего контроллера в представление, а не вызывать резервную копию вашего контроллера.

function my_action() {
   ...
   $this->set('category', $this->getCategory());
}
person jmking    schedule 02.11.2010

вы можете назвать это как $this->requestAction('controller'=>'users','action'=>'get_category')

person mentes    schedule 01.11.2010
comment
насколько я знаю $this-›requestAction('controller'=›'users','action'=›'get_category') это должно быть $this-›requestAction(array('controller'=›'users', 'action'=›'get_category')) по другому не пробовал - person mentes; 01.11.2010