Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以在laravel请求类中添加验证规则的名称和说明_Php_Laravel - Fatal编程技术网

Php 是否可以在laravel请求类中添加验证规则的名称和说明

Php 是否可以在laravel请求类中添加验证规则的名称和说明,php,laravel,Php,Laravel,我要求上课: class UpdateProductRequest extends ApiRequest { public function authorize() { return true; } public function rules() { return [ 'name' => 'required', 'description' => 'r

我要求上课:

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',
            ]
        ];
    }
}
因为我想在RESTAPI文档中使用这些附加数据。我不想重复这样的名字:

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

您可以制定
规则
来使用
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());
    }
}
但是查看文档可能是个好主意。larave的绑定很少:

编辑:

rules
是一种用于
apiData
的适配器,用于保存数据。因此,对于从未提及的问题,您需要将逻辑放入
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());
}

这正是我所做的,但我有后端/UpdateProductRequest和Api\UpdateProductRequest,现在将规则从后端请求复制到Api请求并不容易…听起来很糟糕,但我没有完全遵循。为什么要在类之间复制规则,以及它与您提出的问题的关系?公共函数规则(){$rules=(new Requests\Backend\UpdateProductRequest)->rules();unset($rules['something');return$rules;}好的,您帮了我很大的忙,我只是想知道如何实现这一点。您的上一个解决方案并不完美,因为我需要编辑所有当前的后端请求,并且我不希望在后端请求中使用apiData()函数。。。