<commit_before>Сущность-изображение
====================

## Описание

Сущность-изображение - сущность, класс которой наследуется от базового "Darvin\ImageBundle\Entity\Image\AbstractImage".
 Все они хранятся в одной таблице базы данных, что позволяет работать с ними, как с одной сущностью. В частности это
 реализовано в менеджере изображений панели администрирования (при подключенном "darvinstudio/darvin-admin-bundle").
 Каждому классу соответствует определенная группа размеров изображений. Также существуют глобальные группы, размеры которых
 применимы ко всем изображениям. При подключенной панели администрирования размеры группы можно редактировать в разделе
 настроек. Эти размеры можно переопределить для конкретного изображения в менеджере изображений, причем они будут
 приоритетнее размеров группы. При применении к изображению какого-либо фильтра указывается один из размеров группы или
 конкретного изображения.

## Twig

К сущности можно применить следующие фильтры Twig:

- **image_original** - возвращает URL оригинального изображения;
- **image_crop** - обрезает изображение до нужного размера и возвращает URL результата;
- **image_resize** - пропорционально масштабирует изображение до нужного размера и возвращает URL результата.

Также существует функция Twig, проверяющая существование файла изображения - "image_exists()".

## Создание

**1. Если для сущности требуется новая группа размеров, создаем конфигурацию изображений.**

Класс конфигурации изображений должен наследоваться от класса "Darvin\ConfigBundle\Configuration\AbstractConfiguration"
 и реализовывать интерфейс "Darvin\ImageBundle\Configuration\ImageConfigurationInterface".

Параметр конфигурации представляет собой массив объектов "Darvin\ImageBundle\Size\Size". Если предполагается
 редактирование конфигурации в панели администрирования, можно воспользоваться существующей формой "darvin_image_size",
 указав ее в опциях модели параметра.

Пример реализации:

```php
use Darvin\ConfigBundle\Configuration\AbstractConfiguration;
use Darvin\ConfigBundle\Parameter\ParameterModel;
use Darvin\ImageBundle\Configuration\ImageConfigurationInterface;
use Darvin\ImageBundle\Size\Size;

class ImageConfiguration extends AbstractConfiguration implements ImageConfigurationInterface
{
    public function getModel()
    {
        return array(
            new ParameterModel(
                'image_sizes',
                ParameterModel::TYPE_ARRAY,
                array(
                    'common' => new Size('common', 256, 256),
                ),
                array(
                    'form' => array(
                        'options' => array(
                            'type' => 'darvin_image_size',
                        ),
                    ),
                )
            ),
        );
    }

    public function getName()
    {
        return 'app_image';
    }

    public function getImageSizes()
    {
        return $this->__call(__FUNCTION__);
    }

    public function isImageSizesGlobal()
    {
        return false;
    }

    public function getImageSizeGroupName()
    {
        return 'app';
    }
```

- метод "getName()" должен возвращать название конфигурации, уникальное в рамках всех конфигураций;

- "getImageSizes()" должен проксировать вызов на магический метод, соответствующий названию параметра (в примере параметр
 называется "image_sizes", поэтому метод вызывает "getImageSizes()", т. е. магический метод с названием, в данном случае
 равным значению константы "\__FUNCTION\__");

- метод "isImageSizesGlobal()" определяет, является ли группа размеров изображений глобальной;

- "getImageSizeGroupName()" возвращает название группы размеров изображений.

**2. Создаем класс сущности, который наследуется от "Darvin\ImageBundle\Entity\Image\AbstractImage":**

```php
use Darvin\ImageBundle\Entity\Image\AbstractImage;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Image extends AbstractImage
{
    public function getSizeGroupName()
    {
        return 'app';
    }
}
```

Метод "getSizeGroupName()" должен возвращать название группы размеров.<commit_msg>Update image entity doc.<commit_after>Сущность-изображение
====================

## Описание

Сущность-изображение - сущность, класс которой наследуется от базового "Darvin\ImageBundle\Entity\Image\AbstractImage".
 Все они хранятся в одной таблице базы данных, что позволяет работать с ними, как с одной сущностью. В частности это
 реализовано в менеджере изображений панели администрирования (при подключенном "darvinstudio/darvin-admin-bundle").
 Каждому классу соответствует определенная группа размеров изображений. Также существуют глобальные группы, размеры которых
 применимы ко всем изображениям. При подключенной панели администрирования размеры группы можно редактировать в разделе
 настроек. Эти размеры можно переопределить для конкретного изображения в менеджере изображений, причем они будут
 приоритетнее размеров группы. При применении к изображению какого-либо фильтра указывается один из размеров группы или
 конкретного изображения.

## Twig

К сущности можно применить следующие фильтры Twig:

- **image_original** - возвращает URL оригинального изображения;
- **image_crop** - обрезает изображение до нужного размера и возвращает URL результата;
- **image_resize** - пропорционально масштабирует изображение до нужного размера и возвращает URL результата.

Также существует функция Twig, проверяющая существование файла изображения - "image_exists()".

## Создание

**1. Если для сущности требуется новая группа размеров, создаем конфигурацию изображений.**

Класс конфигурации изображений должен наследоваться от класса "Darvin\ConfigBundle\Configuration\AbstractConfiguration"
 и реализовывать интерфейс "Darvin\ImageBundle\Configuration\ImageConfigurationInterface".

Параметр конфигурации представляет собой массив объектов "Darvin\ImageBundle\Size\Size". Если предполагается
 редактирование конфигурации в панели администрирования, можно воспользоваться существующей формой "darvin_image_size",
 указав ее в опциях модели параметра.

Пример реализации:

```php
use Darvin\ConfigBundle\Configuration\AbstractConfiguration;
use Darvin\ConfigBundle\Parameter\ParameterModel;
use Darvin\ImageBundle\Configuration\ImageConfigurationInterface;
use Darvin\ImageBundle\Size\Size;

class ImageConfiguration extends AbstractConfiguration implements ImageConfigurationInterface
{
    public function getModel()
    {
        return array(
            new ParameterModel(
                'image_sizes',
                ParameterModel::TYPE_ARRAY,
                array(
                    'common' => new Size('common', 256, 256),
                ),
                array(
                    'form' => array(
                        'options' => array(
                            'type' => 'darvin_image_size',
                        ),
                    ),
                )
            ),
        );
    }

    public function getName()
    {
        return 'app_image';
    }

    public function getImageSizes()
    {
        return $this->__call(__FUNCTION__);
    }

    public function isImageSizesGlobal()
    {
        return false;
    }

    public function getImageSizeGroupName()
    {
        return 'app';
    }
```

- метод "getName()" должен возвращать название конфигурации, уникальное в рамках всех конфигураций;

- "getImageSizes()" должен проксировать вызов на магический метод, соответствующий названию параметра (в примере параметр
 называется "image_sizes", поэтому метод вызывает "getImageSizes()", т. е. магический метод с названием, в данном случае
 равным значению константы "\__FUNCTION\__");

- метод "isImageSizesGlobal()" определяет, является ли группа размеров изображений глобальной;

- "getImageSizeGroupName()" возвращает название группы размеров изображений.

Объявляем класс сервисом и помечаем его тегами "darvin_image.configuration" и "darvin_config.configuration".

Последний тег имеет один аргумент:

- **position** *(опционально)* - позиция конфигурации в форме редактирования в панели администрирования.

Пример определения сервиса:

```yaml
parameters:
    app.configuration.image.class: App\Configuration\ImageConfiguration

services:
    app.configuration.image:
        class: %app.configuration.image.class%
        tags:
            - { name: darvin_config.configuration }
            - { name: darvin_image.configuration }
```

**2. Создаем класс сущности, который наследуется от "Darvin\ImageBundle\Entity\Image\AbstractImage":**

```php
use Darvin\ImageBundle\Entity\Image\AbstractImage;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Image extends AbstractImage
{
    public function getSizeGroupName()
    {
        return 'app';
    }
}
```

Метод "getSizeGroupName()" должен возвращать название группы размеров.
{'fraction_non_alphanumeric': 0.07793533749290982, 'fraction_numerical': 0.0018150879183210437, 'mean_word_length': 3.642443391258557, 'pattern_counts': {'":': 2, '<': 3, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '943315', 'n_tokens_mistral': 2873, 'n_tokens_neox': 3388, 'n_words': 719}