Phalcon’da volt template engine’de PHP fonksiyonlarını kullanmak

Uzun bir aradan sonra Herkese Merhabalar,

Phalcon Framework’de volt template engine’yi kullandığınızda tanımlı php fonksiyonlarını direkt olarak kullanamıyorsunuz. Şu şekilde bir kullanımda hata verir;

{{ mb_substr( item['caption'], 0, 10, 'UTF-8') }}

Undefined function ‘mb_substr’ in “app/views/index/index.volt” on line 5

Örneğimizde mb_substr’yi kullandık fakat hata verdi. Tanımlı PHP fonksiyonlarını kullanabilmek için view konfigürasyonununda kullanacağınız fonksiyonu tanımlamanız gerekiyor şöyle ki ;

$compiler = $volt->getCompiler();

$compiler->addFunction('mb_substr', 'mb_substr');

Phalcon\Mvc\View\Engine\Volt\Compiler içerisinde yer alan addFunction metodu iki parametre alır. ilk parametre’de volt içerisinde tanımlayacağımız fonksiyonu hangi isimle çağıracaksak / kullanacaksak burada belirtiyoruz. ikinci parametrede ise Tanımlı PHP fonksiyonunun ismini yazıyoruz. ben her ikisine de mb_substr ismini verdim. Örnek vermem gerekirse;

view componentini nerede ayarladıysanız ilgili dosyayı açın, genelde public/index.php ya da app/config/services.php içerisinde tanımlanır.

/**
 * Setting up the view component
 */
$di->set('view', function () use ($config) {

    $view = new View();

    $view->setViewsDir($config->application->viewsDir);

    $view->registerEngines(array(
        '.volt' => function ($view, $di) use ($config) {

            $volt = new VoltEngine($view, $di);
            
            $volt->setOptions(array(
                'compiledPath' => $config->application->cacheDir,
                'compiledSeparator' => '_'
            ));

            $compiler = $volt->getCompiler();

            $compiler->addFunction('mustafa_substr', 'mb_substr');

            //echo "<pre>"; print_R($compiler->getFunctions ()); exit;

            return $volt;
        },
        '.phtml' => 'Phalcon\Mvc\View\Engine\Php'
    ));

    return $view;
}, true);

Daha sonra IndexController’ınız şu şekilde olsun;

<?php

class IndexController extends ControllerBase
{

    public function indexAction()
    {

        $item = array('caption' => "isim soy isim mustafa toker bla bla zbam");
        $this->view->setVar("item", $item);

    }

}

mb_substr’yi app/views/index/index.volt ‘da şu şekilde ki bir kullanımla kullanabilirsiniz;

{{ mustafa_substr( item['caption'], 0, 10, 'UTF-8') }}

Halihazırda Volt içerisinde tanımlı fonksiyonlara bakabilirsiniz;

Ben örnek olması açısından mustafa_substr ismini verdim Önceki Yazılımcı durumuna düşmemek için siz daha iyi isimlendirmeler ile projelerinizde kullanabilirsiniz 🙂

Sevgilerle.