2016-12-06 41 views
2

我正在嘗試創建刀片指令以突出顯示某些將從我的搜索查詢返回的單詞。將多個參數傳遞給刀片指令

這是我的刀片指令:

class AppServiceProvider extends ServiceProvider 

{ 
    public function boot() 
    { 
     Blade::directive('highlight', function($expression, $string){ 

      $expressionValues = preg_split('/\s+/', $expression); 

      foreach ($expressionValues as $value) { 
       $string = str_replace($value, "<b>".$value."</b>", $string); 
      } 

      return "<?php echo {$string}; ?>"; 
     }); 
    } 

    public function register() 
    { 
    } 
} 

我在刀片這樣調用:

@highlight('ho', 'house') 

但是,這個誤差修改是繼我:

Missing argument 2 for App\Providers\AppServiceProvider::App\Providers\{closure}() 

如何解決它?

回答

0

我認爲你只能傳遞一個參數。它不漂亮,但你可以通過你的參數,這樣一個數組:

@highlight(['expression' => 'ho', 'string' => 'house']) 

所以,你的指令可能是

class AppServiceProvider extends ServiceProvider 

{ 
    public function boot() 
    { 
     Blade::directive('highlight', function($array){ 

      $expressionValues = preg_split('/\s+/', $array['expression']); 

      foreach ($expressionValues as $value) { 
       $array['string'] = str_replace($value, "<b>".$value."</b>", $array['string']); 
      } 

      return "<?php echo {$array['string']}; ?>"; 
     }); 
    } 

    public function register() 
    { 
    } 
} 

在這裏找到:https://laracasts.com/discuss/channels/laravel/how-to-do-this-blade-directive

+0

錯誤:'非法串抵消「表達」 –

0
Blade::directive('highlight', function($arguments){ 

     list($arg1, $arg2) = explode(',',str_replace(['(',')',' ', "'"], '', $arguments)); 

     $expressionValues = preg_split('/\s+/', $arg1); 

     $output = ""; 

     foreach ($expressionValues as $value) { 
      $output .= str_replace($value, "<b>".$value."</b>", $arg2); 
     } 

     return "<?php echo \"{$output}\"; ?>"; 
    });