Merge branch '4.4' into 5.1
* 4.4: [Security] Replace message data in JSON security error response [DI] Skip deprecated definitions in CheckTypeDeclarationsPass [DoctrineBridge] Take into account that indexBy="person_id" could be a db column name, for a referenced entity
This commit is contained in:
commit
f2c5f25a98
@ -110,7 +110,12 @@ class DoctrineExtractor implements PropertyListExtractorInterface, PropertyTypeE
|
||||
/** @var ClassMetadataInfo $subMetadata */
|
||||
$indexProperty = $subMetadata->getSingleAssociationReferencedJoinColumnName($fieldName);
|
||||
$subMetadata = $this->entityManager ? $this->entityManager->getClassMetadata($associationMapping['targetEntity']) : $this->classMetadataFactory->getMetadataFor($associationMapping['targetEntity']);
|
||||
$typeOfField = $subMetadata->getTypeOfField($indexProperty);
|
||||
|
||||
//Not a property, maybe a column name?
|
||||
if (null === ($typeOfField = $subMetadata->getTypeOfField($indexProperty))) {
|
||||
$fieldName = $subMetadata->getFieldForColumn($indexProperty);
|
||||
$typeOfField = $subMetadata->getTypeOfField($fieldName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -75,6 +75,7 @@ class DoctrineExtractorTest extends TestCase
|
||||
'indexedByDt',
|
||||
'indexedByCustomType',
|
||||
'indexedBuz',
|
||||
'dummyGeneratedValueList',
|
||||
]);
|
||||
|
||||
$this->assertEquals(
|
||||
@ -202,6 +203,15 @@ class DoctrineExtractorTest extends TestCase
|
||||
new Type(Type::BUILTIN_TYPE_STRING),
|
||||
new Type(Type::BUILTIN_TYPE_OBJECT, false, DoctrineRelation::class)
|
||||
)]],
|
||||
['dummyGeneratedValueList', [new Type(
|
||||
Type::BUILTIN_TYPE_OBJECT,
|
||||
false,
|
||||
'Doctrine\Common\Collections\Collection',
|
||||
true,
|
||||
new Type(Type::BUILTIN_TYPE_INT),
|
||||
new Type(Type::BUILTIN_TYPE_OBJECT, false, DoctrineRelation::class)
|
||||
)]],
|
||||
['json', null],
|
||||
];
|
||||
|
||||
if (class_exists(Types::class)) {
|
||||
|
@ -137,4 +137,9 @@ class DoctrineDummy
|
||||
* @OneToMany(targetEntity="DoctrineRelation", mappedBy="buzField", indexBy="buzField")
|
||||
*/
|
||||
protected $indexedBuz;
|
||||
|
||||
/**
|
||||
* @OneToMany(targetEntity="DoctrineRelation", mappedBy="dummyRelation", indexBy="gen_value_col_id", orphanRemoval=true)
|
||||
*/
|
||||
protected $dummyGeneratedValueList;
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ use Doctrine\ORM\Mapping\Column;
|
||||
use Doctrine\ORM\Mapping\Entity;
|
||||
use Doctrine\ORM\Mapping\GeneratedValue;
|
||||
use Doctrine\ORM\Mapping\Id;
|
||||
use Doctrine\ORM\Mapping\OneToMany;
|
||||
|
||||
/**
|
||||
* @author Kévin Dunglas <dunglas@gmail.com>
|
||||
@ -34,4 +35,15 @@ class DoctrineGeneratedValue
|
||||
* @Column
|
||||
*/
|
||||
public $foo;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
* @Column(type="integer", name="gen_value_col_id")
|
||||
*/
|
||||
public $valueId;
|
||||
|
||||
/**
|
||||
* @OneToMany(targetEntity="DoctrineRelation", mappedBy="generatedValueRelation", indexBy="rguid_column", orphanRemoval=true)
|
||||
*/
|
||||
protected $relationList;
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ use Doctrine\ORM\Mapping\Column;
|
||||
use Doctrine\ORM\Mapping\Entity;
|
||||
use Doctrine\ORM\Mapping\Id;
|
||||
use Doctrine\ORM\Mapping\ManyToOne;
|
||||
use Doctrine\ORM\Mapping\JoinColumn;
|
||||
|
||||
/**
|
||||
* @Entity
|
||||
@ -60,4 +61,15 @@ class DoctrineRelation
|
||||
* @ManyToOne(targetEntity="DoctrineDummy", inversedBy="indexedBuz")
|
||||
*/
|
||||
protected $buzField;
|
||||
|
||||
/**
|
||||
* @ManyToOne(targetEntity="DoctrineDummy", inversedBy="dummyGeneratedValueList")
|
||||
*/
|
||||
private $dummyRelation;
|
||||
|
||||
/**
|
||||
* @ManyToOne(targetEntity="DoctrineGeneratedValue", inversedBy="relationList")
|
||||
* @JoinColumn(name="gen_value_col_id", referencedColumnName="gen_value_col_id")
|
||||
*/
|
||||
private $generatedValueRelation;
|
||||
}
|
||||
|
@ -84,7 +84,7 @@ final class CheckTypeDeclarationsPass extends AbstractRecursivePass
|
||||
return $value;
|
||||
}
|
||||
|
||||
if (!$value instanceof Definition || $value->hasErrors()) {
|
||||
if (!$value instanceof Definition || $value->hasErrors() || $value->isDeprecated()) {
|
||||
return parent::processValue($value, $isRoot);
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,7 @@ use Symfony\Component\DependencyInjection\Tests\Fixtures\CheckTypeDeclarationsPa
|
||||
use Symfony\Component\DependencyInjection\Tests\Fixtures\CheckTypeDeclarationsPass\BarMethodCall;
|
||||
use Symfony\Component\DependencyInjection\Tests\Fixtures\CheckTypeDeclarationsPass\BarOptionalArgument;
|
||||
use Symfony\Component\DependencyInjection\Tests\Fixtures\CheckTypeDeclarationsPass\BarOptionalArgumentNotNull;
|
||||
use Symfony\Component\DependencyInjection\Tests\Fixtures\CheckTypeDeclarationsPass\Deprecated;
|
||||
use Symfony\Component\DependencyInjection\Tests\Fixtures\CheckTypeDeclarationsPass\Foo;
|
||||
use Symfony\Component\DependencyInjection\Tests\Fixtures\CheckTypeDeclarationsPass\FooObject;
|
||||
use Symfony\Component\DependencyInjection\Tests\Fixtures\CheckTypeDeclarationsPass\UnionConstructor;
|
||||
@ -720,6 +721,19 @@ class CheckTypeDeclarationsPassTest extends TestCase
|
||||
$this->addToAssertionCount(1);
|
||||
}
|
||||
|
||||
public function testProcessSkipsDeprecatedDefinitions()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$container
|
||||
->register('foobar', Deprecated::class)
|
||||
->setDeprecated(true)
|
||||
;
|
||||
|
||||
(new CheckTypeDeclarationsPass(true))->process($container);
|
||||
|
||||
$this->addToAssertionCount(1);
|
||||
}
|
||||
|
||||
public function testProcessHandleClosureForCallable()
|
||||
{
|
||||
$closureDefinition = new Definition(\Closure::class);
|
||||
|
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Symfony\Component\DependencyInjection\Tests\Fixtures\CheckTypeDeclarationsPass;
|
||||
|
||||
trigger_deprecation('foo/bar', '1.2.3', 'Deprecated class.');
|
||||
|
||||
class Deprecated
|
||||
{
|
||||
}
|
@ -182,7 +182,9 @@ class UsernamePasswordJsonAuthenticationListener extends AbstractListener
|
||||
}
|
||||
|
||||
if (!$this->failureHandler) {
|
||||
return new JsonResponse(['error' => $failed->getMessageKey()], 401);
|
||||
$errorMessage = strtr($failed->getMessageKey(), $failed->getMessageData());
|
||||
|
||||
return new JsonResponse(['error' => $errorMessage], 401);
|
||||
}
|
||||
|
||||
$response = $this->failureHandler->onAuthenticationFailure($request, $failed);
|
||||
|
Reference in New Issue
Block a user