1

我对 Zend 有一点问题。我正在尝试发出一些虚假的 HTTP 请求,并在module->controller->action执行后返回在该操作中设置的随机变量。就像在变量设置的情况下一样view->assign(,)- 我可以稍后从视图文件 (.phtml) 访问它们。

这是我的代码的一部分:

/application/controller/IndexController.php

<?php
class IndexController extends Zend_Controller_Action
{
    public function init(){}
    public function indexAction()
    {
        #$this->view seems to be a NULL value from the fake request, so I can't pass variables to it 
        //$this->view->x = 'y';
        echo 'test';
        return array(
            'x' => 'y'
        );
    }
}

/public/index2.php

<?php
//--cut--
$application->bootstrap();
$options = array(
    'action' => 'index',
    'controller' => 'index',
    'module' => 'default'
);
if( isset($options['action'], $options['module'], $options['controller']) )
{

    $request = new Zend_Controller_Request_Http ();
    $request->setModuleName($options['module'])->setActionName($options['action'])->setControllerName($options['controller']);  
    $frontController = Zend_Controller_Front::getInstance ()->returnResponse ( true );

    $response = new Zend_Controller_Response_Http ();

    $frontController->getDispatcher ()->dispatch ( $request, $response );
    echo '$response:<b>Zend_Controller_Response_Http</b><br>';
    //This returns me the body of what I echo in the indexAction but not the variables.
    var_dump($response);
}

太感谢了!

4

3 回答 3

0

您将无法以您尝试的方式(在视图/MVC 之外)获取视图参数。这是因为在您的情况下,动作控制器仅在调度方法( )IndexController期间存在于内存中。IndexAction

使用类定义的参数view仅在调用时引用view->render(),然后仅生成 HTML。

但是,您可以从控制器操作中获取用户定义的变量(公共范围),如下所示:

    class IndexController extends Zend_Controller_Action
    {
        public function indexAction()
        {
            /** The view class uses PHP's magic set/get/isset methods to
            NULL any access to values that are protected (or more precisely 
            have a underscore _ prefix for the property name)

            hence $this->_view = null;
            **/

            /** we do however have access to this view (or create a new one if not already
            defined within the action controller) with: **/

            $view = $this->initView();

            /** An array of the public controller parameters **/
            $viewParams    = $view->getVars(); 

        }
    }

此外,现在可以简化分派这些请求的代码:

$front = Zend_Controller_Front::getInstance();
$front->setRequest(
    new Zend_Controller_Request_Http()->setParams($options)
)->dispatch();

注意:我使用的是 1.11 版本

于 2012-11-01T03:46:51.793 回答
0

如果要在请求派发时给view赋值,可以在indexAction中创建一个Zend_View实例并赋值,如下图:

  public function indexAction()
   {
     echo "test";
     $view = new Zend_View();
     $view->setBasePath(APPLICATION_PATH."/views/");
     $view->x = 'y';
     echo $view->render("index/index.phtml");
   }

尝试将变量嵌入到索引视图脚本中,您的响应的 var_dump 将包含回显的“测试”和 index.phtml 输出。

如果要将数组返回到响应,请使用 json:

      public function indexAction()
      {
         $array = array('x' => 'y');
         echo json_encode($array);
       }

index2.php:

        //.....
        var_dump($response);
        var_dump(json_decode($response->getBody())); 
于 2012-10-31T21:08:46.347 回答
0

您需要为此扩展 Zend_Controller_Action,因为标准 Action 没有接收返回的变量。

于 2012-10-31T14:37:23.017 回答