2017-01-19 27 views
4

我請求類:是否有可能在laravel請求類添加名稱和說明驗證規則

class UpdateProductRequest extends ApiRequest 
{ 
    public function authorize() 
    { 
     return true; 
    } 

    public function rules() 
    { 
     return [ 
      'name'  => 'required', 
      'description' => 'required', 
     ]; 
    } 
} 

但我想類似的東西:

class UpdateProductRequest extends ApiRequest 
{ 
    public function authorize() 
    { 
     return true; 
    } 

    public function rules() 
    { 
     return [ 
      'name'=> [ 
       'name' => 'Product name', 
       'description' => 'Product name description', 
       'validation' => 'required', 
       'type' => 'string', 
      ], 
      'description'=> [ 
       'name' => 'Product description', 
       'description' => 'Product description description', 
       'validation' => 'required', 
       'type' => 'string', 
      ] 
     ]; 
    } 
} 

因爲我想用這個附加Rest API文檔的數據。我不想重複這樣一個名字:

class UpdateProductRequest extends ApiRequest 
{ 
    public function authorize() 
    { 
     return true; 
    } 

    public function apiData(){ 
     return [ 
      'name'=> [ 
       'name' => 'Product name', 
       'description' => 'Product name description', 
       'type' => 'string', 
      ], 
      'description'=> [ 
       'name' => 'Product description', 
       'description' => 'Product description description', 
       'type' => 'string', 
      ] 
     ]; 
    } 

    public function rules() 
    { 
     return [ 
      'name'  => 'required', 
      'description' => 'required', 
     ]; 
    } 
} 

回答

2

您可以rules使用您的apiData像如下因素:

class UpdateProductRequest extends ApiRequest 
{ 
    public function authorize() 
    { 
     return true; 
    } 

    public function apiData() 
    { 
     return [ 
      'name'=> [ 
       'name' => 'Product name', 
       'description' => 'Product name description', 
       'validation' => 'required', 
       'type' => 'string', 
      ], 
      'description'=> [ 
       'name' => 'Product description', 
       'description' => 'Product description description', 
       'validation' => 'required', 
       'type' => 'string', 
      ] 
     ]; 
    } 

    public function rules() 
    { 
     return array_map(function($item){ 
      return $item['validation']; 
     }, $this->apiData()); 
    } 
} 

但它可能是看Swagger的文檔是個好主意。很少有綁定larave:https://packagist.org/search/?q=swagger%20laravel

編輯:

rulesapiData一種適配器,它保存的數據。所以,你需要把你的邏輯在apiData不改變邏輯rules從未提到-問題:

public function apiData() 
{ 
    return array_diff_key(
     (new Requests\Backend\UpdateProductRequest)->apiData(), 
     ['something' => false] 
    ); 
} 

public function rules() 
{ 
    return array_map(function($item){ 
     return $item['validation']; 
    }, $this->apiData()); 
} 
+0

這正是我沒有,但我有後臺/ UpdateProductRequest和API \ UpdateProductRequest現在還不是簡單的複製規則從後端請求到api請求... – fico7489

+0

聽起來很不好,但我不太遵循。你爲什麼要在類之間複製規則,以及它如何與你提出的問題相關? –

+0

public function rules() $ rules =(new Requests \ Backend \ UpdateProductRequest) - > rules(); unset($ rules ['something']); 返回$規則; } – fico7489