【问题标题】:FOSUserBundle (Symfony2). I have some questionsFOSUserBundle (Symfony2)。我有一些问题
【发布时间】:2014-04-24 09:10:21
【问题描述】:

1) 如何在表格和注册操作中添加新字段(在注册页面上显示新字段)?例如:我想添加新字段last_name、age。

2) 我为 REGISTRATION_COMPLETED 添加了新的监听器

/src/Acme/UserBundle/EventListener/RegistrationCompletedListener.php:

<?php
namespace Acme\UserBundle\EventListener;

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

/**
 * Listener
 */
class RegistrationCompletedListener implements EventSubscriberInterface
{
    private $router;

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

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

    public function onRegistrationCompletedSuccess(FormEvent $event)
    {
        $url = $this->router->generate('homepage');

        $event->setResponse(new RedirectResponse($url));
    }
}

/src/Acme/UserBundle/Resources/config/services.yml:

services:
    acme_user.registration_completed:
        class: Acme\UserBundle\EventListener\RegistrationCompletedListener
        arguments: [@router]
        tags:
            - { name: kernel.event_subscriber }

为什么不工作?

【问题讨论】:

  • FormEvent 没有方法setResponse
  • 公共函数 onRegistrationCompletedSuccess() { echo 1;出口; } 不要工作太... :(
  • 您应该创建两个问题。回答起来会容易得多。

标签: php symfony fosuserbundle


【解决方案1】:

1)您应该扩展 Base User 类并在那里添加您的新字段,如下所示:

namespace Your\CustomBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * User
 *
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{    
    /**
     * @var string
     *
     * @ORM\Column(name="first_name", type="string", length=255)
     */
    private $firstName;

    /**
     * @var string
     *
     * @ORM\Column(name="last_name", type="string", length=255)
     */
    private $lastName;

}

并更新appconfig/config.yml

#FOSLUserBundle Configuration
fos_user:
    user_class: Your\CustomBundle\Entity

然后您需要扩展和配置新的注册表单。这是link,您可以这样做。

[编辑]:

2)

像这样创建事件监听器:

namespace Your\Bundle\EventListener;

use FOS\UserBundle\Event\FilterUserResponseEvent;

class UserListener
{

    public function onRegistrationCompleted(FilterUserResponseEvent $event){

        $user = $event->getUser();
        //do sth....

    }
}

并为此注册服务:

services:
    some_name.security.registration_listener:
        class: Your\Bundle\EventListener\UserListener
        tags:
            - { name: kernel.event_listener, event: fos_user.registration.completed, method: onRegistrationCompleted }

【讨论】:

  • 桌子呢?我应该更改表格并添加新字段吗?
  • 是的,你应该运行php app/console doctrine:schema:update 命令来更新数据库
  • 我更新了我的帖子,回答了你的第二个问题。
  • 我明白了。谢谢你。你帮了我。
猜你喜欢
  • 2013-04-25
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多