我得到这个错误
"near 'role=ROLE_US': Error: 'role' is not defined"
我想添加一个新用户。我在sql查询中键入ROLE_USER,但仍然得到这个错误
对不起我的英语,谢谢你的帮助
defaultController.php
namespace InzRegisterBundleController;
use SensioBundleFrameworkExtraBundleConfigurationTemplate;
use InzRegisterBundleEntityUser;
use SensioBundleFrameworkExtraBundleConfigurationRoute;
use InzRegisterBundleEntityGroup;
use SymfonyBundleFrameworkBundleControllerController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentSecurityCoreSecurity;
use DoctrineCommonCollectionsArrayCollection;
class DefaultController extends Controller
{
/**
* @Route("/register", name="register")
* @Template()
*/
public function registerAction(Request $request)
{
$user = new User();
$group=new Group();
$form = $this->createFormBuilder($user)
->add('username', 'text')
->add('password', 'text')
->add('email', 'email')
->add('submit','submit')
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($user);
$user->setSalt(md5(time()));
$pass = $encoder->encodePassword($form->getData()->getPassword(), $user->getSalt());
$user->setPassword($pass);
$group = $em->getRepository('InzRegisterBundle:Group')->findOneByRole(array('role' =>'ROLE_USER'));
$user->addGroup($group);
$em->persist($group);
$em->persist($user);
$em->flush();
return $this->redirect($this->generateUrl('login'));
}
return $this->render('InzRegisterBundle:Default:register.html.twig', array(
'form' => $form->createView(),
));
}
}
user.php
<?php
// src/Acme/UserBundle/Entity/User.php
namespace InzRegisterBundleEntity;
use SymfonyComponentSecurityCoreUserUserInterface;
use SymfonyComponentSecurityCoreUserAdvancedUserInterface;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineORMMapping as ORM;
/**
* AcmeUserBundleEntityUser
*
* @ORMTable(name="User")
* @ORMEntity(repositoryClass="InzRegisterBundleEntity UserRepository")
*/
class User implements AdvancedUserInterface
{
/**
* @ORMColumn(name="id", type="integer")
* @ORMId()
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMColumn(name="username", type="string", length=25, unique=true)
*/
private $username;
/**
* @ORMColumn(name="salt", type="string", length=40)
*/
private $salt;
/**
* @ORMColumn(name="password", type="string", length=40)
*/
private $password;
/**
* @ORMColumn(name="email", type="string", length=60, unique=true)
*/
private $email;
/**
* @ORMColumn(name="isActive", type="boolean")
*/
private $isActive;
/**
* @ORMManyToMany(targetEntity="Group", inversedBy="users")
*
*/
private $groups;
public function __construct()
{
$this->isActive = true;
$this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
$this->groups = new ArrayCollection();
}
/**
* @inheritDoc
*/
public function getRoles()
{
$roles = array();
foreach ($this->groups as $role) {
$roles[] = $role->getRole();
}
return $roles;
}
public function eraseCredentials()
{
}
public function getUsername()
{
return $this->username;
}
public function getSalt()
{
return $this->salt;
}
public function getPassword()
{
return $this->password;
}
public function isAccountNonExpired()
{
return true;
}
public function isAccountNonLocked()
{
return true;
}
public function isCredentialsNonExpired()
{
return true;
}
public function isEnabled()
{
return $this->isActive;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set username
*
* @param string $username
* @return User
*/
public function setUsername($username)
{
$this->username = $username;
return $this;
}
/**
* Set salt
*
* @param string $salt
* @return User
*/
public function setSalt($salt)
{
$this->salt = $salt;
return $this;
}
/**
* Set password
*
* @param string $password
* @return User
*/
public function setPassword($password)
{
$this->password = $password;
return $this;
}
/**
* Set email
*
* @param string $email
* @return User
*/
public function setEmail($email)
{
$this->email = $email;
return $this;
}
/**
* Get email
*
* @return string
*/
public function getEmail()
{
return $this->email;
}
/**
* Set isActive
*
* @param boolean $isActive
* @return User
*/
public function setIsActive($isActive)
{
$this->isActive = $isActive;
return $this;
}
/**
* Get isActive
*
* @return boolean
*/
public function getIsActive()
{
return $this->isActive;
}
/**
* Add groups
*
* @param AcmeUserBundleEntityGroup $groups
* @return User
*/
public function addGroup(AcmeUserBundleEntityGroup $groups)
{
$groups->addUser($this);
$this->groups -> add($groups);
return $this->groups;
}
/**
* Remove groups
*
* @param AcmeUserBundleEntityGroup $groups
*/
public function removeGroup(AcmeUserBundleEntityGroup $groups)
{
$this->groups->removeElement($groups);
}
/**
* Get groups
*
* @return DoctrineCommonCollectionsCollection
*/
public function getGroups()
{
return $this->groups;
}
/**
* Set research
*
* @param AcmeUserBundleEntityResearch $research
* @return User
*/
}
group.php
<?php
namespace InzRegisterBundleEntity;
use SymfonyComponentSecurityCoreRoleRoleInterface;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineORMMapping as ORM;
/**
* @ORMTable(name="groups")
* @ORMEntity(repositoryClass="InzRegisterBundleEntityGroupRepository")
*/
class Group implements RoleInterface, Serializable
{
/**
* @ORMColumn(name="id", type="integer")
* @ORMId()
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/** @ORMColumn(name="name", type="string", length=30) */
private $name;
/** @ORMColumn(name="role", type="string", length=20, unique=true) */
private $role;
/** @ORMManyToMany(targetEntity="User", mappedBy="groups",cascade={"persist"}) */
private $users;
public function __construct()
{
$this->users = new ArrayCollection();
}
// ... getters and setters for each property
/** @see RoleInterface */
public function getRole()
{
return $this->role;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @see Serializable::serialize()
*/
public function serialize()
{
/*
* ! Don't serialize $users field !
*/
return json_encode(array(
$this->id,
$this->role
));
}
/**
* @see Serializable::unserialize()
*/
public function unserialize($serialized)
{
list(
$this->id,
$this->role
) = json_decode($serialized);
}
/**
* Set name
*
* @param string $name
* @return Group
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set role
*
* @param string $role
* @return Group
*/
public function setRole($role)
{
$this->role = $role;
return $this;
}
/**
* Add users
*
* @param AcmeUserBundleEntityUser $users
* @return Group
*/
public function addUser(AcmeUserBundleEntityUser $users)
{
$this->users[] = $users;
return $this;
}
/**
* Remove users
*
* @param AcmeUserBundleEntityUser $users
*/
public function removeUser(AcmeUserBundleEntityUser $users)
{
$this->users->removeElement($users);
}
/**
* Get users
*
* @return DoctrineCommonCollectionsCollection
*/
public function getUsers()
{
return $this->users;
}
}
groupRepository.php
<?php
// src/Acme/UserBundle/Entity/UserRepository.php
namespace InzRegisterBundleEntity;
use SymfonyComponentSecurityCoreUserUserInterface;
use SymfonyComponentSecurityCoreUserUserProviderInterface;
use SymfonyComponentSecurityCoreExceptionUsernameNotFoundException;
use SymfonyComponentSecurityCoreExceptionUnsupportedUserException;
use DoctrineORMEntityRepository;
use DoctrineORMNoResultException;
class GroupRepository extends EntityRepository
{
public function findOneByRole($role)
{
return $this->getEntityManager()
->createQuery(
'SELECT p FROM InzRegisterBundle:Group p WHERE role=ROLE_USER'
)
->getResult();
}
}
userRepository.php
<?php
// src/Acme/UserBundle/Entity/UserRepository.php
namespace InzRegisterBundleEntity;
use SymfonyComponentSecurityCoreUserUserInterface;
use SymfonyComponentSecurityCoreUserUserProviderInterface;
use SymfonyComponentSecurityCoreExceptionUsernameNotFoundException;
use SymfonyComponentSecurityCoreExceptionUnsupportedUserException;
use DoctrineORMEntityRepository;
use DoctrineORMNoResultException;
class UserRepository extends EntityRepository implements UserProviderInterface
{
public function loadUserByUsername($username)
{
$q = $this
->createQueryBuilder('u')
->select('u, g')
->leftJoin('u.groups', 'g')
->where('u.username = :username OR u.email = :email')
->setParameter('username', $username)
->setParameter('email', $username)
->getQuery()
;
try {
// The Query::getSingleResult() method throws an exception
// if there is no record matching the criteria.
$user = $q->getSingleResult();
} catch (NoResultException $e) {
throw new UsernameNotFoundException(sprintf('Unable to find an active admin AcmeUserBundle:User object identified by "%s".', $username), null, 0, $e);
}
return $user;
}
public function refreshUser(UserInterface $user)
{
$class = get_class($user);
if (!$this->supportsClass($class)) {
throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', $class));
}
return $this->loadUserByUsername($user->getUsername());
}
public function supportsClass($class)
{
return $this->getEntityName() === $class || is_subclass_of($class, $this->getEntityName());
}
}
你能试试吗:
"SELECT p FROM InzRegisterBundle:Group p WHERE p.role='ROLE_USER'"
带参数的更新:
->createQuery(
"SELECT p FROM InzRegisterBundle:Group p WHERE p.role=:role"
)
->setParameter('role', 'ROLE_USER')