2017-09-15 56 views
1

Laravel包括一個名爲ConvertEmptyStringsToNull如何忽略Laravel的ConvertEmptyStringsToNull中的特定屬性?

與中間件全球中間件,而中間件GET /somewhere?something結果的請求something === null

,在something === ''

申請結果如何禁用它的特定屬性名字呢?

例如,如果您查看另一個全局包含的中間件TrimStrings,您會注意到它包含一個except屬性。

/** 
* The attributes that should not be trimmed. 
* 
* @var array 
*/ 
protected $except = [ 
    // 
]; 

在這種情況下,中間件應用於除了在這裏命名的所有屬性。我試圖以相同的方式擴展ConvertEmptyStringsToNull,但它不起作用。我覺得我錯過了一些基本的東西。

我希望能夠爲此中間件添加例外,以便僅爲特定屬性名稱獲取空字符串。例如除了exemption

  • GET /somewhere?somethingsomething === null
  • GET /somewhere?exemptionexemption === ''
  • GET /somewhere?everythingeverything === null
+0

我認爲你可以使用$ except = ['/ somewhere']; –

+0

@Vishal nope,但是謝謝。無論如何,這意味着忽略整個路線,而我的問題是免除所有路線的單個屬性 - 因爲它在'TrimStrings' –

回答

0

確實可以延長TransformsRequest類作爲自定義中間件(因爲ConvertEmptyStringsToNull也擴展同一個類),然後覆蓋transform()方法根據您的需要。一個工作示例如下

我將排除請求字段'abc'從設置爲空。對不起不乾淨例如,我使用了一個數組,所以incase我想排除多個字段。

//this is a middleware class I have removed `handle()` function leaving the default. 
class NinjaAuther extends TransformsRequest 
{ 

/** 
* Transform the given value. 
* 
* @param string $key 
* @param mixed $value 
* @return mixed 
*/ 
protected function transform($key, $value) 
{ 
     if(is_string($value) && !in_array($key, ['abc'], true)) { 
      $value = $value === '' ? null : $value; 
     } 

    return $value; 
    } 
} 

取下然後從$middlewareConvertEmptyStringsToNull中間件包括您自己的NinjaAuther中間件。

enter image description here 然後你很好走!所有請求都通過您的自定義中間件!因爲你需要,你可以使用它在中間件個人組(如果你不希望它適用於所有請求)

PS:我真的不檢查小心翼翼的TransformRequest類,但我認爲它應該是安全的,因爲無論如何它被應用於所有的請求在默認配置Kernel.php

相關問題