кросс-модуль связи Zend Framework PHP - PullRequest
1 голос
/ 20 января 2012

Как я могу вызвать контроллер :: действие из другого контроллера контроллера :: действие в Zend.

dir tree

-modules
--auth
---controllers
--crm
--default
---controllers

как мне сделать что-то вроде этого:

/* module\default\controller */

public function indexAction(){
        $something = \model\auth\IndexController::doSomething();
}

ОБНОВЛЕНИЕ:

Я знаю, что нечто подобное возможно в CodeIgniter через модульные расширения см. Здесь

$out = modules::run('module/controller/method', $param1, ....);

Ответы [ 4 ]

2 голосов
/ 20 января 2012

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

1 голос
/ 27 января 2012

Если вам нужно вызвать действие от другого, не идти вперёд с потоком вашей программы, значит, что-то не так, как сказал RockyFord.

Подумайте в своем объяснении о частичном извлечении информации для построенияwidget, я бы создал помощника в библиотеке, чтобы он мог вызываться из любого места, например:

-lib
--MyLib
---Controller
----Action
-----Helper
------ Foo.php

Помощник действия Foo может быть:

class MyLib_Controller_Action_Helper_Foo extends Zend_Controller_Action_Helper_Abstract {

   public setBar() { 
      // some code here
   }       

   public getBar() { 
      // some code here for retrieving the partial
   }
}

Затем вызыватьэто из другого действия контроллера или даже из другой функции lib

 // in a controller action
 ...
 $foo = new MyLib_Controller_Action_Helper_Foo();
 $foo->setBar();
 $bar = $foo->getBar();
 $this->view->bar = $bar;
 ...

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

Namastê !!

0 голосов
/ 23 января 2012

Я согласен с предложением RockyFord о том, что помощник стека действий является, вероятно, вашим лучшим выбором.

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

0 голосов
/ 23 января 2012

Если вы хотите это сделать, возможно, что-то не так с вашим дизайном.Попробуйте переместить желаемую функциональность в третий класс, например, в action helper и вызвать его с обоих контроллеров.Тем не менее, должно быть возможно сделать

$a = new A_Controller();
$a->aAction();

или

A_Controller::aAction();

, если aAction объявлено static .(Я не пробовал ни того, ни другого.)

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