有没有办法指定作曲家的安装位置? (PSR-4)

时间:2014-07-25 12:36:55

标签: composer-php

我正在使用composer来安装我的软件包,而我正在尝试在非常具体的位置安装我的软件包。

简而言之,我的包中包含以下名称空间前缀:

TeamXyz / AbcBundle

TeamXyz / AbcComponent

现在,由于我们有大量的组件和捆绑包,我们希望将它们分成2个文件夹,如下所示:

供应商/ TeamXyz /分量/ AbcComponent

供应商/ TeamXyz /捆绑/ AbcBundle

以前工作得很好但是使用PSR-4我似乎无法控制应该安装软件包的位置。我想知道我是否必须为作曲家编写自定义包安装程序才能做到这一点?

1 个答案:

答案 0 :(得分:0)

好的,我发现了一种方法,只需编写我自己的自定义软件包安装程序即可。

<?php
/**
 * Created by myTeam.
 * Date: 6/11/14
 * Time: 1:43 PM
 * Question? Come to our website at http://my.com
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace My\PackageInstaller;

use Composer\Package\PackageInterface;
use Composer\Installer\LibraryInstaller;

class BundleInstaller extends LibraryInstaller
{
    /**
     * {@inheritDoc}
     */
    public function getPackageBasePath(PackageInterface $package)
    {
        $prefix = substr($package->getPrettyName(), 0, 3);
        if ('my/' !== $prefix) {
            throw new \InvalidArgumentException(
                'Unable to install package, my package '
                . 'should always start their package name with '
                . '"my/"'
            );
        }

        $packageName = str_replace('my/', '', $package->getPrettyName());

        return $this->vendorDir . '/my/Bundle/' . $packageName;
    }

    /**
     * {@inheritDoc}
     */
    public function supports($packageType)
    {
        return 'my-bundle' === $packageType;
    }
}

是的,我理解你们所抱怨的一切,但工具是一种工具,一个人可以使用它来满足他的需要。至少那是我的信念:)。也许我在这里做了一些愚蠢的事情,因为没有使用Composer的确切方式。但是,嘿,如果我们使用所有工具的确切方式,那么首先会发生许多创新:)