У меня в голове что-то, что нужно реализовать в текущем проекте. Я объясню на примере ниже:
Я буду использовать следующую структуру переменных во многих шаблонах:
{% if article.tags is iterable %}
{% for tag in article.tags %}
{{ tag.title }}
{% endfor %}
{% endif %}
Как вы можете видеть в строке №1 выше, я затем назначу данные переменных «article», которые имеют список данных «тегов» из PHP, загрузчику шаблонов Twig, который обычно используется. Но я не хочу загружать данные «тегов» из базы данных и назначать их шаблону, потому что я думаю, что он будет использовать мое соединение с сервером и ресурс, даже используемые данные «тегов» или нет.
Поэтому я думаю, что лучший подход - использовать концепцию прослушивателя событий (ловушки), реализованную внутри Twig, ниже показан процесс:
1) Я готовлю слушателя где-то в моем PHP-файле перед загрузкой шаблона: $ this-> twig-> addListenerMethod ($ this, 'tags');
2) Когда Twig анализирует переменную «теги», он проверяет, есть ли слушатель с таким же именем метода, прикрепленным к переменной.
3) Когда слушатели найдены, Twig вызовет указанный метод, передав родительский объект (статью) в качестве первого параметра.
4) Когда метод вызван, он будет обрабатывать как следует и возвращать необходимый список данных «тегов».
Мой вопрос:
1) В каком исходном файле Twig я могу начать поиск и реализацию концепции прослушивателя событий (перехвата) в Twig?
2) Есть ли у кого-то уже такая же реализация с использованием Twig, как я описал выше?
3) или у кого-то есть предложения?
Хотелось бы, чтобы у меня было много предложений по этому поводу, пока я копаюсь в исходниках Twig.
Спасибо.
С уважением.
1 ответ
Я нашел решение своего вопроса:
Мне просто нужно назначить шаблону объект " Статья ":
$template->render(array(
'article' => new Article()
);
Вот как выглядит объект « Статья »:
class Article
{
public function tags($args)
{
return array(
array(
'title' => 'oke',
'desc' => 'lorem ipsum'
),
array(
'title' => 'oke 1',
'desc' => 'lorem ipsum 1'
)
);
}
}
А если вы хотите передать аргументы методу « теги », просто используйте следующий пример:
{% if article.tags('param_1', 'param_n') is iterable %}
{% for tag in article.tags('param_1', 'param_n') %}
{{ tag.title }}
{% endfor %}
{% endif %}
Похожие вопросы
Связанные вопросы
Новые вопросы
events
Событие - это способ предоставления классом уведомлений слушателям, когда происходит конкретная вещь.