Intereting Posts
Нужна помощь, игнорируя сертификат сервера при привязке к LDAP-серверу с помощью PHP Будет ли включать ненужные php-файлы в замедление веб-сайта? XAMPP localhost возвращает объект, не найденный после установки Laravel лучший способ измерить (и уточнить) производительность с помощью PHP? Как получить первый день заданной недели в PHP (многоплатформенный)? Как удалить акценты из символов в строке PHP? Где я вставляю ORDER BY в мой запрос MYSQL условие в критериях в yii framework php Внутренняя ошибка сервера в кодеригенере на хосте Самый простой способ удалить все пробелы из файла кода? PHP Предупреждение: запуск PHP: невозможно загрузить динамическую библиотеку «…» не удалось отобразить сегмент из общего объекта: не удается выделить память в Unknown в строке 0 Как подойти к специалисту по викторине в Codeigniter PHP-форма + Google reCAPTCHA count, возвращающий размер первой ячейки в массиве, а не размер всего массива mysqli_stmt, массивы и оператор IN

Объект доступа Twig

Я хочу получить доступ к значению объекта внутри шаблона ветви.

Обычно я получаю такое возвращение:

echo $lang->get("test"); 

Но как я могу сделать то же самое в шаблоне с веточкой?

Я пробовал так много методов, но никто не работал.

Например, я попробовал:

 {{ attribute(lang, get, 'test') }} 

с результатом

Ловкая фатальная ошибка: аргумент 3 передан Twig_Node_Expression_GetAttr :: __ construct () должен быть экземпляром Twig_Node_Expression_Array, экземпляром Twig_Node_Expression_Constant данного

благодаря

То, что вы пытаетесь сделать, это вызвать метод объекта с параметрами в шаблоне Twig. Я не думаю, что это поддерживается, так как это, вероятно, рассматривается как плохая идея. Twig поддерживает понятие геттеров на объекте, но вызываемые без параметров:

 {{ lang.test }} 

попытается вызвать одно из следующего, в следующем порядке:

  • $lang->test
  • $lang->test()
  • $lang->getTest()
  • $lang->isTest()

Если объект реализует любой из этих аксессуаров и соглашений, Twig найдет его. Все, что вне этого соглашения, например get('test') , не является частью философии Twig. И это не широко используемая идиома вообще, поэтому вы, вероятно, должны придерживаться одного из вышеуказанных методов.

См. http://twig.sensiolabs.org/doc/templates.html#variables .

Вы можете реализовать __isset , __get или __call magic для поддержки одного из этих методов доступа.

Я знаю, что это старый вопрос, но после 3 часов чистки в Интернете и отсутствия примеров я хотел убедиться, что он задокументирован.

Возвращаясь к одной из ваших первоначальных попыток:

 {{ attribute(lang, get, 'test') }} 

Я пытаюсь сделать то же самое, и это должно работать в соответствии с документацией . К сожалению, примеров использования этого нет. Все, что я нашел, это то, что имя метода (get) должно было быть строкой («get»), поэтому я изменил ее, но она все еще не работает. То, что я закончил, было следующим:

 {% set myText = lang.get('test') %} {{ myText }} 

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

 echo twig_escape_filter($this->env, $this->getAttribute((isset($context["lang"]) ? $context["lang"] : null), "get", "test"), "html", null, true); 

и второй (2 лайнера):

 $context["myText"] = $this->getAttribute((isset($context["lang"]) ? $context["lang"] : null), "get", array(0 => "test"), "method"); echo twig_escape_filter($this->env, (isset($context["myText"]) ? $context["myText"] : null), "html", null, true); 

После проверки я понял разницу (проверьте 3-й параметр на getAttribute), параметр arguments – это массив! Это хорошая информация. Я изменил свое оригинальное на это:

 {{ attribute(lang, 'get', ['test']) }} 

и теперь он работает!

Надеюсь, это поможет кому-то!