是否有可能在laravel请求类添加名称和说明验证规则

问题描述:

我请求类:是否有可能在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', 
     ]; 
    } 
} 

您可以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