Pull to refresh

Sluggable, Timestampable и так далее в Symfony 2

Reading time2 min
Views12K
Original author: kiwwito.com
В второй Symfony, мы можем присоеденить бихейверы (behaviours) к нашим моделям используя расширения от Doctrine. Один пакет (bundle), StofDoctrineExtensionsBundle, даёт возможность использовать следующие бихейверы: 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.

Примечание переводчика


Перевод не слово в слово, но смысл полностью передан. Так же в статье есть немного отсебятины, но как мне кажется, исключительно полезной.

Читайте так же: Объединенные формы и значения по умолчанию.
Tags:
Hubs:
Total votes 19: ↑17 and ↓2+15
Comments4

Articles