Search code examples
phpsymfony4

Can't make a migration any longer in Symfony with ocramius/proxy-manager when migrating?


I have a problem now to make a migration, seems to be some problem. Before it worked, but then I did an update on my vagrant machine, maybe something is missing in php.ini file or some another dependency?

My php version is: PHP 7.2.17-1+ubuntu18.04.1+deb.sury.org+3

WARNING! You are about to execute a database migration that could result in schema changes and data loss. Are you sure you wish to continue? (y/n)y
Migrating up to 20190419065327 from 20190416183458
Migration 20190419065327 failed during Pre-Checks. Error Call to undefined method ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\LazyLoadingMethodInterceptor::fromReflectionWithoutBodyAndDocBlock()

In LazyLoadingMethodInterceptor.php line 29:

  Attempted to call an undefined method named "fromReflectionWithoutBodyAndDocBlock" of  
   class "ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\LazyLoadin  
  gMethodInterceptor".     

Actually this file and the method static::fromReflectionWithoutBodyAndDocBlock($originalMethod);:

<?php

declare(strict_types=1);

namespace ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator;

use ProxyManager\Generator\MethodGenerator;
use ProxyManager\Generator\Util\ProxiedMethodReturnExpression;
use Zend\Code\Generator\PropertyGenerator;
use Zend\Code\Reflection\MethodReflection;

/**
 * Method decorator for lazy loading value holder objects
 *
 * @author Marco Pivetta <[email protected]>
 * @license MIT
 */
class LazyLoadingMethodInterceptor extends MethodGenerator
{
    /**
     * @throws \Zend\Code\Generator\Exception\InvalidArgumentException
     */
    public static function generateMethod(
        MethodReflection $originalMethod,
        PropertyGenerator $initializerProperty,
        PropertyGenerator $valueHolderProperty
    ) : self {
        /* @var $method self */
        $method            = static::fromReflectionWithoutBodyAndDocBlock($originalMethod);
        $initializerName   = $initializerProperty->getName();
        $valueHolderName   = $valueHolderProperty->getName();
        $parameters        = $originalMethod->getParameters();
        $methodName        = $originalMethod->getName();
        $initializerParams = [];
        $forwardedParams   = [];

        foreach ($parameters as $parameter) {
            $parameterName       = $parameter->getName();
            $variadicPrefix      = $parameter->isVariadic() ? '...' : '';
            $initializerParams[] = var_export($parameterName, true) . ' => $' . $parameterName;
            $forwardedParams[]   = $variadicPrefix . '$' . $parameterName;
        }

        $method->setBody(
            '$this->' . $initializerName
            . ' && $this->' . $initializerName
            . '->__invoke($this->' . $valueHolderName . ', $this, ' . var_export($methodName, true)
            . ', array(' . implode(', ', $initializerParams) .  '), $this->' . $initializerName . ");\n\n"
            . ProxiedMethodReturnExpression::generate(
                '$this->' . $valueHolderName . '->' . $methodName . '(' . implode(', ', $forwardedParams) . ')',
                $originalMethod
            )
        );

        return $method;
    }
}

My composer.json:

{
    "type": "project",
    "license": "proprietary",
    "require": {
        "php": "^7.1.3",
        "ext-SimpleXML": "*",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "cocur/slugify": "^3.2",
        "doctrine/doctrine-fixtures-bundle": "^3.1",
        "doctrine/doctrine-migrations-bundle": "^2.0",
        "easycorp/easyadmin-bundle": "^2.0",
        "ocramius/proxy-manager": "^2.2",
        "sensio/framework-extra-bundle": "^5.1",
        "symfony/asset": "4.2.*",
        "symfony/console": "4.2.*",
        "symfony/dotenv": "4.2.*",
        "symfony/expression-language": "4.2.*",
        "symfony/flex": "^1.1",
        "symfony/form": "4.2.*",
        "symfony/framework-bundle": "4.2.*",
        "symfony/monolog-bundle": "^3.1",
        "symfony/orm-pack": "*",
        "symfony/process": "4.2.*",
        "symfony/security-bundle": "4.2.*",
        "symfony/serializer-pack": "*",
        "symfony/stopwatch": "4.2.*",
        "symfony/swiftmailer-bundle": "^3.1",
        "symfony/translation": "4.2.*",
        "symfony/twig-bundle": "4.2.*",
        "symfony/validator": "4.2.*",
        "symfony/web-link": "4.2.*",
        "symfony/webpack-encore-bundle": "^1.1",
        "symfony/yaml": "4.2.*"
    },
    "require-dev": {
        "symfony/debug-pack": "*",
        "symfony/maker-bundle": "^1.0",
        "symfony/profiler-pack": "*",
        "symfony/test-pack": "*",
        "symfony/web-server-bundle": "4.2.*"
    },
    "config": {
        "preferred-install": {
            "*": "dist"
        },
        "sort-packages": true
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\Tests\\": "tests/"
        }
    },
    "replace": {
        "paragonie/random_compat": "2.*",
        "symfony/polyfill-ctype": "*",
        "symfony/polyfill-iconv": "*",
        "symfony/polyfill-php71": "*",
        "symfony/polyfill-php70": "*",
        "symfony/polyfill-php56": "*"
    },
    "scripts": {
        "auto-scripts": {
            "cache:clear": "symfony-cmd",
            "assets:install %PUBLIC_DIR%": "symfony-cmd"
        },
        "post-install-cmd": [
            "@auto-scripts"
        ],
        "post-update-cmd": [
            "@auto-scripts"
        ]
    },
    "conflict": {
        "symfony/symfony": "*"
    },
    "extra": {
        "symfony": {
            "allow-contrib": false,
            "require": "4.2.*"
        }
    }
}

Solution

  • I solved it by removing ocramius/proxy and other dependency. Reverting back to old package.json.

    {
        "type": "project",
        "license": "proprietary",
        "require": {
            "php": "^7.1.3",
            "ext-SimpleXML": "*",
            "ext-ctype": "*",
            "ext-iconv": "*",
            "cocur/slugify": "^3.2",
            "doctrine/doctrine-fixtures-bundle": "^3.1",
            "easycorp/easyadmin-bundle": "^2.0",
            "sensio/framework-extra-bundle": "^5.1",
            "symfony/asset": "4.2.*",
            "symfony/console": "4.2.*",
            "symfony/dotenv": "4.2.*",
            "symfony/expression-language": "4.2.*",
            "symfony/flex": "^1.1",
            "symfony/form": "4.2.*",
            "symfony/framework-bundle": "4.2.*",
            "symfony/monolog-bundle": "^3.1",
            "symfony/orm-pack": "*",
            "symfony/process": "4.2.*",
            "symfony/security-bundle": "4.2.*",
            "symfony/serializer-pack": "*",
            "symfony/stopwatch": "4.2.*",
            "symfony/swiftmailer-bundle": "^3.1",
            "symfony/translation": "4.2.*",
            "symfony/twig-bundle": "4.2.*",
            "symfony/validator": "4.2.*",
            "symfony/web-link": "4.2.*",
            "symfony/webpack-encore-bundle": "^1.1",
            "symfony/yaml": "4.2.*"
        },
        "require-dev": {
            "symfony/debug-pack": "*",
            "symfony/maker-bundle": "^1.0",
            "symfony/profiler-pack": "*",
            "symfony/test-pack": "*",
            "symfony/web-server-bundle": "4.2.*"
        },
        "config": {
            "preferred-install": {
                "*": "dist"
            },
            "sort-packages": true
        },
        "autoload": {
            "psr-4": {
                "App\\": "src/"
            }
        },
        "autoload-dev": {
            "psr-4": {
                "App\\Tests\\": "tests/"
            }
        },
        "replace": {
            "paragonie/random_compat": "2.*",
            "symfony/polyfill-ctype": "*",
            "symfony/polyfill-iconv": "*",
            "symfony/polyfill-php71": "*",
            "symfony/polyfill-php70": "*",
            "symfony/polyfill-php56": "*"
        },
        "scripts": {
            "auto-scripts": {
                "cache:clear": "symfony-cmd",
                "assets:install %PUBLIC_DIR%": "symfony-cmd"
            },
            "post-install-cmd": [
                "@auto-scripts"
            ],
            "post-update-cmd": [
                "@auto-scripts"
            ]
        },
        "conflict": {
            "symfony/symfony": "*"
        },
        "extra": {
            "symfony": {
                "allow-contrib": false,
                "require": "4.2.*"
            }
        }
    }