0

次の動作をするインターフェイスを作成したい:

HTML output for /a/.
<ul>
<li>html output for /a/1/</li>
<li>html output for /a/2/</li>
<li>html output for /a/3/</li>
</ul>

したがって、推測では、/a/ のビューは、/a/1/、/a/2/ などのそれぞれの html を取得する関数を実行します。

明らかに、ルーターには /a/ と /a/[:number] の 2 つの別個のコントローラー関数が含まれ、/a/[:number] のコントローラー関数は setTerminal(true) で ViewModel を返します。

ページが読み込まれたら、これらの各 URL を ajax で呼び出すことができます。このようにする理由は、後でこれらの html の部分を ajax で個別に更新したいからですが、最初の呼び出しではレンダリングが高速になるはずです。 /a/ への呼び出しの HTML のこれらの部分。

私が見たように、/a/[:number]/ の HTML を返す関数が必要なので、どうすればそれを行うことができるのでしょうか? どのような機能を使用できますか?

ありがとう

4

1 に答える 1

0

ビュー ヘルパーを作成します (Zend\View\Helper\AbstractHelper を拡張します)。ビュー ヘルパーには次の情報が必要です。

  • レンダリングするルート
  • レンダリングに許可されたパラメータ (つまり 1-10)

ビューでは、次のようにビュー ヘルパーを呼び出します。

$this->linkGenerator('a', array(1, 10)); //render all from /a/1 to /a/10

ビュー ヘルパーは次のようになります。

namespace Mynamespace\View\Helper;

use Zend\View\Helper\AbstractHelper;

class LinkGenerator extends AbstractHelper
{
    public function __invoke($routeName, array $range)
    {
        return $this->getView()->render('mynamespace/view/helper/linkgenerator.phtml', array(
            'route' => $routeName,
            'range' => $range
        ));
    }
}

最後に、次のlinkgenerator.phtmlようになります。

<ul>
    <?php foreach($this->range as $value) : ?>
    <li>
         <a href="<?php echo $this->url($this->route, array('id', $value));?>">
             ####RouteLabel!?
         </a>
    </li>
    <?php endforeach; ?>
</ul>

これで、ルート ラベルはよりトリッキーなものの 1 つになります。ID のラベルは (おそらく) 異なるため、viewhelper からナビゲーション構成またはデータベースのいずれかを呼び出し、それに応じてラベルを取得する必要があります。

tableGateway/Mapper/EntityRepository の注入は__construct()関数内で行われます。

次のようにビューヘルパーを登録するときに、割り当てたファクトリを介して必要なものを注入します。

    public function getViewHelperConfig()
    {
        return array(
            'factories' => array(
                'linkGenerator' => function ($sm) {
                    $someDependency= $sm->getServiceLocator()->get('some-dependency');

                    return new \Mynamespace\View\Helper\LinkGenerator($someDependency); //<- this is for __construct() ;)
                }
            )
        );
    }

これであなたの質問がカバーされることを願っています。他のすべてはJavaScriptに要約されると思います。

于 2012-12-18T07:21:17.577 に答える