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.