Можно ли создать объект в Twig?

Можно ли создать объект в Twig? Я хочу получить доступ к объекту для расширения ветки, как в следующем коде:

{{myFunction({title: titleString, name: nameString})}}

Мне нужен объект внутри функции. К сожалению, в этой функции я обращаюсь к массиву, а не к объекту.

Как я могу создать объект в Twig.

Если это невозможно, как мне добраться до этого массива в функции как объекта, если сама функция ожидает объект в качестве аргумента?

Не уверен, почему ты хочешь это сделать? В чем преимущества передачи объекта вместо массива?

DarkBee 16.08.2018 10:02

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

marvhock 16.08.2018 11:19

В ванильном twig это невозможно, но ответ Абдельхафида Эль Кадири должен вам помочь

DarkBee 16.08.2018 11:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
3
3 065
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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)}}

Другие вопросы по теме