2016-05-29 2 views
0

После регистрации успеха я бы оказывать index.html.twigоказывать index.html.twig после регистрации успеха FOSUserbundle

Таким образом, в классе RegistrationController в функции registerAction я был по умолчанию:

return $this->render('FOSUserBundle:Registration:register.html.twig', array(
     'form' => $form->createView(), 
    )); 

Так я изменить что:

return $this->render('AcmeCovoiturageBundle:Index:index.html.twig'), array(
     'form' => $form->createView(), 
    )); 

, но это вызвало ошибку, потому что я имел информацию в index.html.twig из базы данных.

так я повторно изменяет, что:

return $this->render(controller("AcmeCovoiturageBundle:Index:index"), array(
     'form' => $form->createView(), 
    )); 

но я имел эту ошибку: Попытка вызова функции «контроллер» из пространства имен «FOS \ UserBundle \ Controller»

Пожалуйста, рассмотреть его и сообщить мне, как могу ли я решить эту ошибку

ответ

0

Это зависит от того, где находится ваш файл "index.htl.twig", на который вы ссылаетесь. Я подозреваю, что в "по умолчанию/index.html.twig" так попробуйте следующее:

return $this->render('default/index.html.twig'), array(
     'form' => $form->createView(), 
    )); 

Фактический путь: приложение/ресурсы/виды/по умолчанию/index.html.twig

+0

Невозможно найти шаблон «index/index.html.twig. Я пытаюсь использовать приложение/Ressources/views/default/index.html.wing, и я получил Невозможно найти шаблон« default/index.html.twig – Hamdy

+0

Фактически сейчас что я думаю об этом, возможно, попробуйте 'render ('index.html.twig')' вместо этого. Дайте мне знать, и я изменю свой пост. Другое дело, что вам нужен шаблон ветви в этой папке. Например, если каталог «app/Resources/views/default» не существует, вам необходимо его создать. –

+0

Я нашел решение, и я пишу ответ здесь. – Hamdy

0

Финлей, я нашел решение. Во-первых, я пытаюсь отобразить на другой странице из регистрационного контроля. и это не тотально, если я не показываю данные на этой странице. один из участников ответа FOSUserBundle по вопросу об этом рендеринге, и он сказал, и я цитирую: «Логин не обрабатывается FOSUserBundle вообще, а компонентом безопасности Symfony. Этот пакет предназначен только для предоставления управления пользователями» So Я ищу другую логику. Я создаю слушателя. и я назвал его в config.yml (имя_проект/SourcesFiles/приложение/Config/config.yml)

services: 
    fos_user.doctrine_registry: 
     alias: doctrine 
    sdz_user.registration_complet: 
     class: Acme\CovoiturageBundle\Services\RegistrationConfirmListener 
     arguments: [@router] 
     tags: 
      - { name: kernel.event_subscriber } 

так что слушатель будет слушать абонент события из ядра фреймворки. После этого добавьте папку в пачке и добавить PHP класс с именем RegistrationConfirmListener:

class RegistrationConfirmListener implements EventSubscriberInterface { 

private $router; 

public function __construct(UrlGeneratorInterface $router) { 
    $this->router = $router; 
} 

/** 
* {@inheritDoc} 
*/ 
public static function getSubscribedEvents() { 
    return array(
     FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess' 
    ); 
} 

public function onRegistrationSuccess(\FOS\UserBundle\Event\FormEvent $event) { 
    $url = $this->router->generate('index'); 
    $event->setResponse(new RedirectResponse($url)); 
} 

}

вам понадобится использование от FOSUserBundle:

use FOS\UserBundle\FOSUserEvents 
use FOS\UserBundle\Event\UserEvent 
use Symfony\Component\EventDispatcher\EventSubscriberInterface 
use Symfony\Component\HttpFoundation\RedirectResponse 
use Symfony\Component\Routing\Generator\UrlGeneratorInterface 

быть осторожным, если вы не помещайте пространство имен сверху, symfony не распознает ваш класс.

namespace Acme\CovoiturageBundle\Services 

Вы видите «РЕГИСТРАЦИЯ_УСТАВКА»?я беру это из registrationController от функции registraionAction:

$dispatcher->dispatch(FOSUserEvents::**REGISTRATION_COMPLETED**, new FilterUserResponseEvent($user, $request, $response)); 

так, теперь пытаются протестировать слушателя, если он работает или нет, выполните следующую команду:

php app/console container:debug | app_user.registration_complet 

и вы получите это сообщение на пульте:

[container] Information for service sdz_user.registration_complet Service Id sdz_user.registration_complet Class Acme\CovoiturageBundle\Services\RegistrationConfirmListener Tags - kernel.event_subscriber () Scope container Public yes Synthetic no Lazy no Synchronized no Abstract no Done.

Я не принимаю решение для входа. это решение для регистрации. Я думаю, это будет та же логика.

Смежные вопросы