Symfony 4 - используйте LiipImagineBundle в PHP, чтобы получить путь к версионному активу - PullRequest
0 голосов
/ 09 января 2020

Здравствуйте, у меня есть проект symfony 4, в котором у меня есть formBuilder.

В этой форме у меня есть EntityType, который представляет темы. Я хочу дать им атрибут data-asset-url, который соответствует версионному образу моего проекта (assets).

Мне удалось сделать так:

formType. php

use Symfony\Component\Asset\Packages;

private $assetManagers;

    public function __construct(Packages $assetManagers)
    {
        $this->assetManagers = $assetManagers;
    }

$builder
->add('theme', EntityType::class, [
                "class" => Theme::class,
                "label" => "Thème de l'application",
                "placeholder" => "Sélectionner un thème",
                "choice_label" => "nom",
                "choice_value" => "slug",
                "choice_attr" => function($choice, $key, $value)
                {
                    return [
                        'data-asset-url' => $this->assetManagers->getUrl("build/images/" . $value . ".png" ),
                    ];
                }
            ])

Теперь я могу получить некоторый URL-адрес, например "/build/images/sketchy.1fe9738c.png" (например, $value = "sketchy")

С Twig я должен был сделать следующее:

"{{ asset('build/images/sketchy.png')}}"

Теперь я бы хотел go дальше. Представьте, что с Twig я хочу использовать LiipImagineBundle для получения своего изображения, но с измененным размером относительно определенной конфигурации. Я бы сделал так:

"{{ asset('build/images/sketchy.png') | imagine_filter('theme') }}"

Теперь, с моим FormBuilder, как я могу реализовать LiipImagineBundle, чтобы завершить свою первую идею с активами, в PHP?

Спасибо за ваше помощь!

РЕДАКТИРОВАТЬ: Хорошо, я нашел решение!

Просто:

use Symfony\Component\Asset\Packages;
use Liip\ImagineBundle\Imagine\Cache\CacheManager;

private $assetManagers;
private $liipImagine;

    public function __construct(Packages $assetManagers, CacheManager $liipImagine)
    {
        $this->assetManagers = $assetManagers;
        $this->liipImagine = $liipImagine;
    }

$builder
->add('theme', EntityType::class, [
                "class" => Theme::class,
                "label" => "Thème de l'application",
                "placeholder" => "Sélectionner un thème",
                "choice_label" => "nom",
                "choice_value" => "slug",
                "choice_attr" => function($choice, $key, $value)
                {
                    return [
                        'data-asset-url' => $this->liipImagine->generateUrl($this->assetManagers->getUrl("build/images/" . $value . ".png" ), "theme"),
                    ];
                }
            ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...