2016-08-25 63 views
3

从我的CakePHP框架删除插件后CakePHP中删除插件后,以及与之相关的所有代码行我得到了我的vendor->composer文件夹中的autoload_static.phpgetInitializer功能的错误:“会员有私人访问错误”使用PhpStorm

public static function getInitializer(ClassLoader $loader) 
{ 
    return \Closure::bind(function() use ($loader) { 
     $loader->prefixLengthsPsr4 = ComposerStaticInit8835d383dd0f2dc92619594332e8ea7e::$prefixLengthsPsr4; 
     $loader->prefixDirsPsr4 = ComposerStaticInit8835d383dd0f2dc92619594332e8ea7e::$prefixDirsPsr4; 
     $loader->prefixesPsr0 = ComposerStaticInit8835d383dd0f2dc92619594332e8ea7e::$prefixesPsr0; 
     $loader->classMap = ComposerStaticInit8835d383dd0f2dc92619594332e8ea7e::$classMap; 

    }, null, ClassLoader::class); 
} 

所有的前缀和classMap标有下划线且错误消息指出:

“会员有私人通道”

我对PHP相当陌生,所以我的问题是如何处理这个错误?我认为只删除这4行代码是不安全的。

我已经尝试更新作曲家和无效的缓存/在PhpStorm重新启动。

编辑1

我当然不应该被删除的相关旧插件的代码行手动出作曲家的文件。

作曲家诊断: 检查composer.json:FAIL require.cakephp /插件的安装程序:绑定版本的限制(*)应避免 检查平台设置:FAIL OpenSSL库(0.9.8y)由PHP使用不支持TLSv1.2或TLSv1.1。 如果可能,您应该将OpenSSL升级到版本1.0.1或更高版本。 检查GIT中设置:行 检查HTTP连接到packagist:警告:访问packagist.org通过http其是不安全的协议。

由于该项目不算太旧,它可能是完全删除它并从头开始重新启动的最简单的方法,或者有一个简单的解决方案吗?

+0

你不应该在你的'vendor/composer'文件夹中担心代码,尤其是如果它在运行时不抛出错误的话。你绝对不应该手动编辑这些文件。附:您可以尝试在终端/控制台中运行'composer diagnose',看看作曲家是否会发现任何明显的问题。 – LazyOne

+0

你说得对,我不应该手动触摸这些文件。 已更新我的帖子与诊断。 我在那里得到了一些警告,但只有第一个警告可能与我的问题有关。 –

回答

5

这些行在技术上错误地突出显示为错误,甚至在您修改代码之前它们被突出显示为错误。

代码将特定的对象和作用域绑定到闭包,在这种情况下,它将绑定$loader对象(ClassLoader的实例)与ClassLoader::class作用域。这将导致闭包绑定到$loader对象,使得私有方法对其可见,因此在运行时不会出错。

所以问题就是这样的PhpStorm解析器是不够聪明(还)认识到这一点。

又见http://www.php.net/manual/en/closure.bind.php

至于你的其他作曲家的问题而言,供应商档案应始终安全删除,即vendor文件夹通常应该只包含通过作曲家安装的代码,这意味着万一你搞砸大,你应该能够简单地删除该文件夹vendor,修理你composer.json文件(并删除composer.lock文件)如果必要的话,然后就再次运行composer updatecomposer install命令。

+0

该目录是'vendor'而不是'vendors'。此外,我也遇到了这个问题。现在是2017年5月23日,最新的PHPStorm尚未解决此问题。 – UnixAgain