2013-11-18 5 views
0

У меня есть 2 controllers, назовем их c1 и c2. Теперь я хочу вызвать функцию в c2, скажем, actionC2, из функции в c1.вызов функции контроллера с другого контроллера

Я пытался что-то вроде этого:
$c2_instance = new c2();
$c2_instance->actionC2();

, но он не будет работать. Я получаю эту ошибку: Missing argument 1 for CController::__construct().
Что я делаю неправильно?

EDIT: может быть, его важно, чтобы сказать, что она падает на первой линии

+0

У вас отсутствует аргумент при вызове 'CController', добавьте его при вызове' CController ($ argument) 'или удалите необходимость в аргументе. – vonUbisch

+0

@ user488074 Хотя это может быть решением на короткое время, оно откусит вас сильно позже. –

+1

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

ответ

3

Вы не должны вызывать контроллер от другого контроллера. Вы должны перенаправить с помощью этого

$this->redirect(array('controller/action')); 

И если вы не имеют ровно никакого способа другого, что чем, пересмотреть свой дизайн. Решите проблема, не пытайтесь скрыть это. Это все равно откусит вас.

0

Как сказал @ user488074, у вашего контроллера должен быть аргумент, который он ищет, когда вы создаете экземпляр его. Перейдите к этому контроллеру и посмотрите, что он ищет в функции contstruct. Если вы не хотите, чтобы передать аргумент все время для этого контроллера затем добавить что-то вроде этого к функции конструкт аргумента

public function foo($argument = NULL){ 
} 

поэтому он имеет значение по умолчанию, если вы не хотите что-то передать.

+0

@ Ответ MD.Sahib намного лучше для рамки yii, однако вам все равно нужно посмотреть, какие аргументы ваш контроллер должен создать и понять. – jdcookie

Смежные вопросы