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.