Как стать автором
Обновить

Комментарии 12

Интересно.
Хотя использование нового языка разметки через аннотации не нравится.
Непонятно, что дает эта возможность.

А ещё странное решение с Table классами. Их реализация в Propel 1.5 намного лучше, было бы хорошо, если б Доктрин вместо того, чтобы убирать их вот так, переняли что-то у пропела.

На счет языка описания моделей так теперь дается выбор: нравится Yaml пожалуйста, хотите использовать Xml — нет проблем, ну а если не хотите плодить конфиги, то можно сразу в классе самой модели все описать.

На счет *Table классов решение может кому-то покажется странным, но решение интересное надо просто в нем разобраться. Теперь не будет плодиться по несколько классов на одну модель, достаточно одного класса. При этом можно создать свой кастомный класс репозитория, который в общем будет выполнять ту же роль, что делали классы *Table, к тому же вы можете свой кастомный класс репозитория, который будет использоваться для нескольких моделей.
В общем если интересно, то очень рекомендую почитать документацию на Doctrine 2, это интересно.
Надо понимать, что это не АктивРекорд, как в пропеле том же, а набор совсем других паттернов (Доменная модель, репозиторий и т.д.).
А на счет аннотаций, это дело вкуса, но иногда удобнее, чтобы метаинформация была вместе с классом, а не где-то отдельно. Кроме того Аннотации и их аналоги уже плотно закрепились в java, c# и других языках, и лишним этот инструмент назвать нельзя.
>> Из кода думаю все понятно, есть 3 правила, вывод списка, добавление и удаление.
А в коде: вывод списка (link_list), добавление (add_link) и чтение (read_link).

Достаточно интересный пример для начала. Скорее бы уже наметилась какая-то стабильность в версиях библиотек, чтоб можно было начать полномасштабное изучение.
Да, «чтение», а вернее «прочитано» — это у меня вместо удаления, то есть если ссылку прочитали, то она больше не нужна в списке и поэтому удаляется.
Хотя наверное это запутывает :)
Ну, что касается Доктрины, то в эти выходные запланирована первая бета, вторая на конец мая. Так что вполне можно начинать изучать.
Спасибо за пример, все здорово. Однако немного напрягает постоянно писать длинные пространства имен («Application\ReadlaterBundle\Entities\LinkRepository»), как в запросаз, так и в файлах.
Кстати да, простенький автолоадер ой как бы пригодился :)
Автолоадер там есть Doctrine\Common\Classloader, например.
Ну длинные имена это только, когда используется как строка. В коде есть namespace и use.
Кроме того, никто не мешает сделать что-то типа
[code]
use Application\ReadlaterBundle\Entities\LinkRepository;

//some code…

$linkRep = new LinkRepository();
$link = $em->find(get_class($linkRep), $id);
[/code]
Доктрина, же это «копия» Java'вского Hibernate, там это чуть короче записывается =)
Теперь многое устарело, например:
$em = $this->container->getDoctrine_ORM_EntityManagerService();

теперь должно быть как-то так:
$em = $this->container->get('doctrine.orm.entity_manager');


Вместо такого в роутинге:
link_list:
    pattern: /
    defaults: { _bundle: ReadlaterBundle, _controller: Readlater, _action: index }
можно писать так:
link_list:
  defaults:
    _controller: "ReadlaterBundle:Readlater:index"
  requirements:
    _method: "GET"

Но Бандлы должны предоставлять дефолтную конфигурацию в XML.

PS: копаться в чужих исходниках можно "оттуда"
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации