ZF Отобразить действие и получить HTML в другом действии - PullRequest
4 голосов
/ 01 февраля 2012

То, что я хочу сделать с Zend Framework, - это отобразить действие Y из действия X и получить html:

Пример:

public xAction(){
     $html = some_function_that_render_action('y');
}

public yAction(){
     $this->view->somedata = 'sometext';
}

, где представление y - этокак:

<h1>Y View</h1>
<p>Somedata = <?php echo $this->somedata ?></p>

Я ищу помощника действий, но не могу использовать его из контроллера.Как я могу решить это?Это возможно?

Ответы [ 3 ]

2 голосов
/ 02 февраля 2012

Вот один из возможных способов сделать то, что вы хотите.

public function xAction()
{
    $this->_helper
         ->viewRenderer
         ->setRender('y'); // render y.phtml viewscript instead of x.phtml

    $this->yAction();

    // now yAction has been called and zend view will render y.phtml instead of x.phtml
}

public function yAction()
{
    // action code here that assigns to the view.
}

Вместо использования ViewRenderer для настройки используемого скрипта вида вы также можете вызвать yAction, как я показалвыше, но получите html, вызвав $html = $this->view->render('controller/y.phtml');

См. также ActionStack helper .

1 голос
/ 11 сентября 2013

Вы можете использовать Action View Helper из контроллера

public function xAction()
{
    $html = $this->view->action(
        'y',
        $this->getRequest()->getControllerName(),
        null,
        $this->getRequest()->getParams()
    );
}

public function yAction()
{
    // action code here that assigns to the view.
}

Это не очень красиво, но работает хорошо, и вам не нужно использовать $view->setScriptPath($this->view->getScriptPaths());

Этот помощник создает новый Zend_Controller_Request для yAction (), поэтому вы можете задать свои собственные параметры в качестве 4-го аргумента или использовать $this->getRequest()->getParams() для расширения параметров запроса xAction ().

http://framework.zend.com/manual/1.12/en/zend.view.helpers.html#zend.view.helpers.initial.action

0 голосов
/ 02 февраля 2012

Наконец-то я нашел это «решение», это не то, что я хочу делать, но оно работает, если кто-то нашел настоящее решение, пожалуйста, ответьте здесь.

public function xAction(){
    $data = $this->_prepareData();
    $view = new Zend_View();
    $view->somedata = $data;
    $view->setScriptPath($this->view->getScriptPaths());

    $html = $view->render('controller/y.phtml');
}
...