Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Symfony 7 support #784

Merged
merged 4 commits into from
Dec 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .github/workflows/continuous-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ jobs:
stability:
- "stable"
symfony-version:
- "5.4.*"
- "6.4.*"
- "7.0.*"
driver-version:
- "stable"
dependencies:
Expand All @@ -40,7 +40,10 @@ jobs:
php-version: "8.1"
driver-version: "1.5.0"
stability: "stable"
symfony-version: "5.4.*"
symfony-version: "6.4.*"
exclude:
- php-version: "8.1"
symfony-version: "7.0.*"

services:
mongodb:
Expand Down
2 changes: 0 additions & 2 deletions DependencyInjection/Compiler/DoctrineMongoDBMappingsPass.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
* Class for Symfony bundles to configure mappings for model classes not in the
* automapped folder.
*
* NOTE: alias is only supported by Symfony 2.6+ and will be ignored with older versions.
*
* @internal since version 4.7.0
*/
final class DoctrineMongoDBMappingsPass extends RegisterMappingsPass
Expand Down
6 changes: 0 additions & 6 deletions DependencyInjection/DoctrineMongoDBExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
use Doctrine\Common\EventSubscriber;
use Doctrine\ODM\MongoDB\DocumentManager;
use InvalidArgumentException;
use Symfony\Bridge\Doctrine\ArgumentResolver\EntityValueResolver;
use Symfony\Bridge\Doctrine\DependencyInjection\AbstractDoctrineExtension;
use Symfony\Bridge\Doctrine\Messenger\DoctrineClearEntityManagerWorkerSubscriber;
use Symfony\Component\Cache\Adapter\ApcuAdapter;
Expand Down Expand Up @@ -400,11 +399,6 @@ private function loadMessengerServices(ContainerBuilder $container): void
/** @param array<string, mixed> $config */
private function loadEntityValueResolverServices(ContainerBuilder $container, FileLoader $loader, array $config): void
{
// available in Symfony 6.2 and higher
if (! class_exists(EntityValueResolver::class)) {
return;
}

$loader->load('value_resolver.xml');

if (! class_exists(ExpressionLanguage::class)) {
Expand Down
5 changes: 2 additions & 3 deletions Form/DoctrineMongoDBExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,14 @@ public function __construct(ManagerRegistry $registry)
}

/** @return FormTypeInterface[] */
protected function loadTypes()
protected function loadTypes(): array
{
return [
new Type\DocumentType($this->registry),
];
}

/** @return FormTypeGuesserInterface|null */
protected function loadTypeGuesser()
protected function loadTypeGuesser(): ?FormTypeGuesserInterface
{
return new DoctrineMongoDBTypeGuesser($this->registry);
}
Expand Down
14 changes: 6 additions & 8 deletions Form/DoctrineMongoDBTypeGuesser.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,7 @@
$this->registry = $registry;
}

/** @return TypeGuess|null */
public function guessType(string $class, string $property)
public function guessType(string $class, string $property): ?TypeGuess
{
$ret = $this->getMetadata($class);
if (! $ret) {
Expand Down Expand Up @@ -114,10 +113,11 @@
Guess::MEDIUM_CONFIDENCE,
);
}

return null;

Check warning on line 117 in Form/DoctrineMongoDBTypeGuesser.php

View check run for this annotation

Codecov / codecov/patch

Form/DoctrineMongoDBTypeGuesser.php#L117

Added line #L117 was not covered by tests
}

/** @return ValueGuess|null */
public function guessRequired(string $class, string $property)
public function guessRequired(string $class, string $property): ?ValueGuess
{
$ret = $this->getMetadata($class);
if ($ret && $ret[0]->hasField($property)) {
Expand All @@ -137,8 +137,7 @@
return null;
}

/** @return ValueGuess|null */
public function guessMaxLength(string $class, string $property)
public function guessMaxLength(string $class, string $property): ?ValueGuess
{
return null;
}
Expand All @@ -150,8 +149,7 @@
{
}

/** @return ValueGuess|null */
public function guessPattern(string $class, string $property)
public function guessPattern(string $class, string $property): ?ValueGuess
{
$ret = $this->getMetadata($class);
if (! $ret || ! $ret[0]->hasField($property) || $ret[0]->hasAssociation($property)) {
Expand Down
6 changes: 3 additions & 3 deletions README.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ Compatibility
The current version of this bundle has the following requirements:
* PHP 8.1 or newer is required
* `ext-mongodb` 1.5 or newer
* Symfony 5.4 or newer is required
* Symfony 6.4 or newer is required

Support for older Symfony, PHP and MongoDB versions is provided via the `3.0.x`
releases (tracked in the `3.0` branch). This version sees bug and security fixes
Support for older Symfony, PHP and MongoDB versions is provided via the `4.7.x`
releases (tracked in the `4.7.x` branch). This version sees bug and security fixes
only.
9 changes: 3 additions & 6 deletions Tests/Validator/Constraints/UniqueTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,25 @@
use Doctrine\Bundle\MongoDBBundle\Validator\Constraints\Unique;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader;

use function assert;
use Symfony\Component\Validator\Mapping\Loader\AttributeLoader;

final class UniqueTest extends TestCase
{
public function testWithDefaultProperty(): void
{
$metadata = new ClassMetadata(UniqueDocumentDummyOne::class);

$loader = new AnnotationLoader();
$loader = new AttributeLoader();

self::assertTrue($loader->loadClassMetadata($metadata));

[$constraint] = $metadata->getConstraints();
assert($constraint instanceof Unique);
self::assertInstanceOf(Unique::class, $constraint);
self::assertSame(['email'], $constraint->fields);
self::assertSame('doctrine_odm.mongodb.unique', $constraint->validatedBy());
}
}

/** @Unique(fields={"email"}) */
#[Unique(['email'])]
class UniqueDocumentDummyOne
{
Expand Down
1 change: 1 addition & 0 deletions UPGRADE-5.0.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
UPGRADE FROM 4.x to 5.0
=======================

* Add support for Symfony 7.0 and require at least Symfony 6.4
* The `doctrine:mongodb:tail-cursor` command and
`Doctrine\Bundle\MongoDBBundle\Cursor\TailableCursorProcessorInterface`
interface have been dropped. You should use
Expand Down
30 changes: 15 additions & 15 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,27 +30,27 @@
"doctrine/mongodb-odm": "^2.3",
"doctrine/persistence": "^2.2 || ^3.0",
"psr/log": "^1.0 || ^2.0 || ^3.0",
"symfony/config": "^5.4 || ^6.2",
"symfony/console": "^5.4 || ^6.2",
"symfony/dependency-injection": "^5.4 || ^6.2",
"symfony/config": "^6.4 || ^7.0",
"symfony/console": "^6.4 || ^7.0",
"symfony/dependency-injection": "^6.4 || ^7.0",
"symfony/deprecation-contracts": "^2.1 || ^3.0",
"symfony/doctrine-bridge": "^5.4.19 || ^6.2",
"symfony/framework-bundle": "^5.4 || ^6.2",
"symfony/http-kernel": "^5.4 || ^6.2",
"symfony/options-resolver": "^5.4 || ^6.2"
"symfony/doctrine-bridge": "^6.4 || ^7.0",
"symfony/framework-bundle": "^6.4 || ^7.0",
"symfony/http-kernel": "^6.4 || ^7.0",
"symfony/options-resolver": "^6.4 || ^7.0"
},
"require-dev": {
"doctrine/coding-standard": "^11.0",
"doctrine/data-fixtures": "^1.3",
"doctrine/data-fixtures": "^1.7",
"phpunit/phpunit": "^9.5.5",
"psalm/plugin-symfony": "^5.0",
"symfony/browser-kit": "^5.4 || ^6.2",
"symfony/form": "^5.4 || ^6.2",
"symfony/phpunit-bridge": "^6.2",
"symfony/security-bundle": "^5.4 || ^6.2",
"symfony/stopwatch": "^5.4 || ^6.2",
"symfony/validator": "^5.4 || ^6.2",
"symfony/yaml": "^5.4 || ^6.2",
"symfony/browser-kit": "^6.4 || ^7.0",
"symfony/form": "^6.4 || ^7.0",
"symfony/phpunit-bridge": "^6.4.1 || ^7.0.1",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"symfony/phpunit-bridge": "^6.4.1 || ^7.0.1",
"symfony/phpunit-bridge": "^7.0.1",

I guess we can use only the latest

Copy link
Member

@GromNaN GromNaN Dec 12, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, both are almost identical. I don't want to conflict with the SYMFONY_REQUIRE=6.4.*

"symfony/security-bundle": "^6.4 || ^7.0",
"symfony/stopwatch": "^6.4 || ^7.0",
"symfony/validator": "^6.4 || ^7.0",
"symfony/yaml": "^6.4 || ^7.0",
"vimeo/psalm": "^5.12"
},
"conflict": {
Expand Down