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

Bu yazı 2015 yılında yazıldı. Bazı bilgiler ve araçlar güncelliğini yitirmiş olabilir.

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.

Mustafa Toker

Backend mühendisi ve ekip lideri. JVM, Spring Boot, Oracle ve yapay zekâ destekli yazılım geliştirme üzerine sahadan notlar yazıyorum.