использование помощника представления partialLoop в контроллере

в моем контроллере я использую модель json для «действия ajax». В действии у меня есть массив объектов данных, которые я хотел бы отобразить с помощью «помощника представления partialLoop».

Я использую код, указанный ниже

public function addLookuptableAction(){
    try{
        //CUT
        $repositoryModuloLookup = $this->em->getRepository('User\Entity\ModuloLookup');
        $moduloLookUpEnAllArr = $repositoryModuloLookup->findAll();
        $htmlModuleLookUp = $this->createHtmlModuleLookUp($moduloLookUpEnAllArr);
        $o['s'] = 'success';
        $o['i'] = "ok" . $out;
    }catch(\Exception  $e){
        $newExceptionCode = new GetExceptionCode($this);
        $o['s'] = 'error';
        $o['i'] = $newExceptionCode->GetCode($e);;
    }
    return new JsonModel($o);
}

private function createHtmlModuleLookUp($moduloLookUpEnAllArr){
    if(count($moduloLookUpEnAllArr) > 0){
        $partialLoop = $this->getPartialLoop();
        //$partialLoop->setView(new View() );
        $partialLoop('modulo.lookuptbl.tbl.phtml',$moduloLookUpEnAllArr)->setObjectKey('object');
    }
}

private function getPartialLoop(){
    return  new \Zend\View\Helper\PartialLoop();
}

но я получаю следующий код ошибки

Fatal error: Call to a member function render() on a non-object in D:\www\httpdocs\test\vendor\zendframework\zendframework\library\Zend\View\Helper\Partial.php on line 61

ошибка ясна

есть ли способ получить то, что я хочу, используя vie helper?


person ciro    schedule 31.07.2014    source источник


Ответы (1)


Вы можете получить его из serviceLocator контроллера. Сначала вам нужно получить viewHelperManager, как только вы его получите, вы сможете найти partialLoop:

    $vhm = $this->getServiceLocator()->get( 'viewhelpermanager' );
    $partialLoop = $vhm->get( 'partialloop' );

Вы можете получить любой из этих помощников представления через viewHelperManager:

    'doctype'             => 'Zend\View\Helper\Doctype', // overridden by a factory in ViewHelperManagerFactory
    'basepath'            => 'Zend\View\Helper\BasePath',
    'url'                 => 'Zend\View\Helper\Url',
    'cycle'               => 'Zend\View\Helper\Cycle',
    'declarevars'         => 'Zend\View\Helper\DeclareVars',
    'escapehtml'          => 'Zend\View\Helper\EscapeHtml',
    'escapehtmlattr'      => 'Zend\View\Helper\EscapeHtmlAttr',
    'escapejs'            => 'Zend\View\Helper\EscapeJs',
    'escapecss'           => 'Zend\View\Helper\EscapeCss',
    'escapeurl'           => 'Zend\View\Helper\EscapeUrl',
    'gravatar'            => 'Zend\View\Helper\Gravatar',
    'headlink'            => 'Zend\View\Helper\HeadLink',
    'headmeta'            => 'Zend\View\Helper\HeadMeta',
    'headscript'          => 'Zend\View\Helper\HeadScript',
    'headstyle'           => 'Zend\View\Helper\HeadStyle',
    'headtitle'           => 'Zend\View\Helper\HeadTitle',
    'htmlflash'           => 'Zend\View\Helper\HtmlFlash',
    'htmllist'            => 'Zend\View\Helper\HtmlList',
    'htmlobject'          => 'Zend\View\Helper\HtmlObject',
    'htmlpage'            => 'Zend\View\Helper\HtmlPage',
    'htmlquicktime'       => 'Zend\View\Helper\HtmlQuicktime',
    'inlinescript'        => 'Zend\View\Helper\InlineScript',
    'json'                => 'Zend\View\Helper\Json',
    'layout'              => 'Zend\View\Helper\Layout',
    'paginationcontrol'   => 'Zend\View\Helper\PaginationControl',
    'partialloop'         => 'Zend\View\Helper\PartialLoop',
    'partial'             => 'Zend\View\Helper\Partial',
    'placeholder'         => 'Zend\View\Helper\Placeholder',
    'renderchildmodel'    => 'Zend\View\Helper\RenderChildModel',
    'rendertoplaceholder' => 'Zend\View\Helper\RenderToPlaceholder',
    'serverurl'           => 'Zend\View\Helper\ServerUrl',
    'viewmodel'           => 'Zend\View\Helper\ViewModel',
person lluisaznar    schedule 31.07.2014
comment
Спасибо, это работает. я добавляю, что если вы поместите partialLoop в свойство контроллера как $this->partialLoop, то при его вызове вы получите ошибку. Я думаю, это происходит потому, что класс контроллера пытается инициализировать плагин контроллера с именем partialLoop. Извините, но я не могу проголосовать плюс один, потому что у меня недостаточно репутации при переполнении стека. Я отметил ваш ответ как правильный ответ - person ciro; 02.08.2014