2017-11-20 4 views
1

Irgendwo in meiner Vorlage Zeichenkette in einem String zu markieren habe ich dies:wie in einer Laravel Blattansicht

{{ $result->someText }} 

Jetzt in diesem Text möchte ich alle Worte hervorheben, die in der Kette sind

{{ $searchString }} 

Also dachte ich, ich eine neue Klinge-Richtlinie zu erstellen:

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

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

error: missing argument 2

Es wurde festgestellt, dass Anweisungen nicht 2 Argumente enthalten. Ich habe jede Problemumgehung ausprobiert, die ich finden konnte, aber keine funktionierte. Sie geben die Argumente immer als einfache Zeichenfolge zurück und übergeben nicht einmal die tatsächlichen Werte.

Ich habe versucht, eine Hilfsfunktion wie hier erklärt hinzufügen: https://stackoverflow.com/a/32430258/928666. Hat nicht funktioniert:

error: unknown function "highlightSearch"

Also wie mache ich diese super einfache Aufgabe in Laravel? Die Hervorhebungsfunktion ist mir egal, das ist fast ein Einzeiler.

+0

'{{@ ...}}' sieht nicht richtig aus. – apokryfos

+0

Ich habe das aus der Dokumentation: https://laravel.com/docs/5.1/blade#extening-blade – DarsVaeda

Antwort

1

Die Realität will, ist Richtlinien Klinge kann nicht tun, was Sie sie brauchen zu tun. Ob sie das tun sollten, ist kein Thema, mit dem ich nicht helfen kann.Allerdings können Sie stattdessen dies in Ihrem Service-Provider:

use Illuminate\Support\Str; 

/* ... */ 

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

Dann Klinge können Sie einfach tun:

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

Ich habe gerade in Laravel 5.1 getestet und es funktioniert ohne Probleme:

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

in boot Methode von AppServiceProvider

und in Ansicht kann ich verwenden:

@highlightSearch('test') 

und es gibt TEST wie erwartet zurück.

Stellen Sie sicher, Blade-verwenden von den globalen Namensraum, führen auch

php artisan clear-compiled 

sicher, alles wird aufgefrischt zu machen. Wenn es nicht hilft, können Sie versuchen,

nur für den Fall zu laufen.

EDIT

Ich habe getestet es auch mit zusätzlichem Argumente und es scheint wirklich nicht wie erwartet funktionieren, so dass die vernünftigste wäre Helfer Datei des Hinzufügen (wenn Sie einfach jeder mit PHP haben nicht Funktion), wie zum Beispiel:

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

und später so wie es in Klinge, die als jede andere Funktion verwenden:

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

mit optional

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

wenn Sie highlight_search zur Ausgabe von HTML