Как настроить пользовательскую функцию в Volt (Phalcon)

Как настроить пользовательскую функцию в Volt? Например, я хочу вызвать функцию, которая будет транслировать строки в моих представлениях как таковые:

<div class='page-header'>
    

{{ tr('session_login_title') }}

</div>

and I want the tr to map to a function \My\Locale::translate($key)

7
nl ja de

1 ответы

Вольт-функции действуют как замены строк и фактически не вызывают базовую функцию. Volt переводит функцию в соответствующую строку, которая в свою очередь интерпретируется PHP.

Предположим, что у вас есть класс Locale , который имеет метод translate как таковой:

public static function translate()
{
    $return = '';

    if (isset(self::$_phrases[$key]))
    {
        $return = self::$_phrases[$key];
    }

    return $return;
}

Этот метод использует внутренний массив $ _ phrases , чтобы найти соответствующий ключ, который вы передаете, и вернуть текст нужной фразы. Если он не найден, он возвращает пустую строку.

Теперь нам нужно зарегистрировать функцию в Volt.

    $di->set(
        'volt',
        function($view, $di) use($config)
        {
            $volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di);
            $volt->setOptions(
                array(
                    'compiledPath'      => $config->app_volt->path,
                    'compiledExtension' => $config->app_volt->extension,
                    'compiledSeparator' => $config->app_volt->separator,
                    'stat'              => (bool) $config->app_volt->stat,
                )
            );
            $volt->getCompiler()->addFunction(
                'tr',
                function($key)
                {
                    return "\\My\\Locale::translate({$key})";
                }
            );

            return $volt;
        },
        true
    );

Обратите внимание, что функция tr зарегистрирована. Он возвращает строку \ My \ Locale :: translate ({$ key}) с переданным параметром $ key . Этот синтаксис Volt будет переведен на PHP-директивы и выполнен PHP. Поэтому строка вида:

<div class='page-header'>
    

{{ tr('session_login_title') }}

</div>

после процессов Вольта это становится:

<div class='page-header'>
    

<?php echo \My\Locale::translate('session_login_title') ?>

</div>
15
добавлено
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp