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

Add support for Symfony 6 #428

Merged
merged 16 commits into from
Apr 20, 2022
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
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
fail-fast: false
matrix:
php: ["8.0", "8.1"]
symfony: ["^5.4"]
symfony: ["^5.4", "^6.0"]
twig: ["^2.12", "^3.0"]

steps:
Expand Down
30 changes: 15 additions & 15 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,17 @@
"gedmo/doctrine-extensions": "^2.4.12 || ^3.0",
"jms/serializer-bundle": "^3.5 || ^4.0",
"sylius/registry": "^1.2",
"symfony/config": "^5.4",
"symfony/expression-language": "^5.4",
"symfony/form": "^5.4",
"symfony/framework-bundle": "^5.4",
"symfony/http-foundation": "^5.4",
"symfony/security-csrf": "^5.4",
"symfony/routing": "^5.4",
"symfony/translation": "^5.4",
"symfony/twig-bundle": "^5.4",
"symfony/validator": "^5.4",
"symfony/yaml": "^5.4",
"symfony/config": "^5.4 || ^6.0",
"symfony/expression-language": "^5.4 || ^6.0",
"symfony/form": "^5.4 || ^6.0",
"symfony/framework-bundle": "^5.4 || ^6.0",
"symfony/http-foundation": "^5.4 || ^6.0",
"symfony/security-csrf": "^5.4 || ^6.0",
"symfony/routing": "^5.4 || ^6.0",
"symfony/translation": "^5.4 || ^6.0",
"symfony/twig-bundle": "^5.4 || ^6.0",
"symfony/validator": "^5.4 || ^6.0",
"symfony/yaml": "^5.4 || ^6.0",
"webmozart/assert": "^1.8",
"willdurand/hateoas-bundle": "^2.0",
"winzou/state-machine-bundle": "^0.6"
Expand All @@ -67,10 +67,10 @@
"phpstan/phpstan-webmozart-assert": "0.12.16",
"phpunit/phpunit": "^9.5",
"sylius-labs/coding-standard": "^4.0",
"sylius/grid-bundle": "^1.7",
"symfony/dependency-injection": "^5.4",
"symfony/dotenv": "^5.4",
"symfony/workflow": "^5.4",
"sylius/grid-bundle": "^1.7 || dev-symfony-6",
"symfony/dependency-injection": "^5.4 || ^6.0",
"symfony/dotenv": "^5.4 || ^6.0",
"symfony/workflow": "^5.4 || ^6.0",
"symplify/easy-coding-standard": "^10.2",
"twig/twig": "^2.12 || ^3.0",
"vimeo/psalm": "^4.22",
Expand Down
1 change: 1 addition & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ parameters:
- '/Parameter \#1 \$array[0-9]? of function array_multisort expects array, array\|int given\./'
- '/Parameter \#2 \$class of static method Webmozart\\Assert\\Assert::isInstanceOf\(\) expects class-string<object>, string given./'
- '/Parameter \#1 \$objectOrClass of class ReflectionClass constructor expects class-string<object>|object, object|string given./'
- '/Parameter \#1 \$package of method Symfony\\Component\\DependencyInjection\\Alias::setDeprecated\(\)/'
- '/Return typehint of method Sylius\\Bundle\\ResourceBundle\\Routing\\CrudRoutesAttributesLoader::getClassAttributes\(\) has invalid type ReflectionAttribute./'
- '/Return typehint of method Sylius\\Bundle\\ResourceBundle\\Routing\\RoutesAttributesLoader::getClassAttributes\(\) has invalid type ReflectionAttribute./'
- '/Unable to resolve the template type ExpectedType in call to method static method Webmozart\\Assert\\Assert::isInstanceOf\(\)/'
Expand Down
14 changes: 14 additions & 0 deletions psalm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@
</errorLevel>
</InternalMethod>

<InvalidArgument>
<errorLevel type="suppress">
<referencedFunction name="Symfony\Component\DependencyInjection\Alias::setDeprecated" />
</errorLevel>
</InvalidArgument>

<InvalidDocblock>
<errorLevel type="suppress">
<file name="vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php" />
Expand Down Expand Up @@ -93,6 +99,8 @@
<referencedMethod name="Symfony\Component\Config\Definition\Builder\NodeDefinition::scalarNode" />
<referencedMethod name="Symfony\Component\Config\Definition\Builder\NodeDefinition::variableNode" />
<referencedMethod name="Symfony\Component\Config\Definition\Builder\NodeParentInterface::end" />
<referencedMethod name="Symfony\Component\Config\Definition\Builder\VariableNodeDefinition::scalarNode" />
<referencedMethod name="Symfony\Component\Config\Definition\Builder\VariableNodeDefinition::variableNode" />
</errorLevel>
</PossiblyUndefinedMethod>

Expand All @@ -105,6 +113,12 @@
</errorLevel>
</PropertyNotSetInConstructor>

<TooFewArguments>
<errorLevel type="suppress">
<referencedFunction name="Symfony\Component\DependencyInjection\Alias::setDeprecated" />
</errorLevel>
</TooFewArguments>

<TooManyArguments>
<errorLevel type="suppress">
<referencedFunction name="Symfony\Component\HttpFoundation\HeaderBag::all" />
Expand Down
19 changes: 18 additions & 1 deletion src/Bundle/Controller/Parameters.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,24 @@
use Symfony\Component\HttpFoundation\ParameterBag;
use Symfony\Component\HttpKernel\Kernel;

if (Kernel::MAJOR_VERSION === 5) {
if (Kernel::MAJOR_VERSION === 6) {
class Parameters extends ParameterBag
{
/**
* @param mixed $default
*/
public function get(string $key, $default = null): mixed
{
$result = parent::get($key, $default);

if (null === $result && $default !== null && $this->has($key)) {
$result = $default;
}

return $result;
}
}
} elseif (Kernel::MAJOR_VERSION === 5) {
Copy link
Member

Choose a reason for hiding this comment

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

We should remove sf4 acl

class Parameters extends ParameterBag
{
/**
Expand Down
33 changes: 33 additions & 0 deletions src/Bundle/DependencyInjection/Compiler/TwigPass.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

/*
* This file is part of the Sylius package.
*
* (c) Paweł Jędrzejewski
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

declare(strict_types=1);

namespace Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler;

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

/**
* TODO Remove on sylius/resource-bundle 2.0
*/
final class TwigPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container): void
{
if (!$container->hasDefinition('twig')) {
return;
}

$twigDefinition = $container->getDefinition('twig');
$twigDefinition->setPublic(true);
}
}
2 changes: 2 additions & 0 deletions src/Bundle/Doctrine/ORM/ContainerRepositoryFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,13 @@ public function __construct(RepositoryFactory $doctrineFactory, array $genericEn
$this->genericEntities = $genericEntities;
}

/** @psalm-suppress InvalidReturnType */
public function getRepository(EntityManagerInterface $entityManager, $entityName): ObjectRepository
{
$metadata = $entityManager->getClassMetadata($entityName);

if ($metadata->customRepositoryClassName === null && in_array($entityName, $this->genericEntities, true)) {
/** @psalm-suppress InvalidReturnStatement */
return $this->getOrCreateRepository($entityManager, $metadata);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public function __construct(ServerParams $serverParams = null)
$this->serverParams = $serverParams ?: new ServerParams();
}

public function handleRequest(FormInterface $form, $request = null): void
public function handleRequest(FormInterface $form, mixed $request = null): void
{
if (!$request instanceof Request) {
throw new UnexpectedTypeException($request, 'Symfony\Component\HttpFoundation\Request');
Expand Down Expand Up @@ -107,7 +107,7 @@ public function handleRequest(FormInterface $form, $request = null): void
$form->submit($data, 'PATCH' !== $method);
}

public function isFileUpload($data): bool
public function isFileUpload(mixed $data): bool
{
return $data instanceof File;
}
Expand Down
2 changes: 2 additions & 0 deletions src/Bundle/SyliusResourceBundle.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\RegisterResourceRepositoryPass;
use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\RegisterResourcesPass;
use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\RegisterStateMachinePass;
use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\TwigPass;
use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\WinzouStateMachinePass;
use Sylius\Bundle\ResourceBundle\DependencyInjection\PagerfantaExtension;
use Symfony\Component\DependencyInjection\Compiler\PassConfig;
Expand All @@ -48,6 +49,7 @@ public function build(ContainerBuilder $container): void
$container->addCompilerPass(new DoctrineContainerRepositoryFactoryPass());
$container->addCompilerPass(new RegisterResourceRepositoryPass());
$container->addCompilerPass(new RegisterFormBuilderPass());
$container->addCompilerPass(new TwigPass());

$container->registerExtension(new PagerfantaExtension());
$container->addCompilerPass(new PagerfantaBridgePass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, -1); // Should run after all passes from BabDevPagerfantaBundle
Expand Down
2 changes: 1 addition & 1 deletion src/Bundle/Validator/DisabledValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

final class DisabledValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint): void
public function validate(mixed $value, Constraint $constraint): void
{
Assert::isInstanceOf($constraint, Disabled::class);

Expand Down
2 changes: 1 addition & 1 deletion src/Bundle/Validator/EnabledValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

final class EnabledValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint): void
public function validate(mixed $value, Constraint $constraint): void
{
Assert::isInstanceOf($constraint, Enabled::class);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

final class UniqueWithinCollectionConstraintValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint): void
public function validate(mixed $value, Constraint $constraint): void
{
Assert::isInstanceOf($constraint, UniqueWithinCollectionConstraint::class);

Expand Down
4 changes: 2 additions & 2 deletions src/Bundle/spec/Controller/ParametersParserSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -193,10 +193,10 @@ function it_throws_an_exception_if_array_parameter_is_injected_into_expression()
;
}

function it_throws_an_exception_if_object_parameter_is_injected_into_expression(): void
function it_throws_an_exception_if_object_parameter_is_injected_into_expression(\Stringable $object): void
{
$request = new Request();
$request->request->set('object', new \stdClass());
$request->request->set('object', $object->getWrappedObject());

$this
->shouldThrow(\InvalidArgumentException::class)
Expand Down
2 changes: 2 additions & 0 deletions src/Bundle/spec/Controller/ResourceControllerSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,7 @@ function it_returns_a_html_response_for_creating_new_resource_form(

$request->isMethod('POST')->willReturn(false);
$form->createView()->willReturn($formView);
$form->handleRequest($request)->willReturn($form);

$container->has('templating')->willReturn(false);
$container->has('twig')->willReturn(true);
Expand Down Expand Up @@ -1495,6 +1496,7 @@ function it_uses_response_from_initialize_create_event_if_defined(

$request->isMethod('POST')->willReturn(false);
$form->createView()->shouldNotBeCalled();
$form->handleRequest($request)->willReturn($form);

$eventDispatcher->dispatchInitializeEvent(ResourceActions::CREATE, $configuration, $newResource)->willReturn($initializeEvent);
$initializeEvent->hasResponse()->willReturn(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@ function it_excludes_non_natural_identifier_from_the_field_list(
$classMetadataInfo->getTypeOfField('description')->willReturn(Types::TEXT);
$classMetadataInfo->getTypeOfField('enabled')->willReturn(Types::BOOLEAN);

$formBuilder->add('name', null, [])->willReturn($formBuilder);
$formBuilder->add('description', null, [])->willReturn($formBuilder);
$formBuilder->add('enabled', null, [])->willReturn($formBuilder);

$formBuilder->add('id', Argument::cetera())->shouldNotBeCalled();
$formBuilder->add('name', null, [])->shouldBeCalled();
$formBuilder->add('description', null, [])->shouldBeCalled();
Expand All @@ -93,6 +97,11 @@ function it_does_not_exclude_natural_identifier_from_the_field_list(
$classMetadataInfo->getTypeOfField('description')->willReturn(Types::TEXT);
$classMetadataInfo->getTypeOfField('enabled')->willReturn(Types::BOOLEAN);

$formBuilder->add('id', null, [])->willReturn($formBuilder);
$formBuilder->add('name', null, [])->willReturn($formBuilder);
$formBuilder->add('description', null, [])->willReturn($formBuilder);
$formBuilder->add('enabled', null, [])->willReturn($formBuilder);

$formBuilder->add('id', null, [])->shouldBeCalled();
$formBuilder->add('name', null, [])->shouldBeCalled();
$formBuilder->add('description', null, [])->shouldBeCalled();
Expand All @@ -117,6 +126,10 @@ function it_uses_metadata_to_create_appropriate_fields(
$classMetadataInfo->getTypeOfField('description')->willReturn(Types::TEXT);
$classMetadataInfo->getTypeOfField('enabled')->willReturn(Types::BOOLEAN);

$formBuilder->add('name', null, [])->willReturn($formBuilder);
$formBuilder->add('description', null, [])->willReturn($formBuilder);
$formBuilder->add('enabled', null, [])->willReturn($formBuilder);

$formBuilder->add('name', null, [])->shouldBeCalled();
$formBuilder->add('description', null, [])->shouldBeCalled();
$formBuilder->add('enabled', null, [])->shouldBeCalled();
Expand All @@ -141,6 +154,11 @@ function it_uses_single_text_widget_for_datetime_field(
$classMetadataInfo->getTypeOfField('enabled')->willReturn(Types::BOOLEAN);
$classMetadataInfo->getTypeOfField('publishedAt')->willReturn(Types::DATETIME_MUTABLE);

$formBuilder->add('name', null, [])->willReturn($formBuilder);
$formBuilder->add('description', null, [])->willReturn($formBuilder);
$formBuilder->add('enabled', null, [])->willReturn($formBuilder);
$formBuilder->add('publishedAt', null, ['widget' => 'single_text'])->willReturn($formBuilder);

$formBuilder->add('name', null, [])->shouldBeCalled();
$formBuilder->add('description', null, [])->shouldBeCalled();
$formBuilder->add('enabled', null, [])->shouldBeCalled();
Expand Down Expand Up @@ -169,6 +187,13 @@ function it_also_creates_fields_for_relations_other_than_one_to_many(
$classMetadataInfo->getTypeOfField('enabled')->willReturn(Types::BOOLEAN);
$classMetadataInfo->getTypeOfField('publishedAt')->willReturn(Types::DATETIME_MUTABLE);

$formBuilder->add('name', null, [])->willReturn($formBuilder);
$formBuilder->add('description', null, [])->willReturn($formBuilder);
$formBuilder->add('enabled', null, [])->willReturn($formBuilder);
$formBuilder->add('publishedAt', null, ['widget' => 'single_text'])->willReturn($formBuilder);
$formBuilder->add('category', null, ['choice_label' => 'id'])->willReturn($formBuilder);
$formBuilder->add('users', Argument::cetera())->willReturn($formBuilder);

$formBuilder->add('name', null, [])->shouldBeCalled();
$formBuilder->add('description', null, [])->shouldBeCalled();
$formBuilder->add('enabled', null, [])->shouldBeCalled();
Expand Down Expand Up @@ -197,6 +222,12 @@ function it_excludes_common_fields_like_createdAt_and_updatedAt(
$classMetadataInfo->getTypeOfField('createdAt')->willReturn(Types::DATETIME_MUTABLE);
$classMetadataInfo->getTypeOfField('updatedAt')->willReturn(Types::DATETIME_MUTABLE);

$formBuilder->add('name', null, [])->willReturn($formBuilder);
$formBuilder->add('description', null, [])->willReturn($formBuilder);
$formBuilder->add('enabled', null, [])->willReturn($formBuilder);
$formBuilder->add('createdAt', Argument::cetera())->willReturn($formBuilder);
$formBuilder->add('updatedAt', Argument::cetera())->willReturn($formBuilder);

$formBuilder->add('name', null, [])->shouldBeCalled();
$formBuilder->add('description', null, [])->shouldBeCalled();
$formBuilder->add('enabled', null, [])->shouldBeCalled();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ function it_sets_code_as_enabled_when_resource_is_new(FormEvent $event, FormInte
$resource->getCode()->willReturn(null);

$form
->add('code', Argument::type('string'), Argument::withEntry('disabled', false))
->add('code', TextType::class, Argument::withEntry('disabled', false))
->willReturn($form)
->shouldBeCalled()
;

Expand All @@ -62,7 +63,8 @@ function it_sets_code_as_disabled_when_resource_is_not_new(
$resource->getCode()->willReturn('Code12');

$form
->add('code', Argument::type('string'), Argument::withEntry('disabled', true))
->add('code', TextType::class, Argument::withEntry('disabled', true))
->willReturn($form)
->shouldBeCalled()
;

Expand All @@ -84,6 +86,7 @@ function it_sets_code_as_enabled_when_there_is_no_resource(

$form
->add('code', TextType::class, Argument::withEntry('disabled', false))
->willReturn($form)
->shouldBeCalled()
;

Expand All @@ -101,6 +104,7 @@ function it_adds_code_with_specified_type(FormEvent $event, FormInterface $form,

$form
->add('code', FormType::class, Argument::withEntry('disabled', true))
->willReturn($form)
->shouldBeCalled()
;

Expand All @@ -116,6 +120,7 @@ function it_adds_code_with_type_text_by_default(FormEvent $event, FormInterface

$form
->add('code', TextType::class, Argument::withEntry('disabled', true))
->willReturn($form)
->shouldBeCalled()
;

Expand All @@ -134,6 +139,7 @@ function it_adds_code_with_label_sylius_ui_code_by_default(

$form
->add('code', TextType::class, Argument::withEntry('label', 'sylius.ui.code'))
->willReturn($form)
->shouldBeCalled()
;

Expand All @@ -154,6 +160,7 @@ function it_adds_code_with_specified_type_and_label(

$form
->add('code', FormType::class, Argument::withEntry('label', 'sylius.ui.name'))
->willReturn($form)
->shouldBeCalled()
;

Expand Down
Loading