-1

zendフレームワークプロジェクトで他のコントローラーへの内部リクエストを行う必要があります。

私はこれを行うためにアクションヘルパーを調査しましたが、どれも機能していないようです。

私のプロジェクトはAPIです。このAPIは、出力を複製することがあります。

例:/client.json:ユーザーがアクセスできるクライアントのリストを返します/client/tree.jsonはクライアントのツリーを返します

モデルコードと余分なクエリを削減するには、データ/client/tree.jsonを再バインドして、/ client.jsonを内部呼び出しし、そこでクリーンアップされたクライアントリストをフェッチすることをお勧めします。

Zendsのドキュメントには次のように書かれています。

    $request = clone $this->getRequest();
    $request->setActionName('get')
        ->setControllerName('tree')
        ->setParams(array('bar' => 'baz'));
$this->_helper->actionStack($request);

ただし、そのリクエストからデータを抽出する方法については説明していません。もし私が

print_r($this->_helper->actionStack($request)); 

Zendのゴミが1トンもらえる

4

1 に答える 1

-1

これは、コントローラーで実行する必要があることではありません。モデルで処理する必要があります。モデルはデータ(この場合はクライアントリストまたはクライアントツリー)を提供します。モデルのみがそのデータを提供する必要があります。達成したいのは、実際にはキャッシュの形式です。モデルまたはアプリケーションの内部と外部の両方で、さまざまな方法でそのデータをキャッシュできます。

モデル内にIDマップを実装する方法を調べることから始めたいと思うかもしれません。

class someBaseMapper
//an identity map can be as simple as a protected class variable with accessors
 protected $map = array();

 /**
     * Set value and name of entity in identity map.
     *
     * @param string $id
     * @param object $entity
     */
 protected function setMap($id, $entity)
    {
        $this->map[$id] = $entity;
    }

    /**
     * Get value of entity id from identity map.
     *
     * @param string $id
     * @return string
     */
    protected function getMap($id)
    {
        if (array_key_exists($id, $this->map)) {
            return $this->map[$id];
        }
    }

次に、マップを使用するには:

//later in the same mapper
public function findById($id)
{
    //check map requested id
    if ($this->getMap($id)) {
        return $this->getMap($id);
    }
    //if no map match
    $select = $this->getGateway()->select();
    $select->where('id = ?', $id);

    $row = $this->getGateway()->fetchRow($select);
    //create entity
    $entity = $this->createEntity($row);
    //add new entity to map
    $this->setMap($row->id, $entity);

    return $entity;
}

また、データベースまたはページのキャッシュについてZend_cacheをチェックアウトすることもできます。PHPで利用できる外部キャッシュツールもいくつかあり、興味深いと思うかもしれません。

于 2012-11-03T07:25:24.123 に答える