如何在 laravel blade 视图中突出显示字符串中的字符串

how to highlight string in a string in a laravel blade view

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

{{ $result->someText }}

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

{{ $searchString }}

所以我想我创建了一个新的 blade 指令:

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

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

error: missing argument 2

发现指令不排除 2 个参数。我尝试了所有我能找到的解决方法,但 none 奏效了。他们总是 return 作为纯字符串的参数,甚至不传递实际值。

我尝试添加一个辅助函数,如下所述:。无效:

error: unknown function "highlightSearch"

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

我刚刚在 Laravel 5.1 中测试过,它没有任何问题:

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

boot方法中AppServiceProvider

并且在视图中我可以使用:

@highlightSearch('test')

它 returns TEST 正如预期的那样。

确保您使用的是来自全局命名空间的 Blade,还有 运行

php artisan clear-compiled

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

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

现实情况是 blade 指令无法执行您需要它们执行的操作。他们是否应该不是我无法帮助的话题。但是,您可以在您的服务提供商处执行此操作:

use Illuminate\Support\Str;

/* ... */

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

然后在blade你可以这样做:

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