(Symfony 4) Как получить доступ к пакету Liip Imagine из кода PHP? - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу иметь возможность загрузить файл, создать из него 3 миниатюры и сохранить все на сервере S3.

Мой liip / LiipImagineBundle настроен следующим образом:

liip_imagine:

# configure resolvers
resolvers :

    # setup the default resolver
    default :

        # use the default web path
        web_path : ~

# your filter sets are defined here
filter_sets :

    # use the default cache configuration
    cache : ~

    # the name of the "filter set"
    my_thumb :

        # adjust the image quality to 75%
        quality : 75

        # list of transformations to apply (the "filters")
        filters :

            # create a thumbnail: set size to 120x90 and use the "outbound" mode
            # to crop the image when the size ratio of the input differs
            thumbnail  : { size : [120, 90], mode : outbound }

            # create a 2px black border: center the thumbnail on a black background
            # 4px larger to create a 2px border around the final image
            background : { size : [124, 94], position : center, color : '#000000' }

    # the name of the "filter set"
    thumb_square :

        # adjust the image quality to 75%
        quality : 75

        # list of transformations to apply (the "filters")
        filters :

            thumbnail :  { size : [300, 300], mode : outbound }

            # create a 2px black border: center the thumbnail on a black background
            # 4px larger to create a 2px border around the final image
            background : { size : [304, 304], position : center, color : '#000000' }

    # the name of the "filter set"
    thumb_rectangle_md :

        # adjust the image quality to 75%
        quality : 75

        # list of transformations to apply (the "filters")
        filters :

            thumbnail :  { size : [670, 400], mode : outbound }

            # create a 2px black border: center the thumbnail on a black background
            # 4px larger to create a 2px border around the final image
            background : { size : [674, 404], position : center, color : '#000000' }

    # the name of the "filter set"
    thumb_hd :

        # adjust the image quality to 75%
        quality : 75

        # list of transformations to apply (the "filters")
        filters :

            thumbnail :  { size : [1920, 1080], mode : outbound }

            # create a 2px black border: center the thumbnail on a black background
            # 4px larger to create a 2px border around the final image
            background : { size : [1924, 1084], position : center, color : '#000000' }

Это документация, на которую я смотрю: https://symfony.com/doc/2.0/bundles/LiipImagineBundle/basic-usage.html#runtime-options

Проблема, с которой я сталкиваюсь, заключается в том, что в документации просто сказано сделать это следующим образом:

$this['imagine']->filter('/relative/path/to/image.jpg', 'my_thumb')

Я получаю очевидную ошибку:

Cannot use object of type App\Controller\CreatorDashboard\PostsController as array

Я понимаю, почему я получаю ошибку, мне кажется, что я пытаюсь использовать мой класс контроллера в качестве массива.

Но как же тогда получить доступ к этому Liip / LiipImagineBundle в коде?Как мне получить «ручку» в Symfony 4?

Документация не ясна.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Пример, которым вы поделились, предназначен для использования шаблона без ветки.Если вы работаете в контроллере (предположение, основанное на сообщенной вами ошибке), вам нужно вывести Liip Cache Manager из контейнера.

/** @var CacheManager */
$imagineCacheManager = $this->get('liip_imagine.cache.manager'); // gets the service from the container

/** @var string */
$resolvedPath = $imagineCacheManager->getBrowserPath('/relative/path/to/image.jpg', 'my_thumb'); // resolves the stored path
0 голосов
/ 06 февраля 2019

Использование $this['imagine'] возможно только при использовании его в PHP-шаблоне.Для использования его в контроллере или службе вы должны использовать его как службу , либо получая его из контейнера (старый стиль использования службы), либо вставляя его вручную в класс (вфайл service.yaml с @liip_imagine.service.filter), или используя предоставленное им имя класса как службы, так же, как вы указали бы что-нибудь из Request objec, LoggerInterface или большинства других вещей в Symfony 3.3+ (из кода, который отображается для класса Liip\ImagineBundle\Service\FilterService).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...