2010-11-01 3 views
1

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

<?php 
class UsersController extends AppController { 

    function get_category() { 
     .... 
    } 

} 
?> 

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

+4

Почему вы хотите это сделать? Это нарушает хорошие практики MVC, и для меня это кричит «что-то не было правильно настроено». –

+0

+1 да, но .... – Leo

ответ

2

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

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

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

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

+0

Но это не генерирует вывод файла get_category.ctp. Я также хочу отобразить его вывод. – gautamlakum

1

вы можете назвать это как $ this-> requestAction ('контроллер' => 'пользователей', 'действие' => 'get_category')

+0

коррекция $ this-> requestAction ('users/get_category') – mentes

+1

оба будут работать :) –

+0

насколько я знаю $ this-> requestAction ('controller' => 'users' , 'action' => 'get_category'), этот должен быть $ this-> requestAction (array ('controller' => 'users', 'action' => 'get_category')) Я не пробовал это другим способом – mentes

2

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

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

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