如何在脚本中获取包名?

时间:2014-01-31 19:39:23

标签: php composer-php

我正在做一个简短的包安装/更新脚本,将一些文件从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";
    }
}

有人可以提供建议吗?

1 个答案:

答案 0 :(得分:6)

在进一步测试之后,我已经确定了问题,这主要是由于两个不同的接口具有相同/相似的方法但具有不同的签名。因此我最终得到了:

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()