В второй Symfony, мы можем присоеденить бихейверы (behaviours) к нашим моделям используя расширения от Doctrine. Один пакет (bundle), StofDoctrineExtensionsBundle, даёт возможность использовать следующие бихейверы: Sluggable, Translatable, Timestampable, Loggable и Tree.
Вышеописанные расширения позволяет превратить обычные ссылки в удобочитаемые (sluggable), осуществлять простую поддержку интернационализации (translatable), организовывать контроль версий (loggable), создавать и автоматически заполнять дату создания и обновления сущности (timestampable), и организовывать древовидную структуру хранения данных (tree).
В первую очередь необходимо установить расширения Doctrine и её пакет (bundle) для Symfony. Добавьте следующие строки в файл deps:
Инсталляция
Если с установкой вендоров возникнут какие-либо проблемы, то просто удалите всё из директории vendors и повторите попытку.
Теперь добавьте следующие строки в app/autoload.php:
Так же добавьте установленный пакет в app/AppKernel.php:
После этого, пропишите в конфигурацию app/config/config.yml (добавление слушателей, дополнительная информация о доступных слушателях StofDoctrineExtensions):
Теперь, не забудьте почистить кеш:
Расмотрим на примере использование Slugable и Timestampable.
Остальное вам Doctrine сгенерирует сама:
Так же можете посмотреть и другие примеры использования Sluggable, Translatable, Timestampable, Loggable и Tree.
Перевод не слово в слово, но смысл полностью передан. Так же в статье есть немного отсебятины, но как мне кажется, исключительно полезной.
Читайте так же: Объединенные формы и значения по умолчанию.
Вышеописанные расширения позволяет превратить обычные ссылки в удобочитаемые (sluggable), осуществлять простую поддержку интернационализации (translatable), организовывать контроль версий (loggable), создавать и автоматически заполнять дату создания и обновления сущности (timestampable), и организовывать древовидную структуру хранения данных (tree).
Установка
В первую очередь необходимо установить расширения Doctrine и её пакет (bundle) для Symfony. Добавьте следующие строки в файл deps:
[gedmo-doctrine-extensions] git=git://github.com/l3pp4rd/DoctrineExtensions.git [DoctrineExtensionsBundle] git=git://github.com/stof/StofDoctrineExtensionsBundle.git target=/bundles/Stof/DoctrineExtensionsBundle
Инсталляция
$ bin/vendors install
Если с установкой вендоров возникнут какие-либо проблемы, то просто удалите всё из директории vendors и повторите попытку.
Теперь добавьте следующие строки в app/autoload.php:
$loader->registerNamespaces(array( // ... 'Stof' => __DIR__.'/../vendor/bundles', 'Gedmo' => __DIR__.'/../vendor/gedmo-doctrine-extensions/lib', // ... ));
Так же добавьте установленный пакет в app/AppKernel.php:
public function registerBundles() { return array( // ... new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(), // ... ); }
После этого, пропишите в конфигурацию app/config/config.yml (добавление слушателей, дополнительная информация о доступных слушателях StofDoctrineExtensions):
#... doctrine: orm: auto_mapping: true stof_doctrine_extensions: orm: default: sluggable: true timestampable: true #...
Теперь, не забудьте почистить кеш:
$ php app/console cache:clear
Использование
Расмотрим на примере использование Slugable и Timestampable.
<?php namespace Entity; use Gedmo\Mapping\Annotation as Gedmo; // Подключение Gedmo use Doctrine\ORM\Mapping as ORM; /** * @ORM\Table(name="article") * @ORM\Entity */ class Article { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(length=64) */ private $title; /** * @Gedmo\Slug(fields={"title"}) * @ORM\Column(length=128, unique=true) */ private $slug; /** * @var datetime $created * * @Gedmo\Timestampable(on="create") * @ORM\Column(type="date") */ private $created; /** * @var datetime $updated * * @ORM\Column(type="datetime") * @Gedmo\Timestampable(on="update") */ private $updated;
Остальное вам Doctrine сгенерирует сама:
$ app/console doctrine:generate:entities
Так же можете посмотреть и другие примеры использования Sluggable, Translatable, Timestampable, Loggable и Tree.
Примечание переводчика
Перевод не слово в слово, но смысл полностью передан. Так же в статье есть немного отсебятины, но как мне кажется, исключительно полезной.
Читайте так же: Объединенные формы и значения по умолчанию.