你在这里

Blade模板引擎之解析字符串里的Blade语法

0
Vote up!

众所周知Drupal8开始,Drupal放弃了之前一直坚持的默认PHPtemplate引擎的思路,改为拥抱twig,这证明Drupal终于认可了模板引擎的价值,并且Drupal可以很灵活的整合很多第三方模板引擎,除了twig还有blade。

Blade模板引擎是Laravel的内置模板引擎,也是十分优秀的,在模板引擎的选择上,有时候要考虑的是成本问题,学习成本,开发成本,所以假如团队已经会用Blade,那么在转向Drupal时,是可以保留原来的习惯的。

让Drupal支持Blade,只需要开启@[Blade]模块。但默认,这种方式只支持解析模板文件里的Blade语法,如果是存在数据库中的字符串怎么办呢,在查阅一番之后,终于找到解决方案。

PHP:
function parse_blade_code($string,array $args=array()){

  $compiler = new Illuminate\View\Compilers\BladeCompiler(NULL, NULL);
  $generated = $compiler->compileString($string);

  ob_start(); extract($args,EXTR_SKIP);

  try
  {
    eval('?>'.$generated);
  }

  catch (\Exception $e)
  {
    ob_get_clean(); throw $e;
  }

  $content = ob_get_clean();

  return $content;
}
调用方式
PHP:
print parse_blade_code($text, $__data);
这里要注意的是为了完成解析,需要把内部对象__env也通过$args传进来,否则会解析不成功。