1

私は持っていて、ViewHelperそれを初期化したいModule#getViewHelperConfig()

<?php
namespace Search;

use statements...

class Module implements
    ConfigProviderInterface,
    ServiceProviderInterface,
    AutoloaderProviderInterface,
    ViewHelperProviderInterface {

    public function getConfig() ...

    public function getAutoloaderConfig() ...

    public function getServiceConfig() {
        $breakpoint = null;
        try {
            return array (
                'factories' => array(
                    ...
                    'SearchFormCourseSearchForm' => function ($serviceManager) {
                        $cacheService = $serviceManager->get('Cache\Model\CityStorage');
                        $cities = $cacheService->getCities();
                        $searchForm = new Form\CourseSearchForm($cities);
                        return $searchForm;
                    },
                )
            );
        } ...
    }

    public function getViewHelperConfig() {
        $breakpoint = null;
        return array(
            'factories' => array(
                'searhForm' => function($serviceManager) {
                    $helper = new View\Helper\SearchForm(array('render' => true, 'redirect' => false));
                    $helper->setViewTemplate('search/search/search-courses');
                    $searchForm = $serviceManager->get('SearchFormCourseSearchForm');
                    $helper->setSearchForm($searchForm);
                    return $helper;
                }
            )
        );
    }

しかし、ZF は私の工場に電話をかけません。SearchFormCourseSearchFormこれの代わりに、新しいインスタンスを作成しようとします:

致命的なエラー: /var/www/bar/foo/vendor/zendframework/ で、「Zend\ServiceManager\ServiceManager::get は SearchFormCourseSearchForm のインスタンスを取得または作成できませんでした」というメッセージを含む例外「Zend\ServiceManager\Exception\ServiceNotFoundException」をキャッチできませんでした456 行目の zendframework/library/Zend/ServiceManager/ServiceManager.php

inをModule#getServiceConfig()作成して取得したサービス ファクトリはどのように使用すればよいですか?ViewHelperModule#getViewHelperConfig()

4

1 に答える 1

2

メイン サービス ロケーターを取得する必要があります。$serviceManagerinは、getViewHelperConfig()View Helper サービス ロケーターです。

getViewHelperConfig()関数でメイン サービス ロケーターを取得するには、次の手順を実行します。

$maimSm = $serviceManager->getServiceLocator();

したがって:

public function getViewHelperConfig() {
    return array(
        'factories' => array(
            'searhForm' => function($serviceManager) {
                $helper = new View\Helper\SearchForm(array('render' => true, 'redirect' => false));
                $helper->setViewTemplate('search/search/search-courses');
                $maimSm = $serviceManager->getServiceLocator();
                $searchForm = $maimSm->get('SearchFormCourseSearchForm');
                $helper->setSearchForm($searchForm);
                return $helper;
            }
        )
    );
}

この戦略をもう少し詳しく説明している投稿がかなりあります。私はそれらを探しに行きます。

編集

ZF2 でのサービス マネージャー/ロケーターの適切な説明については、アプリケーションでの Zend Framework サービス マネージャーの使用を参照してください。

于 2013-04-10T13:15:25.657 に答える