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

標準のアクションは返された変数を受け取らなかったため、このためにZend_Controller_Actionを拡張する必要があります。

于 2012-10-31T14:37:23.017 に答える
0

リクエストがディスパッチされたときに表示する変数を割り当てる場合は、次に示すように、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

試行している方法(ビュー/ 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 に答える