Как использовать партиал в zendframework2

В ZF1 мы используем частичное в файле layout.phtml что-то вроде этого

$this->partial('header.phtml', array('vr' => 'zf2'));

Как мы можем сделать то же самое в ZF2?


person Developer    schedule 29.08.2012    source источник


Ответы (2)


это может быть достигнуто путем

 echo $this->partial('layout/header', array('vr' => 'zf2'));

вы можете получить доступ к переменной в представлении, используя

echo $this->vr;

не забудьте добавить следующую строку в ваш view_manager файла module.config.php.

'layout/header'           => __DIR__ . '/../view/layout/header.phtml',  

после добавления это выглядит так

return array(  

'view_manager' => array(
        'template_path_stack' => array(
            'user' => __DIR__ . '/../view' ,
        ),
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => array(
            'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',

            'layout/header'           => __DIR__ . '/../view/layout/header.phtml',            

            'error/404'               => __DIR__ . '/../view/error/404.phtml',
            'error/index'             => __DIR__ . '/../view/error/index.phtml',
        ),


    ),    

);
person Developer    schedule 29.08.2012
comment
Чтобы передать все переменные представления в партиал: echo $this->partial('layout/header',$this->viewModel()->getCurrent()->getVariables()); - person davmor; 06.01.2016
comment
Обратите внимание, что $this->viewModel()->getCurrent()->getVariables() возвращает ArrayObject. - person davmor; 06.01.2016
comment
Для слияния дополнительных данных работает array_merge: echo $this-›partial('mypartial', array_merge($this-›viewModel()->getCurrent()->getVariables(), [moredata])); - person Killan; 01.09.2016

Как уже говорилось в принятом ответе, вы можете использовать

echo $this->partial('layout/header', array('vr' => 'zf2'));

но тогда вам нужно определить layout/header в вашем модуле.config.php.


Если вы не хотите загромождать свой template_map, вы можете использовать относительный путь, основанный на template_path_stack, чтобы напрямую указать на ваш партиал.

Предположим, вы определили:

'view_manager' => array(
        /* [...] */
        'template_path_stack' => array(
            'user' => __DIR__ . '/../view' ,
        ),
        'template_map' => array(
            'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',

            'error/404'               => __DIR__ . '/../view/error/404.phtml',
            'error/index'             => __DIR__ . '/../view/error/index.phtml',
        ),
    ),    
);

в вашем module.config.php, а ваш listsnippet.phtml находится в .../view/mycontroller/snippets/listsnippet.phtml, тогда вы можете использовать следующий код:

echo $this->partial('mycontroller/snippets/listsnippet.phtml', array('key' => 'value'));
person John McFo    schedule 09.04.2013