繁体   English   中英

Symfony2-FOSUserBundle注册后设置用户实体字段

[英]Symfony2 - FOSUserBundle set user entity field after registration

我有一个具有firstname,lastname和url属性的用户实体,扩展了FOSUserBundle User。 我想将fistname和lastname的值存储为一个strig。

有人建议我应该使用侦听器和服务,所以我做了:

该事件似乎在注册后有效,但我找不到更改用户网址的方法...

servises.yml

services:
   kernel.listener.RegistrationListener:
      class: Apana\Bundle\MainBundle\EventListener\RegistrationListener
      tags:
          - { name: kernel.event_listener, event: fos_user.registration.completed, method: onUserRegistration }

并在RegistrationListener.php中:

    <?php

namespace Apana\Bundle\MainBundle\EventListener;

use Apana\Bundle\MainBundle\Entity\User;
use Symfony\Component\Security\Core\SecurityContext;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\UserEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;

class RegistrationListener
{

    public function onUserRegistration()
    {
        $user = new User();

        $ap= = $user->getFirstname();
        echo($ap);exit();

    }

}

为什么不为此使用UserManager而不是侦听器? 我将用自己的名称覆盖FOSUser注册并执行以下操作:

$userManager = $this->container->get('fos_user.user_manager');
$user = $userManager->createUser();

$user->setUrl("any data");

至少对我来说,这更容易,更简单

如果我理解正确,那么您想做的就是输入firstname和lastname字段。
用作首尾的姓氏和名字也必须经过清理,以替换带重音符号的字符,空格等。

要自动完成所有操作,您可以使用Doctrine Extension,特别是Sluggable: https : //github.com/Atlantic18/DoctrineExtensions/blob/master/doc/sluggable.md

这是一个使用注释满足您需要的示例:

<?php
// src/Acme/UserBundle/Entity/User.php

namespace Acme\UserBundle\Entity;

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

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(length=64, unique=false)
     */
    private firstname;

    /**
     * @ORM\Column(length=64, unique=false)
     */
    private lastname;

    /**
     * @Gedmo\Slug(fields={"firstname", "lastname"}, separator="-")
     * @ORM\Column(length=128, unique=true)
     */
    private $slug;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }

    //... setter and getter...
}

好的,我已经通过事件监听器和FOSUserBundle UserEvent解决了我的问题

 <?php

namespace Apana\Bundle\MainBundle\EventListener;

use FOS\UserBundle\Event\UserEvent;

class RegistrationListener
{

    public function onUserRegistration(UserEvent $event)
    {
        $user = $event->getUser();
        $url =  strtolower($user->getFirstname().".".$user->getLastname());
        $user->setUrl($url);
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM