Symfony: Можно ли установить шаблон для компонентов?

Для компонентов нет setTemplate()! Я знаю, но, может быть, есть другой способ сделать это?

(Кажется, вопрос касается фреймворка php: http://www.symfony-project.org/)


person Andrey    schedule 23.10.2009    source источник


Ответы (4)


В sfComponents нет метода setTemplate. По сути, у вас есть 3 варианта:

  1. Назовите свой компонент так же, как партиал, который вы хотите, чтобы компонент отображал. Это может быть невозможно, если у вас есть несколько компонентов, которые вы хотите использовать в одном и том же шаблоне.
  2. Создайте партиал с тем же именем, что и у вашего компонента, и включите его туда. То есть, если у вас есть компонент с методом executeFoo(), который вы хотите отобразить в шаблоне _bar.php, просто вызовите include_partial('bar', $vars) внутри _foo.php.
  3. Загрузите PartialHelper и визуализируйте партиал вручную внутри метода выполнения компонентов, и пусть компонент вернет sfView::NONE.
person Jeremy Kauffman    schedule 24.10.2009
comment
Но будьте осторожны, возвращая sfView::NONE для компонента, он не будет кешировать компонент, по крайней мере, в 1.0 - определенно стоит проверить, что файл кеша все еще генерируется. - person timmow; 03.11.2009
comment
Вы уверены, что компонент все равно не будет кэшироваться, даже если внутри него будет отображаться текст? Если это так, то да, не используйте метод 3, если вам нужен компонент с возможностью кэширования (сам я никогда не использовал метод 3). - person Jeremy Kauffman; 03.11.2009
comment
В Symfony 1.4 вы должны использовать include_partial('bar', $vars) вместо include_partial('bar', $args). - person chiborg; 24.06.2011

Чтобы обойти это, я делаю:

echo get_component('module', 'action', $this->getVarHolder()->getAll());
return sfView::NONE;
person jmoz    schedule 24.06.2010
comment
Это сэкономило мне кучу пустых файлов шаблонов. - person Lg102; 17.03.2014
comment
Я боролся с return get_partial('module/partial');, но это не обошло бы обычный шаблон для компонента. Теперь, благодаря этому ответу, у меня это работает так: echo get_partial('module/partial'); return sfView::NONE; - person Aitor; 12.01.2021

Компоненты не обрабатывают шаблоны, вы можете использовать только частичные. Если вам нужно вернуть определенный частичный код из вашего класса компонентов, вы можете сделать что-то вроде этого:

return get_partial('module/action', array('paramName' => $paramValue));

Загляните в книгу по Symfony, глава 7 слой

person virtualize    schedule 24.10.2009

Это сработало для меня:

$this->setVar('template', 'templateName');

Очевидно, что шаблон должен находиться в одном и том же модуле.

person NeverEndingQueue    schedule 16.12.2014