代码之家  ›  专栏  ›  技术社区  ›  aalaap

如何捕获一对定制刀片指令中包装的内容?

  •  1
  • aalaap  · 技术社区  · 6 年前

    我正在尝试编写一个自定义Blade指令,它可以修改内容并返回它,如下所示:

    <div class="some-text">
        @uppercase
        This is a line of text.
        @enduppercase
    </div>
    

    将在HTML中呈现如下内容:

    <div class="some-text">
        THIS IS A LINE OF TEXT.     
    </div>
    

    我不想知道的是如何做到以下几点:

    @uppercase('This is a line of text')
    

    如何捕获开始和结束指令中的所有内容,处理它们,然后将它们返回到视图中?

    注:有一个听起来类似的问题 here ,其中一条评论链接到另一个据称有答案的问题,但它并没有真正回答我在这里描述的问题。

    1 回复  |  直到 6 年前
        1
  •  1
  •   aalaap    6 年前

    我在发布这个问题后不久就找到了答案。

    将以下内容添加到 AppServiceProvider::boot() 方法:

    \Blade::directive('uppercase', function () {
        return '<?php ob_start(); ?>';
    });
    
    \Blade::directive('enduppercase', function () {
        return '<?php echo strtoupper(ob_get_clean()); ?>';
    });
    

    我参考了以下代码: https://github.com/RobinRadic/blade-extensions/blob/master/src/Directives/EndspacelessDirective.php