【问题标题】:how to highlight string in a string in a laravel blade view如何在laravel刀片视图中突出显示字符串中的字符串
【发布时间】:2017-11-21 22:20:08
【问题描述】:

在我的模板中某处我有这个:

{{ $result->someText }}

现在我想在这个文本中突出显示字符串中的所有单词

{{ $searchString }}

所以我想我创建一个新的刀片指令:

{{ @highlightSearch($result->someText, $searchString) }}

Blade::directive('highlightSearch', function($input, $searchString)...

错误:缺少参数 2

发现指令不包含 2 个参数。我尝试了所有我能找到的解决方法,但都没有奏效。它们总是将参数作为纯字符串返回,甚至不传递实际值。

我尝试添加一个辅助函数,如下所述:https://stackoverflow.com/a/32430258/928666。没用:

错误:未知函数“highlightSearch”

那么我如何在 laravel 中完成这个超级简单的任务呢?我不关心高亮功能,那几乎是一条线。

【问题讨论】:

标签: php laravel laravel-5 laravel-5.1 blade


【解决方案1】:

现实情况是刀片指令无法执行您需要它们执行的操作。他们是否应该不是我无能为力的话题。但是,您可以改为在您的服务提供商中执行此操作:

use Illuminate\Support\Str;

/* ... */

Str::macro('highlightSearch', function ($input, $searchString) {
      return str_replace($searchString, "<mark>$searchString</mark>", $input); 
      //Or whatever else you do
});

然后在刀片中你可以这样做:

{!! \Illuminate\Support\Str::highlightSearch($result->someText, $searchString) !!}

【讨论】:

    【解决方案2】:

    我刚刚在 Laravel 5.1 中对其进行了测试,它可以正常工作:

    \Blade::directive('highlightSearch', function($input) {
        return "<?php echo strtoupper($input); ?>";
    });
    

    AppServiceProviderboot方法中

    我可以使用:

    @highlightSearch('test')
    

    它按预期返回TEST

    确保您使用的是全局命名空间中的 Blade,同时运行

    php artisan clear-compiled
    

    以确保所有内容都已刷新。如果它没有帮助,您可以尝试运行

    composer dump-autoload
    

    以防万一。

    编辑

    我还使用附加参数对其进行了测试,但它似乎确实没有按预期工作,所以最合理的方法是添加帮助文件(如果您没有任何简单的 PHP 函数),例如:

    function highlight_search($text, $searchString) 
    {
       // return whatever you want
    }
    

    然后在 Blade 中将其用作任何其他函数,如下所示:

    {{ highlight_search('Sample', 'Sam') }}
    

    可选地使用

    {!! highlight_search('Sample', 'Sam') !!}
    

    如果你想让highlight_search 输出 HTML

    【讨论】:

      猜你喜欢
      • 2018-04-04
      • 2022-01-01
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 2013-12-17
      • 1970-01-01
      • 2016-07-27
      • 2013-02-07
      相关资源
      最近更新 更多