Можно ли создать объект в Twig? Я хочу получить доступ к объекту для расширения ветки, как в следующем коде:
{{myFunction({title: titleString, name: nameString})}}
Мне нужен объект внутри функции. К сожалению, в этой функции я обращаюсь к массиву, а не к объекту.
Как я могу создать объект в Twig.
Если это невозможно, как мне добраться до этого массива в функции как объекта, если сама функция ожидает объект в качестве аргумента?
Я хочу использовать функцию, которая ожидает объект в качестве аргумента. Эта функция уже где-то используется. Поэтому вместо написания другой функции, которая анализирует массив в объект, было бы проще просто написать объект в ветке, а не писать массив, как указано выше, поскольку я ожидал, что синтаксис будет очень похож. Однако, поскольку мой основной вопрос еще не получил ответа, кажется, что невозможно создать объект в Twig напрямую.
В ванильном twig это невозможно, но ответ Абдельхафида Эль Кадири должен вам помочь




https://symfony.com/doc/current/templating/twig_extension.html
Почему бы не создать альтернативный вызов функции, для которого потребуется массив, а затем преобразовать этот массив в объект и запустить вашу основную функцию?
вы можете создать фильтр для разбора массивов на объекты следующим образом:
создайте расширение например в src \ AppBundle \ Twig \ Parsers.php
<?php
namespace AppBundle\Twig;
class Parsers extends \Twig_Extension {
public function getFilters()
{
return array(
new \Twig_SimpleFilter('toObject', array($this, 'toObject')),
);
}
/**
* @param array $array
* @return object
*/
public function toObject($array)
{
return (object) $array;
}
}
если вы используете symfony 3.4 с автоматическим подключением, теперь все должно работать, если вы используете 2.8, зарегистрируйте свое расширение в services.yml с помощью:
app.twig_parsers_extension:
class: AppBundle\Twig\Parsers
tags: [{ name: twig.extension }]
вызовите фильтр в ветке:
{{myFunction({title: titleString, name: nameString}|toObject)}}
Не уверен, почему ты хочешь это сделать? В чем преимущества передачи объекта вместо массива?