Php 如何在脚本中获取包名?

Php 如何在脚本中获取包名?,php,composer-php,Php,Composer Php,我正在做一个简短的包后安装/更新脚本,将一些文件从vendor目录复制到我的public目录中 按照composer站点的示例,但是当我执行它时,我得到一个错误: 致命错误:在第17行的S:\Projects\Composer scripts\FileCopy.php中调用未定义的方法Composer\DependencyResolver\Operation\UpdateOperation::getPackage() 代码是: namespace composer-scipts; use Co

我正在做一个简短的包后安装/更新脚本,将一些文件从
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()
,而postPackageUpdate使用
getInitialPackage()

@Ant不确定您的意思是什么?这是一个按照定义脚本#一节中的查看来理解我的意思的脚本。
composer.json
的片段是:“psr-4”:{“composer scripts”:“vendor/wip/composer scripts”},“scripts”:{“post package install”:[“FileCopy::postPackageInstall”],“post package update”:[“FileCopy::postPackageUpdate”]}看到这个了吗-好的,改成getInitialPackage()似乎已经成功了,谢谢你的帮助!