Зарегистрируйте функции Twig, которые находятся в другом классе - PullRequest
0 голосов
/ 04 апреля 2019

Если я сделаю:

protected function registerTwigFunctions() {
    return [
        'mytwigfunction' => 'myTwigFunction',
    ];
}

, тогда все работает, при условии, что моя функция находится в одном классе.

Но я пытаюсь зарегистрировать функцию Twig, котораянаходится в другом классе.

Если я сделаю:

protected function registerTwigFunctions() {
    return [
        'mytwigfunction' => [[anotherClass::class, 'myTwigFunction']],
    ];
}

, тогда я получу Unable to load the "My\Name\Space\AnotherClass" runtime in "record.twig" at line 1., даже если он правильно выбирает свое пространство имен и, конечно, он импортируется.

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

Я задаю этот вопрос в контексте Bolt CMS на случай, если есть что-то отличное от стандартного Symfony в отношении регистрации функций Twig, но я сомневаюсь в этом.

1 Ответ

0 голосов
/ 06 апреля 2019

Проблема в том, что, вероятно, ваш myFunction метод не является статичным. Представьте себе класс:

class Element
{
    public static function sayHi()
    {
        return "Hi!";
    }

    public function sayHello()
    {
        return "Hello!";
    }
}

Чтобы использовать это в функции Twig, вы регистрируете их следующим образом:

public function getFunctions()
    {
        $element = new Element();

        return [
            new TwigFunction('test_function_static', [Element::class, 'sayHi']),
            new TwigFunction('test_function_dynamic_on_object', [$element, 'sayHello']),
        ];
    }

Таким образом, вызываемый объект должен придерживаться правил , что означает, что вы можете вызывать нестатическую функцию только для объекта (экземпляра) определенного класса, но не для самого класса.

Если вы добавите

    ...
    new TwigFunction('test_function_dynamic_on_class', [Element::class, 'sayHello']),
    ...

вы увидите ошибку, которую вы имеете.

...