[英]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.