2017-01-19 7 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', 
      ] 
     ]; 
    } 
} 

を残りのAPIドキュメントのデータ私はこの1つのような名前を複製する必要はありません:

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はfolowingのようなあなたの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

EDIT:

rulesは、データを保持apiDataためのアダプタの一種です。ですから、rulesのロジックを変更することなく、apiDataであなたのロジックを配置する必要があり、言及はありません、質問のために:

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() { $ルール=(新しいリクエスト\バックエンド\ UpdateProductRequest) - >ルール(); unset($ rules ['something']); return $ rules; } – fico7489