3

Zf2 は初めてですが、最近 zf1 からアップグレードしたので、この問題に関するヘルプとアドバイスが必要です。ここに事実があります:私はいくつかのコントローラー(ページ)で医療プロジェクト(zf1バージョンへのアップグレード)に取り組んでいます。サイドバーパネルに患者の情報と現在の訪問が必要です...私は知っていますzf2 は初めてですが、すべてのアクションでgetvisiteService()patientService()が情報を取得し、これらの結果を何度も表示するために渡すなど、冗長なことはしたくありません。プラグインについて考えましたが、コントローラーからビューに渡して、パーシャルとプレースホルダー ヘルパーでビューを過給する必要があります (grr!!!)戦略イベントリスナーについて考えますしかし、これらがどのように機能するのかわかりません。結果をパーシャルに挿入する必要があります。それで、それを達成するための簡単な方法や複雑な方法はありますか? 事前にヒントとコードをいただければ幸いです。私の貧弱な英語で申し訳ありませんが、私はフランス語を話します(そのような典型的な言い訳:))

4

1 に答える 1

3

ここで使用できるアプローチはたくさんありますが、元の質問に固執すると、次のようなものをレイアウト モデルに挿入するのは非常に簡単です。

Module.php

/**
 * On bootstrap event
 * 
 * @param \Zend\Mvc\MvcEvent $e
 */
public function onBootstrap(MvcEvent $e)
{
    // Inject something, like a nav into your Layout view model
    $viewModel = $e->getViewModel(); // Layout View Model
    $navigation= new ViewModel(array(
        'username'  => 'Bob' // Dynamically set some variables..
    ));
    $navigation->setTemplate('navigation/mynav');
    $viewModel->addChild($navigation, 'navigation');
}

必要に応じて、カスタム ビュー ヘルパーを作成して作業を行うこともできます。

<?php
/**
 * MyHelper.php
 */
namespace Application\View\Helper;

use Zend\View\Helper\AbstractHelper;
use Zend\ServiceManager\ServiceManagerAwareInterface;
use Zend\ServiceManager\ServiceManager;

class MyHelper extends AbstractHelper implements ServiceManagerAwareInterface
{
    /**
     * Invoke
     * 
     * @return  string
     */
    public function __invoke()
    {
        // Dynamically build your nav or what ever.

        $patientService = $this->getServiceManager()->get('PatientService');

        return 'soemthing';
    }

    /**
     * @var ServiceManager
     */
    protected $serviceManager;

    /**
     * Retrieve service manager instance
     *
     * @return ServiceManager
     */
    public function getServiceManager() 
    {
        return $this->serviceManager;
    }

    /**
     * Set service manager instance
     *
     * @param ServiceManager $locator
     * @return User
     */
    public function setServiceManager(ServiceManager $serviceManager) 
    {
        $this->serviceManager = $serviceManager;
        return $this;
    }
}
于 2013-03-20T11:06:46.983 に答える