Как правильно объявить зависимость от другого пакета внутри пакета?

Я пытаюсь использовать Bundle внутри Bundle, но почему-то это не удается.

"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/myname/mybundle"
    }
],
"require": {
    "php": ">=5.3.3",
    "symfony/symfony": "2.1.*",
    (...)
    "myname/mybundle": "*"
},

это, кажется, работает до сих пор. Но я не могу понять, как объявить другую зависимость в «myname/mybundle».

Я пробовал следующее в файле composer.json myname/mybundle, но ни один из них не работал :(

"repositories": [
    {
        "type": "vcs",
        "url": "url": "https://github.com/drymek/PheanstalkBundle"
    }
],
"require": {
    (...)
    "drymek/PheanstalkBundle": "dev-master"
}

а также

"repositories": [
    {
        "type": "package",
        "package": {
            "name": "drymek/PheanstalkBundle",
            "version": "dev-master",
            "source": {
                "url": "https://github.com/drymek/PheanstalkBundle.git",
                "type": "git",
                "reference": "master"
            }
        }
    }
],
"require": {
    (...)
    "drymek/PheanstalkBundle": "dev-master"
}

когда я ром composer.phar update все, что я получаю

- myname/mybundle dev-master requires drymek/pheanstalkbundle dev-master -> no matching package found.


person Senči    schedule 14.09.2012    source источник
comment
Второй репозиторий находится по адресу github.com/digitalpioneers/pheanstalk или по адресу github.com/drymek/PheanstalkBundle ?   -  person Carlos Granados    schedule 14.09.2012
comment
упс, простите, drymek/PheanstalkBundle... сейчас исправил ;)   -  person Senči    schedule 14.09.2012


Ответы (2)


Хорошо, я нашел ответ здесь< /а>

В нем указано: Repositories are not resolved recursively. You can only add them to your main composer.json. Repository declarations of dependencies' composer.jsons are ignored.

Это очень плохо... но теперь, по крайней мере, я знаю, куда поместить свою зависимость (в корневом файле composer.json)

person Senči    schedule 14.09.2012
comment
Это означает, что composer намного не намного лучше старого файла deps. Интересно, это плохая идея - решить это рекурсивно, или они просто еще не реализовали это. - person Jens; 26.10.2012
comment
По крайней мере, вы можете рассмотреть файл composer.json вашего пакета. Я столкнулся с действительно странной проблемой в аналогичном сценарии. Мои проекты должны получить некоторые пользовательские zip-пакеты, в этих пакетах файл composer.json определяет другие требования. Репозитории этих требований объявлены в корневом файле composer.json. Дело в том, что после того, как zip-файл загружен, распакован и помещен в каталог поставщика, composer полностью игнорирует его composer.json, в котором определены требования к пакету... Есть идеи? - person Giuliano Iacobelli; 22.02.2013
comment
В настоящее время композитор проверяет необходимые зависимости в файле пакетов composer.json. - person BigJ; 24.10.2016
comment
@BigJ: Согласно часто задаваемым вопросам по Composer (как указано в ответе), это неверно для зависимостей в репозиториях VCS. - person Icarus; 15.08.2017

Чтобы узнать о зависимостях пакетов, см. мою библиотеку https://github.com/AshleyDawson/MultiBundle. Например, расширьте MultiBundle и реализуйте метод getBundles() следующим образом:

<?php

namespace Acme\MyBundle;

use AshleyDawson\MultiBundle\AbstractMultiBundle;

class AcmeMyBundle extends AbstractMultiBundle
{
     /**
      * Optional: define a protected constructor to stop instantiation     outside of registerInto()
      */
     protected function __construct()
     {

     }

    /**
     * Define bundles that this bundle depends on
     */
    protected static function getBundles()
    {
        return array(
           new Acme\FooBundle\AcmeFooBundle(),
           new Acme\BarBundle\AcmeBarBundle(),
        );
    }
}

А затем в AppKernel зарегистрируйте пакет и его зависимости:

// app/AppKernel.php

// ...

class AppKernel extends Kernel
{
    // ...

    public function registerBundles()
    {
        $bundles = array(
            // ...,
        );

        // Register my bundle and its dependencies
        \Acme\MyBundle\AcmeMyBundle::registerInto($bundles);

        // ...
    }
}
person Ashley Dawson    schedule 09.05.2015