Прошло довольно много времени с тех пор, как я задал этот вопрос, и, как видно из комментариев, или, если вы просто прочитали код, дизайн был ужасно ошибочным. Я только начинал с Symfony2 и архитектуры MVC в целом, поэтому гораздо позже я понял, почему никогда не получу ответ на этот вопрос: P
С тех пор я перешел ко многим различным фреймворкам и полностью отказался от запутанных способов Symfony, чтобы охватить узел, магистраль, angularjs и еще много чего, и жизнь стала намного проще.
В любом случае, поскольку этот вопрос, похоже, все еще собирает некоторые взгляды и шальные отзывы от (я предполагаю), начатых в Symfony, вот фиксированный код и некоторые рассуждения (я извлек это из своего репозитория GIT, и это был еще давным-давно, т. е. этап удаления зубов, так что я не очень уверен, что это хороший способ, но неважно)
В вашем контроллере
public function indexAction() {
$session = $this->getRequest()->getSession();
if($session->get('loggedin') != null ) {
return $this->redirect($this->generateUrl('home'),301);
} else {
$loginData = array();
$loginForm = $this->createFormBuilder($loginData)
->add('email', 'email')
->add('password', 'password')
->getform();
return $this->render('AppBundle:Core:index.html.twig',
array('loginForm' => $loginForm->createView()) );
}
}
По вашему мнению
{% extends '::basetemplate.html.twig' %}
{% block title %}PAGE TITLE{% endblock %}
{% block header %}
{% if app.session.get('loggedin') is null %}
<div class="linear_form_holder">
{% include "AppBundle:Core:login.html.twig" with {'form':loginForm} %}
</div>
{% endif %}
{% endblock %}
Что нужно забрать:
- Не делайте рекурсивных вызовов, таких как
loginAction
, перенаправляющих на main-page
, который снова вызывает loginAction
, как в моем вопросе: не только код в моем вопросе некорректен, но чрезмерная рекурсия в любом случае убьет сервер, так что вы можете не понять, что не так. Постарайтесь сделать это проще.
Абстрагируйтесь от имени пользователя, регистрации и других форм и не используйте шаблоны для них. Свяжите их с моделью и используйте formBuilder для генерации форм.
Дополнительный совет: если вы можете, переключитесь на более новые технологии, такие как nodejs или, возможно, Go (я еще не пробовал). Изначально инвестиции в обучение очень велики, но со временем вы получите выгоду. Не стесняйтесь игнорировать этот дополнительный совет.
Веселись
:)