KnpLabs / knp-components

Various component pack, includes paginator
MIT License
745 stars 141 forks source link

is final and cannot be proxied #279

Closed kricha closed 3 years ago

kricha commented 3 years ago

After upgrading to 3.0 version i always got InvalidProxiedClassException Provided class "Knp\Component\Pager\Paginator" is final and cannot be proxied

stacktrace:

ProxyManager\Exception\InvalidProxiedClassException: Provided class "Knp\Component\Pager\Paginator" is final and cannot be proxied

 at /app/vendor/ocramius/proxy-manager/src/ProxyManager/Exception/InvalidProxiedClassException.php:28
  at ProxyManager\Exception\InvalidProxiedClassException::finalClassNotSupported(object(ReflectionClass))
     (/app/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/Assertion/CanProxyAssertion.php:50)
  at ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion::isNotFinal(object(ReflectionClass))
     (/app/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/Assertion/CanProxyAssertion.php:34)
  at ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion::assertClassCanBeProxied(object(ReflectionClass))
     (/app/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolderGenerator.php:58)
  at ProxyManager\ProxyGenerator\LazyLoadingValueHolderGenerator->generate(object(ReflectionClass), object(ClassGenerator))
     (/app/vendor/symfony/proxy-manager-bridge/LazyProxy/PhpDumper/LazyLoadingValueHolderGenerator.php:35)
  at Symfony\Bridge\ProxyManager\LazyProxy\PhpDumper\LazyLoadingValueHolderGenerator->generate(object(ReflectionClass), object(ClassGenerator))
     (/app/vendor/symfony/proxy-manager-bridge/LazyProxy/PhpDumper/ProxyDumper.php:122)
  at Symfony\Bridge\ProxyManager\LazyProxy\PhpDumper\ProxyDumper->generateProxyClass(object(Definition))
     (/app/vendor/symfony/proxy-manager-bridge/LazyProxy/PhpDumper/ProxyDumper.php:88)
  at Symfony\Bridge\ProxyManager\LazyProxy\PhpDumper\ProxyDumper->getProxyCode(object(Definition))
     (/app/vendor/symfony/dependency-injection/Dumper/PhpDumper.php:550)
  at Symfony\Component\DependencyInjection\Dumper\PhpDumper->generateProxyClasses()
     (/app/vendor/symfony/dependency-injection/Dumper/PhpDumper.php:211)
  at Symfony\Component\DependencyInjection\Dumper\PhpDumper->dump(array('class' => 'srcApp_KernelDevDebugContainer', 'base_class' => 'Container', 'namespace' => '', 'as_files' => true, 'debug' => true, 'hot_path_tag' => 'container.hot_path', 'inline_factories_parameter' => 'container.dumper.inline_factories', 'inline_class_loader_parameter' => 'container.dumper.inline_class_loader', 'preload_classes' => array('FrameworkBundle' => 'Symfony\\Bundle\\FrameworkBundle\\FrameworkBundle', 'SensioFrameworkExtraBundle' => 'Sensio\\Bundle\\FrameworkExtraBundle\\SensioFrameworkExtraBundle', 'DoctrineBundle' => 'Doctrine\\Bundle\\DoctrineBundle\\DoctrineBundle', 'DoctrineMigrationsBundle' => 'Doctrine\\Bundle\\MigrationsBundle\\DoctrineMigrationsBundle', 'TwigBundle' => 'Symfony\\Bundle\\TwigBundle\\TwigBundle', 'MonologBundle' => 'Symfony\\Bundle\\MonologBundle\\MonologBundle', 'SecurityBundle' => 'Symfony\\Bundle\\SecurityBundle\\SecurityBundle', 'SwiftmailerBundle' => 'Symfony\\Bundle\\SwiftmailerBundle\\SwiftmailerBundle', 'WebProfilerBundle' => 'Symfony\\Bundle\\WebProfilerBundle\\WebProfilerBundle', 'SonataBlockBundle' => 'Sonata\\BlockBundle\\SonataBlockBundle', 'KnpMenuBundle' => 'Knp\\Bundle\\MenuBundle\\KnpMenuBundle', 'SonataAdminBundle' => 'Sonata\\AdminBundle\\SonataAdminBundle', 'NelmioApiDocBundle' => 'Nelmio\\ApiDocBundle\\NelmioApiDocBundle', 'SchebTwoFactorBundle' => 'Scheb\\TwoFactorBundle\\SchebTwoFactorBundle', 'FOSRestBundle' => 'FOS\\RestBundle\\FOSRestBundle', 'FOSElasticaBundle' => 'FOS\\ElasticaBundle\\FOSElasticaBundle', 'MisdPhoneNumberBundle' => 'Misd\\PhoneNumberBundle\\MisdPhoneNumberBundle', 'FOSJsRoutingBundle' => 'FOS\\JsRoutingBundle\\FOSJsRoutingBundle', 'SncRedisBundle' => 'Snc\\RedisBundle\\SncRedisBundle', 'JMSSerializerBundle' => 'JMS\\SerializerBundle\\JMSSerializerBundle', 'KnpPaginatorBundle' => 'Knp\\Bundle\\PaginatorBundle\\KnpPaginatorBundle', 'SonataDoctrineORMAdminBundle' => 'Sonata\\DoctrineORMAdminBundle\\SonataDoctrineORMAdminBundle', 'EnqueueBundle' => 'Enqueue\\Bundle\\EnqueueBundle', 'EnqueueElasticaBundle' => 'Enqueue\\ElasticaBundle\\EnqueueElasticaBundle', 'EndroidQrCodeBundle' => 'Endroid\\QrCodeBundle\\EndroidQrCodeBundle', 'KrichaDoctrineAuditBundle' => 'Kricha\\DoctrineAuditBundle\\KrichaDoctrineAuditBundle', 'DebugBundle' => 'Symfony\\Bundle\\DebugBundle\\DebugBundle', 'MakerBundle' => 'Symfony\\Bundle\\MakerBundle\\MakerBundle', 'TwigExtraBundle' => 'Twig\\Extra\\TwigExtraBundle\\TwigExtraBundle', 'SonataDoctrineBundle' => 'Sonata\\Doctrine\\Bridge\\Symfony\\SonataDoctrineBundle', 'SonataTwigBundle' => 'Sonata\\Twig\\Bridge\\Symfony\\SonataTwigBundle', 'SonataFormBundle' => 'Sonata\\Form\\Bridge\\Symfony\\SonataFormBundle', 'BabDevPagerfantaBundle' => 'BabDev\\PagerfantaBundle\\BabDevPagerfantaBundle'), 'service_locator_tag' => 'container.service_locator', 'build_time' => 1606927698, 'file' => '/app/var/cache/dev/srcApp_KernelDevDebugContainer.php'))
     (/app/vendor/symfony/http-kernel/Kernel.php:780)
  at Symfony\Component\HttpKernel\Kernel->dumpContainer(object(ConfigCache), object(ContainerBuilder), 'srcApp_KernelDevDebugContainer', 'Container')
     (/app/vendor/symfony/http-kernel/Kernel.php:606)
  at Symfony\Component\HttpKernel\Kernel->initializeContainer()
     (/app/vendor/symfony/http-kernel/Kernel.php:136)
  at Symfony\Component\HttpKernel\Kernel->boot()
     (/app/vendor/symfony/http-kernel/Kernel.php:196)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (/app/public/index.php:25)        
garak commented 3 years ago

How do you define your service?

kricha commented 3 years ago

@garak i use this class only in one place

public function __construct(
        PaginatorInterface $paginator,
        TranslatorInterface $translator,
        Environment $templateEngine,
        Index $esAppIndex,
        EntityManagerInterface $entityManager
    ) {
        $this->translator     = $translator;
        $this->paginator      = $paginator;
        $this->templateEngine = $templateEngine;
        $this->elasticaIndex  = $esAppIndex;
        $this->entityManager  = $entityManager;
        $this->pa             = PropertyAccess::createPropertyAccessor();
    }

this class is autowired/autoconfigurated

garak commented 3 years ago

Please refer to https://github.com/KnpLabs/KnpPaginatorBundle/issues/680