为开始和结束标签扩展 blade 模板

Extending blade template for opening and closing tags

我正在尝试在 Laravel 4.2 中扩展 blade 模板,文档中的示例指出:

Blade::extend(function($view, $compiler)
{
    $pattern = $compiler->createMatcher('datetime');

    return preg_replace($pattern, '<?php echo ->format(\'m/d/Y H:i\'); ?>', $view);
});

这适用于单个 blade 标签,例如 @datetime(...)

我正在尝试扩展(更像是别名)诸如

@if($var == 'foo')

 bar

@endif

@foo

 bar

@endfoo

我不确定如何处理 "opening" 和 "closing" 标签。有人可以给我举个例子吗?

在您的 app/ 文件夹中创建一个新文件 blade_extensions.php。然后在该文件中放入以下内容:

<?php

Blade::extend(function($view, $compiler)
{
    $pattern = $compiler->createMatcher('foo');

    return preg_replace($pattern, '<?php if ( == "foo") : ?>', $view);
});

Blade::extend(function($view, $compiler)
{
    $pattern = $compiler->createPlainMatcher('endfoo');

    return preg_replace($pattern, '<?php endif; ?>', $view);
});

然后在你的app/start/global.php底部require app_path().'/filters.php';之后添加:

require app_path().'/blade_extensions.php';

那么在你的视图中可以这样写:

@foo ($var)
  bar
@endfoo

我不知道这是否正是您正在寻找的控制结构,但这与 $var == 'foo'

的检查匹配