Skip to content

Commit d3bb7df

Browse files
committed
Merge branch '2.8' into 3.0
* 2.8: Set the redraw frequency at least to 1. Setting it to 0 would otherwise produce an error. [Process] Unset callback after stop to free memory Improve error message for undefined DIC aliases [VarDumper] fixed .sf-dump z-index [Validator] Updated Luxembourgish translations for 2.8 Disallow http-kernel 3.x, fixes #16837. [DependencyInjection] Validate class names and factory methods ampq → amqp Fix typo Refactoring EntityUserProvider::__construct() to not do work, cause cache warm error [Form] Add context to FormFactory deprecations CS: remove unneeded parentheses around control statements [TwigBridge] Clean deps now that 2.8.0 is tagged
2 parents 792eb3a + 3e507c1 commit d3bb7df

File tree

3 files changed

+52
-24
lines changed

3 files changed

+52
-24
lines changed

Form/ChoiceList/ORMQueryBuilderLoader.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public function getEntities()
5555
*/
5656
public function getEntitiesByIds($identifier, array $values)
5757
{
58-
$qb = clone ($this->queryBuilder);
58+
$qb = clone $this->queryBuilder;
5959
$alias = current($qb->getRootAliases());
6060
$parameter = 'ORMQueryBuilderLoader_getEntitiesByIds_'.$identifier;
6161
$where = $qb->expr()->in($alias.'.'.$identifier, ':'.$parameter);

Security/User/EntityUserProvider.php

Lines changed: 50 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,17 @@
2727
*/
2828
class EntityUserProvider implements UserProviderInterface
2929
{
30+
private $registry;
31+
private $managerName;
32+
private $classOrAlias;
3033
private $class;
31-
private $repository;
3234
private $property;
33-
private $metadata;
3435

35-
public function __construct(ManagerRegistry $registry, $class, $property = null, $managerName = null)
36+
public function __construct(ManagerRegistry $registry, $classOrAlias, $property = null, $managerName = null)
3637
{
37-
$em = $registry->getManager($managerName);
38-
$this->class = $class;
39-
$this->metadata = $em->getClassMetadata($class);
40-
41-
if (false !== strpos($this->class, ':')) {
42-
$this->class = $this->metadata->getName();
43-
}
44-
45-
$this->repository = $em->getRepository($class);
38+
$this->registry = $registry;
39+
$this->managerName = $managerName;
40+
$this->classOrAlias = $classOrAlias;
4641
$this->property = $property;
4742
}
4843

@@ -51,14 +46,15 @@ public function __construct(ManagerRegistry $registry, $class, $property = null,
5146
*/
5247
public function loadUserByUsername($username)
5348
{
49+
$repository = $this->getRepository();
5450
if (null !== $this->property) {
55-
$user = $this->repository->findOneBy(array($this->property => $username));
51+
$user = $repository->findOneBy(array($this->property => $username));
5652
} else {
57-
if (!$this->repository instanceof UserLoaderInterface) {
58-
throw new \InvalidArgumentException(sprintf('The Doctrine repository "%s" must implement Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface.', get_class($this->repository)));
53+
if (!$repository instanceof UserLoaderInterface) {
54+
throw new \InvalidArgumentException(sprintf('The Doctrine repository "%s" must implement Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface.', get_class($repository)));
5955
}
6056

61-
$user = $this->repository->loadUserByUsername($username);
57+
$user = $repository->loadUserByUsername($username);
6258
}
6359

6460
if (null === $user) {
@@ -73,26 +69,28 @@ public function loadUserByUsername($username)
7369
*/
7470
public function refreshUser(UserInterface $user)
7571
{
76-
if (!$user instanceof $this->class) {
72+
$class = $this->getClass();
73+
if (!$user instanceof $class) {
7774
throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_class($user)));
7875
}
7976

80-
if ($this->repository instanceof UserProviderInterface) {
81-
$refreshedUser = $this->repository->refreshUser($user);
77+
$repository = $this->getRepository();
78+
if ($repository instanceof UserProviderInterface) {
79+
$refreshedUser = $repository->refreshUser($user);
8280
} else {
8381
// The user must be reloaded via the primary key as all other data
8482
// might have changed without proper persistence in the database.
8583
// That's the case when the user has been changed by a form with
8684
// validation errors.
87-
if (!$id = $this->metadata->getIdentifierValues($user)) {
85+
if (!$id = $this->getClassMetadata()->getIdentifierValues($user)) {
8886
throw new \InvalidArgumentException('You cannot refresh a user '.
8987
'from the EntityUserProvider that does not contain an identifier. '.
9088
'The user object has to be serialized with its own identifier '.
9189
'mapped by Doctrine.'
9290
);
9391
}
9492

95-
$refreshedUser = $this->repository->find($id);
93+
$refreshedUser = $repository->find($id);
9694
if (null === $refreshedUser) {
9795
throw new UsernameNotFoundException(sprintf('User with id %s not found', json_encode($id)));
9896
}
@@ -106,6 +104,36 @@ public function refreshUser(UserInterface $user)
106104
*/
107105
public function supportsClass($class)
108106
{
109-
return $class === $this->class || is_subclass_of($class, $this->class);
107+
return $class === $this->getClass() || is_subclass_of($class, $this->getClass());
108+
}
109+
110+
private function getObjectManager()
111+
{
112+
return $this->registry->getManager($this->managerName);
113+
}
114+
115+
private function getRepository()
116+
{
117+
return $this->getObjectManager()->getRepository($this->classOrAlias);
118+
}
119+
120+
private function getClass()
121+
{
122+
if (null === $this->class) {
123+
$class = $this->classOrAlias;
124+
125+
if (false !== strpos($class, ':')) {
126+
$class = $this->getClassMetadata()->getName();
127+
}
128+
129+
$this->class = $class;
130+
}
131+
132+
return $this->class;
133+
}
134+
135+
private function getClassMetadata()
136+
{
137+
return $this->getObjectManager()->getClassMetadata($this->classOrAlias);
110138
}
111139
}

Tests/Security/User/EntityUserProviderTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public function testLoadUserByUserNameShouldDeclineInvalidInterface()
125125
private function getManager($em, $name = null)
126126
{
127127
$manager = $this->getMock('Doctrine\Common\Persistence\ManagerRegistry');
128-
$manager->expects($this->once())
128+
$manager->expects($this->any())
129129
->method('getManager')
130130
->with($this->equalTo($name))
131131
->will($this->returnValue($em));

0 commit comments

Comments
 (0)