Skip to content

Commit

Permalink
Merge pull request #1020 from schmittjoh/missing-type-doctrine
Browse files Browse the repository at this point in the history
Doctrine driver normalizeFieldType method does not handle nulls
  • Loading branch information
goetas committed Dec 9, 2018
2 parents ecc7307 + 8ec6bea commit 0898544
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 2 deletions.
4 changes: 3 additions & 1 deletion src/Metadata/Driver/DoctrinePHPCRTypeDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ protected function hideProperty(DoctrineClassMetadata $doctrineMetadata, Propert
protected function setPropertyType(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata): void
{
$propertyName = $propertyMetadata->name;
if ($doctrineMetadata->hasField($propertyName) && $fieldType = $this->normalizeFieldType($doctrineMetadata->getTypeOfField($propertyName))) {
if ($doctrineMetadata->hasField($propertyName)
&& ($typeOfFiled = $doctrineMetadata->getTypeOfField($propertyName))
&& ($fieldType = $this->normalizeFieldType($typeOfFiled))) {
$field = $doctrineMetadata->getFieldMapping($propertyName);
if (!empty($field['multivalue'])) {
$fieldType = 'array';
Expand Down
4 changes: 3 additions & 1 deletion src/Metadata/Driver/DoctrineTypeDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ protected function setDiscriminator(DoctrineClassMetadata $doctrineMetadata, Cla
protected function setPropertyType(DoctrineClassMetadata $doctrineMetadata, PropertyMetadata $propertyMetadata): void
{
$propertyName = $propertyMetadata->name;
if ($doctrineMetadata->hasField($propertyName) && $fieldType = $this->normalizeFieldType($doctrineMetadata->getTypeOfField($propertyName))) {
if ($doctrineMetadata->hasField($propertyName)
&& ($typeOfFiled = $doctrineMetadata->getTypeOfField($propertyName))
&& ($fieldType = $this->normalizeFieldType($typeOfFiled))) {
$propertyMetadata->setType($this->typeParser->parse($fieldType));
} elseif ($doctrineMetadata->hasAssociation($propertyName)) {
$targetEntity = $doctrineMetadata->getAssociationTargetClass($propertyName);
Expand Down
20 changes: 20 additions & 0 deletions tests/Fixtures/Doctrine/BlogPostSeo.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

declare(strict_types=1);

namespace JMS\Serializer\Tests\Fixtures\Doctrine;

use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Embeddable()
*/
class BlogPostSeo
{
/**
* @ORM\Column(type="string", name="meta_title")
*
* @var string
*/
private $metaTitle;
}
25 changes: 25 additions & 0 deletions tests/Fixtures/Doctrine/BlogPostWithEmbedded.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

declare(strict_types=1);

namespace JMS\Serializer\Tests\Fixtures\Doctrine;

use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity
*/
class BlogPostWithEmbedded
{
/**
* @ORM\Id
* @ORM\Column(type="guid")
* @ORM\GeneratedValue(strategy="UUID")
*/
protected $id;

/**
* @ORM\Embedded(class="BlogPostSeo", columnPrefix="seo_")
*/
private $seo;
}
8 changes: 8 additions & 0 deletions tests/Metadata/Driver/DoctrineDriverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use JMS\Serializer\Metadata\Driver\AnnotationDriver;
use JMS\Serializer\Metadata\Driver\DoctrineTypeDriver;
use JMS\Serializer\Naming\IdenticalPropertyNamingStrategy;
use JMS\Serializer\Tests\Fixtures\Doctrine\BlogPostWithEmbedded;
use PHPUnit\Framework\TestCase;

class DoctrineDriverTest extends TestCase
Expand All @@ -21,6 +22,13 @@ public function getMetadata()
return $this->getDoctrineDriver()->loadMetadataForClass($refClass);
}

public function testMetadataForEmbedded()
{
$refClass = new \ReflectionClass(BlogPostWithEmbedded::class);
$meta = $this->getDoctrineDriver()->loadMetadataForClass($refClass);
self::assertNotNull($meta);
}

public function testTypelessPropertyIsGivenTypeFromDoctrineMetadata()
{
$metadata = $this->getMetadata();
Expand Down

0 comments on commit 0898544

Please sign in to comment.