Решено – см. конец записи
Я пытаюсь ознакомиться с SonataUserBundle, расширяющим FOSUserBundle.
Установка работала нормально (насколько я могу судить), и теперь я хочу настроить формы входа и регистрации. Я перезаписал шаблоны в app/Resources, и все заработало. Однако для регистрационной формы я не понимаю, почему она работает...
Вот моя проблема:
Контроллер регистрации SonataUserBundle (RegistrationFOSUser1) настраивает форму и отображает ее с FOSUserBundle:Registration:register.html.twig в качестве шаблона:
$form = $this->container->get('sonata.user.registration.form');
$formHandler = $this->container->get('sonata.user.registration.form.handler');
[...]
return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.'.$this->getEngine(), array(
'form' => $form->createView(),
));
register.html.twig включает FOSUserBundle:Registration:register_content.html.twig:
{% block fos_user_content %}
{% include "FOSUserBundle:Registration:register_content.html.twig" %}
{% endblock fos_user_content %}
register_content.html.twig содержит код ветки для отображения формы.
Однако на самом деле отображается SonataUserBundle:Registration:register_content.html.twig.
Никак не могу понять, где, когда и как SonataUserBundle подменяет здесь FOSUserBundle...
Спасибо за любые подсказки!
Хорошо, теперь я вижу, что решение моего вопроса хорошо задокументировано в поваренной книге Symfony: http://symfony.com/doc/current/cookbook/bundles/inheritance.html
Для таких же новичков в symfony, как я:
Если вы определяете родительский 'ParentBundle' для другого пакета 'ChildBundle', то каждый раз, когда вызывается функция, шаблон и т. д. из ParentBundle, symfony сначала будет искать файл с таким же именем в ChildBundle.
Родительский пакет определен в ChildBundle.php:
public function getParent()
{
return 'ParentBundle';
}
Это работает, пока файл родительского пакета вызывается с помощью обычной нотации ParentBundle:path:file.