Form builder — entity field: «Class BundleAliasName:EntityClassName does not exist «

После обновления symfony-2.1 до версии из транка (symfony-2.1.0-beta4) отвалилась форма, в которой я использовал поле типа entity, где в качестве класса сущности указал не полный путь к классу, а через bundle alias:

$builder
            ->add(
            'field_name,
            'entity',
            array(
                 'class' => 'BundleAliasName:EntityClassName',
                 'multiple' => true
            )
        )
.....

Код выбрасывал исключение с сообщением

«Class BundleAliasName:EntityClassName does not exist»

Если прописать полный путь через пространство имен:

array(
    'class' => 'Full\Bundle\Path\Entity\EntityClassName',
)

то все работало хорошо.
Я открыл по этому поводу тикет и оказалось, что дело в версии Doctrine! Обновление до 2.3 решило проблему!
Огромное спасибо автору комментария на гитхабе Christophe Coevoet!

Как обновить проект с symfony-2.0 до symfony-2.1

Изначально я создавал свой проект на версии symfony 2.0 без vendors (standard edition). Все зависимости были установлены через

php bin/vendors install

Проект находился в git-репозитории.

Сразу оговорка — на момент написания статьи версия symfony 2.1 находилась в стадии бета-тестирования.
Тем не менее, основная тенденция уже была понятна и значительных изменений в АПИ не предвиделось.
Одно из ключевых нововведений в symfony 2.1 — использование Composer.
На вебсайте фреймворка Symfony можно найти описание процесса создания нового проекта, но нет информации как обновить существующий.

Итак, начнем-с.
Изначально я попытался просто скопировать содержимое файла composer.json, находящегося в директории фреймворка Symnofy на github, и выполнить команду

php composer.phar update

но там нет всех зависимостей, необходимых для нормального функционирования проекта.
Потому я просто решил создать новый «пустой» проект:

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

в отдельной ветке git-репозитория и потом перенести изменения из ветки с версией symfony-2.0.

Признаюсь, что пришлось порешать конфликты в файлах apps/AppKernel.php, файлах config.yml, security.yml и других.
Но это не было слишком сложным заданием.
Также необходимо проапгрейдить все дополнительные bundle, которые вы используете до соответствующих версий под symfony-2.1
К примеру, для FOSUserBundle (https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/index.md#installation)

{
    "require": {
        "friendsofsymfony/user-bundle": "*"
    }
}

и далее выполнить команду

php composer.phar update

Таже необходимо сделать изменения согласно этой инструкции в файлах форм и других местах. Тут уже дело персональное — смотря кто какие фичи использовал в своем проекте.

Таким образом, после всех проделанных манипуляций проект запустился успешно.
Из видимых изменений — добавили красивостей к web-debug-toolbar — появились тултипы со сводной информацией по каждому из разделов, которые показываются при наведении мышью на соответствующую иконку.

П.С.: Вот на днях встретил другой вариант апгрейда до symfony-2.1: http://buildthedamnproduct.com/upgrading-symfony-to-21-10415

Composer — minimum-stability по-умолчанию считается stable

Сегодня (4 июля 2012) Composer изменяет значение по-умолчанию свойства stability с dev на stable.
Подробнее здесь и здесь.
Что это значит? Что по-умолчанию Composer будет игнорировать пакеты RC, beta, alpha или dev.
Столкнулся я с этим, когда попытался проапдейтить зависимости проекта, использующего symfony-2.1.x, которая на момент написания заметки находится на стадии бета-тестирования.


rodush@debian:~/gtrs$ php composer.phar update
Updating dependencies
Your requirements could not be solved to an installable set of packages.

Вот что подсказал скрипт:

Potential causes:
— A typo in the package name
— The package is not available in a stable-enough version according to your minimum-stability setting
see https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion for more details.

Чтобы обойти данную проблему, самый простой способ — это в файл composer.json добавить свойство
"minimum-stability": "dev"