В второй 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.
Примечание переводчика
Перевод не слово в слово, но смысл полностью передан. Так же в статье есть немного отсебятины, но как мне кажется, исключительно полезной.
Читайте так же: Объединенные формы и значения по умолчанию.