eConti - программирование в вопросах и ответах

Включить загрузчик twig из внешнего файла

В настоящее время я включаю это в начало каждого файла контроллера:

$loader = new Twig_Loader_Filesystem('/templatedir/templates');

$twig = new Twig_Environment($loader, array('debug' => true));
$twig->addExtension(new Twig_Extension_Debug());

Я считаю, что размещать это в каждом отдельном файле немного избыточно. Будут ли проблемы с размещением этого кода во внешнем файле и включением его в команду require_once?

Оператор render, который следует в каждом файле контроллера, будет использовать переменную $twig, включаемую из внешнего файла. Мне немного неудобно обращаться к переменной из другого файла, но мне интересно, оправданы ли мои опасения.

10.09.2015

  • следуйте этому rottmann.net/2013/01 / может быть вам полезен. и я не знаю, почему вы пишете один и тот же код. Используйте контейнер, чтобы поместить экземпляры ветки и просто вызвать его с вашего контроллера. 10.09.2015

Ответы:


1

Использование require_once подходит для простого приложения. Ваши опасения, конечно, верны, что, если переменная $twig также установлена ​​где-то еще, в другом включении и в другом контексте? У вас будет коллизия, которую трудно отладить.

Есть несколько способов избежать этой проблемы. Если вы знакомы с объектно-ориентированным программированием, вы можете определить такой класс:

Файл Twigloader.php

class Twigloader {
  public static $twig;

  public static function init() {
    $loader = new Twig_Loader_Filesystem('/templatedir/templates');

    self::$twig = new Twig_Environment($loader, array('debug' => true));
    self::$twig->addExtension(new Twig_Extension_Debug());
  }
}

Twigloader::init();

Теперь в каждом нужном файле twig можно сделать следующее без риска коллизии:

require_once "Twigloader.php";
$template = Twigloader::$twig->loadTemplate('test.html');

Если вам не нравится require_once, потому что в сложном приложении трудно отслеживать различные зависимости, вам следует обратить внимание на автозагрузку: http://php.net/manual/de/language.oop5.autoload.php

12.09.2015
Новые материалы

ИИ для общего блага, часть вторая
В нашем последнем блоге мы исследовали возможности ИИ для общего блага, указав на несколько инициатив по поиску действенных решений для продвижения справедливых и беспристрастных систем ИИ. По..

Время расцвета закончилось
Большую часть своей карьеры в индустрии программного обеспечения программисты работали с головой в песок. Успех в отрасли требует навыков презентации и обучения других. Ценность улучшенных..

Будущее сельского хозяйства: новый уровень производительности с современными технологиями
По мере роста населения мира растет и спрос на продукты питания. Фермеры сталкиваются с растущим давлением необходимости повышать урожайность и максимизировать производительность, манипулируя..

Состояние совместной фильтрации в 2022 году, часть 1
ResBeMF: Улучшение прогнозируемого охвата совместной фильтрации на основе классификации (arXiv) Автор: Анхель Гонсалес-Прието , Авраам Гутьеррес , Фернандо Ортега , Рауль Лара-Кабрера..

Зачем изучать PYTHON в 2022 году !
Python — востребованный, доступный язык программирования с активным, постоянно растущим сообществом пользователей. Для тех, кто хочет сменить профессию в мире технологий с помощью..

Решение капч с помощью Puppeteer
Это руководство предназначено для текстовых кодов, а не для reCAPTCHA Google (см. конец этого сообщения). Требования: Антикапча или любой другой сервис по разгадыванию капчи. Модуль..

7 встроенных библиотек Python, которые необходимо знать
7 встроенных библиотек Python, которые необходимо знать Стандартная библиотека Python значительно упрощает жизнь программистов, предоставляя широкий набор функций. Мы выбираем несколько..