2013-05-21 2 views
0

Я почти новый в Symfony2 и у меня есть маленький вопрос:Symfony2 Twig пользовательские фильтры в активе

Я разрабатываю шаблон электронной почты, который имеет текстовый формат HTML части (нет проблем с ним)

Единственная проблема, с которой я сталкиваюсь, - это абсолютные пути активов в TWIG.

Внутри моего файла email.html.twig У меня есть что-то вроде этого:

<img src="{{ asset('images/my-image.png') }}" alt="My image" /> но он записывает маршрут с относительным путем.

я обнаружил небольшое решение, чтобы добавить абсолютные пути, что-то вроде этого:

{% set abs = app.request.scheme ~ '://' ~ app.request.host %} 
<img src="{{ abs ~ asset('images/my-image.png') }}" alt="My image" /> 

Это работает! Но я хочу, чтобы улучшить это решение, а также научиться создавать собственные фильтры (я прочитал документацию, но я немного потерял)

Я хочу создать что-то вроде этого:

<img src="{{ asset('images/my-image.png' | absolute) }}" alt="My image" /> 

Но я не» t знать, как правильно переопределить расширение активов. Вы можете мне помочь?

Большое спасибо!

ответ

0

Ну, это немного трудно скопировать вставить решение, но я могу сделать короткую поваренную книгу, так что вы можете идти шаг за шагом, и сделать это самостоятельно:

1) Вы должны реализовать Assetic/Filter/FilterInterface

2) Если вы посмотрите на класс FilterInterface, вы увидите, что вам нужно реализовать два метода: filterLoad и filterDump.

Таким образом, вы будете делать что-то вроде этого:

<?php 

namespace You\YourBundle\Assetic\Filter; 

use Assetic\Asset\AssetInterface; 
use Assetic\Filter\FilterInterface; 

class YourAsseticFilter implements FilterInterface 
{ 
    public function filterLoad(AssetInterface $asset) 
    { 

      // do something 

    } 


    public function filterDump(AssetInterface $asset) 
    { 
     $content = $asset->getContent(); 

     // do something 

     $asset->setContent($content); 
    } 


} 

И после того как вы к этому, вы должны что-то очень похожее на регистрацию расширений хворостины в services.yml в YourBundle. Конечно, это зависит от использования конфигурации YML, XML .... Я использую yml, поэтому я наберу его в yml :)

parameters: 
    your_bundle.class: You\YourBundle\Assetic\Filter\YourAsseticFilter 

services: 
    your_bundle.assetic.your_assetic_filter: 
     class: %your_bundle.class% 
     tags: 
      - { name: assetic.filter } 
      - { alias: yourChosenNameForYourNewAsseticFilter } 

И тогда вы называете это как | yourChosenNameForYourNewAsseticFilter, конечно.

+0

Привет, друг! Я знаю, как создать фильтр TWIG (но спасибо вам). Проблема в том, что я не знаю, как закодировать мою необходимость: как переопределить расширение активов для добавления хоста протокола и сайтов. –

+0

Хм, я не уверен, как переопределить существующее расширение, но если вы можете просто создать новое расширение, вы можете получить данные о протоколе и узле сайта в классе YourAsseticFilter. Но я не знаю, поможет ли это ... –

+0

Мы, когда я смогу попробовать свое решение, вернусь к этому сообщению для обратной связи. Спасибо за ваше время, посмотрим, сработает ли это. –