我正在做一个简短的文件包安装/更新脚本,将vendor
目录中的一些文件复制到我的文件中public
.
按照composer
网站的例子,但是当我执行它时,我收到一个错误:
致命错误:在第17行的S:\ Projects\composer-scripts\FileCopy.php中调用未定义的方法Composer\DependencyResolver\Operation\UpdateOperation :: getPackage()
代码是:
namespace composer-scipts; use Composer\Script\Event; class FileCopy { public static function postPackageInstall( Event $event ) { $packageName = $event->getOperation()->getPackage()->getName(); echo "$packageName\n"; } public static function postPackageUpdate( Event $event ) { $packageName = $event->getOperation()->getPackage()->getName(); echo "$packageName\n"; } }
任何人都可以建议吗?
在进一步测试之后,我已经确定了问题,这主要是由于两个不同的接口具有相同/相似的方法但具有不同的签名.因此我最终得到了:
public static function postPackageInstall( Event $event ) { $packageName = $event->getOperation()->getPackage()->getName(); if( $packageName == 'twbs/bootstrap' ) { self::copyFiles(); } } public static function postPackageUpdate( Event $event ) { $packageName = $event->getOperation()->getInitialPackage()->getName(); if( $packageName == 'twbs/bootstrap' ) { self::copyFiles(); } }
因此,postPackageInstall使用getPackage()
where-as postPackageUpdate使用getInitialPackage()
.