Symfony2 在成功注册 FosUserBundle 后重定向用户
Symfony2 Redirect user after succesfull register with FosUserBundle
我试了很多方法解决这个问题,还是不行。我想要的是,在用户成功注册后,他将重定向到想要的页面。
所以,我有一个 UserBundle:
在UserBundle/EventListener
namespace MDB\UserBundle\EventListener;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use FOS\UserBundle\FOSUserEvents;
use Symfony\Component\HttpFoundation\RedirectResponse;
class RegistrationConfirmListener implements EventSubscriberInterface {
private $router;
public function __construct(UrlGeneratorInterface $router) {
$this->router = $router;
}
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents() {
return array(
FOSUserEvents::REGISTRATION_CONFIRM => 'onRegistrationConfirm'
);
}
public function onRegistrationConfirm(GetResponseUserEvent $event) {
$url = $this->router->generate('mdb_platform_homepage');
$event->setResponse(new RedirectResponse($url));
}
}
?>
在 services.yml(用户 bunde)
服务:
mdb_user.registration.form.type:
class: MDB\UserBundle\Form\Type\RegistrationFormType
tags:
- { name: form.type, alias: mdb_user_registration }
mdb.user.validator.contains_user:
class: MDB\UserBundle\Validator\Constraints\ContainsUserValidator
arguments: [ "@doctrine.orm.entity_manager" ]
tags:
- { name: validator.constraint_validator, alias: contains_user }
mdb_user.registration_complet:
class: MDB\UserBundle\EventListener\RegistrationConfirmListener
arguments: ["@router"]
tags:
- { name: kernel.event_subscriber }
我已经尝试了很多其他配置并检查了其他论坛,但似乎重定向不起作用。
有人有想法吗?
提前致谢
有一些方法可以做到这一点:
更改默认页面
# app/config/security.yml
security:
firewalls:
main:
form_login:
# ...
always_use_default_target_path: true
use_referer: true
default_target_path: default_security_target
从表单内部控制重定向 URL
{# src/Acme/SecurityBundle/Resources/views/Security/login.html.twig #}
{% if error %}
<div>{{ error.message }}</div>
{% endif %}
<form action="{{ path('login_check') }}" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" />
<label for="password">Password:</label>
<input type="password" id="password" name="_password" />
<input type="hidden" name="_target_path" value="account" />
<input type="submit" name="login" />
</form>
并在您的安全范围内:
# app/config/security.yml
security:
firewalls:
main:
form_login:
target_path_parameter: redirect_url
阅读更多信息:http://symfony.com/doc/current/cookbook/security/form_login.html
我这样解决了问题:
在 app/config/routing 中:
添加这个
fos_user_registration_confirmed:
pattern: /registration/confirmed
defaults: { _controller: MDBUserBundle:User:confirmed }
requirements:
_method: GET
然后在目标控制器中做你想做的事:
public function confirmedAction()
{
return $this->render('MDBPlatformBundle:Default:index.html.twig'
);
}
好人link谁能帮助解决类似情况:How to customize FOS UserBundle URLs
希望这会有所帮助
如果您只想重定向,可以进一步简化 LeZelkins 接受的答案。使用 FrameworkBundle 重定向控制器:
# routing.yml
fos_user_registration_confirmed:
path: /registration/confirmed
defaults:
_controller: FrameworkBundle:Redirect:urlRedirect
path: /admin/dashboard
我试了很多方法解决这个问题,还是不行。我想要的是,在用户成功注册后,他将重定向到想要的页面。
所以,我有一个 UserBundle:
在UserBundle/EventListener
namespace MDB\UserBundle\EventListener; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use FOS\UserBundle\FOSUserEvents; use Symfony\Component\HttpFoundation\RedirectResponse; class RegistrationConfirmListener implements EventSubscriberInterface { private $router; public function __construct(UrlGeneratorInterface $router) { $this->router = $router; } /** * {@inheritDoc} */ public static function getSubscribedEvents() { return array( FOSUserEvents::REGISTRATION_CONFIRM => 'onRegistrationConfirm' ); } public function onRegistrationConfirm(GetResponseUserEvent $event) { $url = $this->router->generate('mdb_platform_homepage'); $event->setResponse(new RedirectResponse($url)); } } ?>
在 services.yml(用户 bunde)
服务:
mdb_user.registration.form.type: class: MDB\UserBundle\Form\Type\RegistrationFormType tags: - { name: form.type, alias: mdb_user_registration } mdb.user.validator.contains_user: class: MDB\UserBundle\Validator\Constraints\ContainsUserValidator arguments: [ "@doctrine.orm.entity_manager" ] tags: - { name: validator.constraint_validator, alias: contains_user } mdb_user.registration_complet: class: MDB\UserBundle\EventListener\RegistrationConfirmListener arguments: ["@router"] tags: - { name: kernel.event_subscriber }
我已经尝试了很多其他配置并检查了其他论坛,但似乎重定向不起作用。
有人有想法吗? 提前致谢
有一些方法可以做到这一点:
更改默认页面
# app/config/security.yml
security:
firewalls:
main:
form_login:
# ...
always_use_default_target_path: true
use_referer: true
default_target_path: default_security_target
从表单内部控制重定向 URL
{# src/Acme/SecurityBundle/Resources/views/Security/login.html.twig #}
{% if error %}
<div>{{ error.message }}</div>
{% endif %}
<form action="{{ path('login_check') }}" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" />
<label for="password">Password:</label>
<input type="password" id="password" name="_password" />
<input type="hidden" name="_target_path" value="account" />
<input type="submit" name="login" />
</form>
并在您的安全范围内:
# app/config/security.yml
security:
firewalls:
main:
form_login:
target_path_parameter: redirect_url
阅读更多信息:http://symfony.com/doc/current/cookbook/security/form_login.html
我这样解决了问题:
在 app/config/routing 中:
添加这个
fos_user_registration_confirmed:
pattern: /registration/confirmed
defaults: { _controller: MDBUserBundle:User:confirmed }
requirements:
_method: GET
然后在目标控制器中做你想做的事:
public function confirmedAction()
{
return $this->render('MDBPlatformBundle:Default:index.html.twig'
);
}
好人link谁能帮助解决类似情况:How to customize FOS UserBundle URLs
希望这会有所帮助
如果您只想重定向,可以进一步简化 LeZelkins 接受的答案。使用 FrameworkBundle 重定向控制器:
# routing.yml
fos_user_registration_confirmed:
path: /registration/confirmed
defaults:
_controller: FrameworkBundle:Redirect:urlRedirect
path: /admin/dashboard