Путаница с версией пакета symfony2.1, для меню symfony и sonata admin / knp

Я хочу использовать symfony2.1 для нового проекта. Я пытаюсь установить Symfony2 с композитором. Но было несколько ошибок / проблем, и поэтому у меня есть вопросы к каждой проблеме, выделенные жирным шрифтом. Иногда я не знаю, правильно ли я это делаю.

Я хочу использовать стабильную версию, поэтому я выбрал версию 2.1.0, а не dev / master.

php composer.phar create-project symfony/framework-standard-edition symfony v2.1.0

результат был такой:

Installing symfony/framework-standard-edition (v2.1.0)
  - Installing symfony/framework-standard-edition (v2.1.0)
    Downloading: 100%

    Created project in symfony
    Loading composer repositories with package information
    Installing dependencies from lock file
    Your requirements could not be resolved to an installable set of packages.

      Problem 1
        - Installation request for symfony/symfony == 2.1.9999999.9999999-dev -> satisfiable by                                               symfony/symfony 2.1.x-dev.
        - Can only install one of: symfony/symfony dev-master, symfony/symfony 2.1.x-dev.
        - Installation request for symfony/symfony == 9999999-dev -> satisfiable by symfony/sym                                              fony dev-master.

Так что я делаю php composer.phar update и зависимости были установлены без ошибок.

Но я заметил, что большинство пакетов не имеют стабильной версии. Например, doctrine/common (2.3.x-dev), вот полный список

Loading composer repositories with package information
Updating dependencies
  - Installing doctrine/common (2.3.x-dev 605b1b8)
    Cloning 605b1b8b5a7bc8daf9111fb35483e5708e30de35

  - Installing doctrine/dbal (2.3.x-dev 239630b)
    Cloning 239630b61f03f39d198441eced1bfffb7b0e61d1

  - Installing twig/twig (dev-master 68b8c46)
    Cloning 68b8c4619c5bbe82bd345fe56070dec8c356610a

  - Installing symfony/symfony (2.1.x-dev e7059b4)
    Cloning e7059b44c78ca8e1e892adb4d93b5a482f4eb9b3

  - Installing swiftmailer/swiftmailer (dev-master e12e4ef)
    Cloning e12e4ef3a9d6dd60fb734a01984a6e6627aea764

  - Installing doctrine/orm (2.3.x-dev 4d9f24b)
    Cloning 4d9f24b2eef3af3a3e76c773994c19bbb0706f88

  - Installing doctrine/doctrine-bundle (dev-master v1.0.0)
    Cloning v1.0.0

  - Installing twig/extensions (dev-master f904575)
    Cloning f904575642b1213db69b4a98f08397e722ba1cae

  - Installing kriswallsmith/assetic (dev-master dfbb776)
    Cloning dfbb776288baf9319d1693195af2cb6e00729901

  - Installing symfony/assetic-bundle (dev-master 4e7e8a0)
    Cloning 4e7e8a039fa19434f04558473adbb201118af942

  - Installing symfony/swiftmailer-bundle (dev-master d2eae93)
    Cloning d2eae9385c029cbac031a90e6d2abc74b889a562

  - Installing monolog/monolog (dev-master a929570)
    Cloning a929570bb7688b39fefe4106f0ecf0ac35f37647

  - Installing symfony/monolog-bundle (dev-master v2.1.0-RC2)
    Cloning v2.1.0-RC2

  - Installing sensio/distribution-bundle (dev-master 9892129)
    Cloning 98921298951598e8707258cba2b6180b96faa91c

  - Installing sensio/framework-extra-bundle (dev-master v2.1.0)
    Cloning v2.1.0

  - Installing sensio/generator-bundle (dev-master v2.1.0-RC2)
    Cloning v2.1.0-RC2

  - Installing jms/metadata (1.1.1)
    Downloading: 100%

  - Installing jms/cg (1.0.0)
    Downloading: 100%

  - Installing jms/aop-bundle (1.0.0)
    Downloading: 100%

  - Installing jms/di-extra-bundle (1.1.x-dev af21952)
    Cloning af219527024c584d7311aa855d7522429c5bdb67

  - Installing jms/security-extra-bundle (1.2.x-dev 9ab6ace)
    Cloning 9ab6aceda50fc7a2b07d741ba4b3f0695508afcb

1а) Это правильно? Или есть другое решение? Я имею в виду использовать пакеты, которые стабильны и не в режиме разработки

На следующий день я снова делаю обновление композитора и заметил, что некоторые библиотеки были обновлены: все библиотеки для ветки dev-master, в которой есть новые изменения за последний день.
1b) Поэтому я должен регулярно обновлять композитор при разработке приложения, объединять новые исправления и т. Д.?

$ php composer.phar update
Loading composer repositories with package information
Updating dependencies
  - Updating swiftmailer/swiftmailer dev-master (e12e4e => c97353)
    Checking out c97353b1ebffe25a224146f69d17efe24c093def

  - Updating monolog/monolog dev-master (a92957 => e5bf7b)
    Checking out e5bf7ba5d1df622b68d004b3c0277bc94286e1b7

  - Updating friendsofsymfony/user-bundle dev-master (24edb2 => 878b7c)
    Checking out 878b7c8320159fb09e8e94d446c498b00142b206

  - Updating sonata-project/notification-bundle dev-master (5e7b50 => 9cef7d)
    Checking out 9cef7d224f224b4e4327f200f9bd57b798d4ab0a

  - Updating knplabs/gaufrette dev-master (861110 => 5ac439)
    Checking out 5ac439cd46eb461043e6bb73dae717528f674a57

  - Updating sonata-project/media-bundle dev-master (d04a61 => 233511)
    Checking out 2335114dab6ea9680d174df157f5a7b4551a54dc

Поскольку я не нашел другого решения, я продолжаю и устанавливаю FOS UserBundle, добавив эту строку "friendsofsymfony/user-bundle": "*" композитору.json. Я делаю весь процесс установки, и он работает отлично.

Затем я начинаю устанавливать Sonata AdminBundle, добавив "sonata-project/admin-bundle": "dev-master" композитору.json. Я выбрал версию dev-master, потому что на http://packagist.org/packages/sonata-project/admin-bundle я обнаружил, что версия 2.0.x-dev не для symfony2.1.
Кроме того, AdminBundle имеет зависимость от knplabs/knp-menu-bundle: 1.1.*
На http://packagist.org/packages/knplabs/knp-menu-bundle я вижу для версии v1.1.0, что есть другая зависимость для knplabs/knp-menu: 1.1.*
Затем на http://packagist.org/packages/knplabs/knp-menu я нашел 4 версии, которые начинаются с 1.1:

  • 1.1.x-DEV
  • v1.1.2
  • v1.1.1
  • v1.1.0

2а) Есть ли разница, если есть ведущий v перед номером версии?

2b) Какая версия будет использоваться из этих четырех, когда зависимость равна 1,1*?

Когда я начинаю загружать админский пакет, я вижу результат:

$ php composer.phar update
Loading composer repositories with package information
Updating dependencies
  - Installing knplabs/knp-menu (1.1.x-dev v1.1.2)
    Cloning v1.1.2

  - Installing knplabs/knp-menu-bundle (v1.1.0)
    Downloading: 100%

  - Installing sonata-project/admin-bundle (dev-master 20d5e4a)
    Cloning 20d5e4a659bddb5fc0bcfc4755643dbc4e3f7ec1

Я установил еще несколько пакетов сонаты (doctrine-orm-admin-bundle, user-bundle, page-bundle, media-bundle) и произошла ошибка

  - Installing imagine/imagine (v0.3.0)
    Downloading: 100%



  [ErrorException]
  rename(C:\wamp\www\symfony\vendor/imagine/Imagine/avalanche123-Imagine-a23b4f5,afcc946468d0cf073686fe7e1ae19eb2): access denied
   (code: 5)

3) но когда я повторяю шаг, ошибка исчезла. Это нормально?

$ php composer.phar update
Loading composer repositories with package information
Updating dependencies
  - Installing imagine/imagine (v0.3.0)
    Downloading: 100%

  - Installing knplabs/gaufrette (dev-master 8611109)
    Cloning 8611109aeb0bd43fd88485c20fec7fc85b021b84

  - Installing sonata-project/media-bundle (dev-master d04a617)
    Cloning d04a617d81383a6e1ba65ee99c2ea4379e7daf4e

Затем я продолжил настройку sonata admin bundle. После того как я добавил объект Post и PostAdmin и настроил для него службу (кстати, конфигурация службы немного плохая), я заметил, что забыл установить Меню Knp (ошибка была: non-existent service "knp_menu.factory)

Я захожу на https://github.com/KnpLabs/Knp MenuBundle/blob/master/Resources/doc/index.md и вижу подробные инструкции по его установке. Попки там были устаревшие. Так как smyfony2.1. $loader в autoload.php не имеет registerNamespaces функция больше, потому что это не класс UniversalClassLoader, а загрузчик классов композитора. Поэтому я должен создать собственный экземпляр UniversalClassLoader. И пути совершенно разные, теперь есть родитель knplabs каталог и подкаталог также изменились.

use Symfony\Component\ClassLoader\UniversalClassLoader;
use Doctrine\Common\Annotations\AnnotationRegistry;

$loader = require __DIR__.'/../vendor/autoload.php';

// intl
if (!function_exists('intl_get_error_code')) {
    require_once __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';

    $loader->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
}

$universalLoader = new UniversalClassLoader();
$universalLoader->registerNamespaces(array(
        'Knp\Menu' => __DIR__.'../vendor/knplabs/knp-menu/src',
        'Knp\Bundle' => __DIR__.'/../vendor/knplabs/knp-menu-bundle'
));
$universalLoader->register();


AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

return $loader;

4) Почему конструкция установки Knp Menu устарела и почему на github есть только основная ветка и ничего для версий, существующих на http://packagist.org/?

Я новичок в symfony2 и composer, и иногда очень трудно понять все это.

1 ответ

Решение

1а) Это правильно? Или есть другое решение? Я имею в виду использовать пакеты, которые стабильны и не в режиме разработки

Symfony21 стандартно выберет для вас лучшую версию. Вы можете увидеть эти версии в composer.json файл из symfony/framework-standard-edition пакет (symfony/symfony-standard на github).

Как вы можете видеть, он использует 2.1.* версии, а не dev-master версии, но потому что последняя версия пакета начинается с 2.1 это загрузит dev-master, Позже, с symfony2.2 он не должен использовать dev-master, но последний 2.1 версия пакета.

Если вы хотите статическую версию, вы можете просто заменить * с Subversion, которую вы хотите, но я не рекомендую это, потому что вы не получаете исправления ошибок.

1b) Поэтому я должен регулярно обновлять композитор при разработке приложения, объединять новые исправления и т. Д.?

Да, это хорошо, чтобы обновлять ваши зависимости время от времени. Например, если вы думаете, что обнаружили ошибку или если вы нажмете на нее production,

2a) Есть ли разница, если перед номером версии стоит ведущий v?

Как мы можем прочитать в документации по пакетам (в разделе Управление версиями пакетов), нет никакой разницы. Вы можете использовать их оба, и если вы используете 2.1.4 это будет искать 2.1.4 версия или v2.1.4,

2b) Какая версия будет использоваться из этих четырех, когда зависимость равна 1.1.*?

Последний 1.1 подрывная деятельность. Например, если вы foobar Пакет имеет следующие версии: 1.1.1, 1.1.2 .. 1.1.6. И вам требуется 1.1.* последний (1.1.6) будет установлен.

3) но когда я повторяю шаг, ошибка исчезла. Это нормально?

Похоже, что CLI не может получить доступ к файлу, возможно, вы открыли его в программе. Когда вы попробовали это во второй раз, у него был доступ.

4) Почему конструкция установки KnpMenu устарела и почему на github есть только основная ветка и ничего для версий, существующих на http://packagist.org/?

Первый вопрос: я не знаю, почему документация устарела. Вы должны пойти в vendor/composer/autoload_namespaces.php файл и поместите туда пространства имен, тогда оно должно работать. Или, что лучше, добавьте эти пространства имен в require установка в composer.json файл. См. Документацию автозагрузки композитора для получения дополнительной информации.

Второй вопрос: он также использует теги на github.

Другие вопросы по тегам