Путаница с версией пакета 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.