字段在FormRequest和验证中被认为是空的

时间:2019-03-25 17:42:31

标签: php laravel

我有一个允许添加新行的模板。示例:我想一次将多个产品添加到商店,所以我可以通过复制自己的那些行一次添加所有产品。问题是我需要验证这些字段,它们都是必填项。我正在实施,以便我可以逐步完成每个步骤,并使其成为必修课。但是,我遇到另一个问题,Laravel告诉我我的字段为空,但事实并非如此。我想知道我该怎么解决,谢谢。

这是我给FormRequest的代码

   public function rules()
    {        
        $rules = [];

        foreach($_POST['esp'] as $key => $esp){
            $name_field = "esp[" . $key . "]" . "[esprqe]"; //name of my field is complicated even as it is time based

            $rules[$name_field] = 'required';
     }                            
        return $rules;            
    }

我的模板很大,不需要显示。

我收到的消息:esp [1553533952015] [esprqe]:[“必填esp [1553533952015] [esprqe]字段。”]

我的输入不为空,我不知道是什么问题

2 个答案:

答案 0 :(得分:0)

您声明字段“ esprqe”的名称基于时间的并且非常复杂。这可能是造成您问题的原因。

esp['.$key.']字段可能很好,因为该字段是从您的表单中转移过来的。但是,如果esprqe中的值是在上面的服务器端代码中生成的(我不知道,您还没有提供该字段的生成方式),以及规则是否在寻找该字段与表单上基于时间的生成字段 匹配...这些值将不匹配,并且您的方法中将包含一个非值。

这很可能会生成一条消息

  

[“必填esp [1553533952015] [esprqe]字段。”]

如果这是您的问题,则可以通过首先为esprqe字段创建一个简单编号的索引进行测试,该索引在形式和方法上都将匹配。如果成功,则可以使用 common 生成器来增加复杂性,以便规则部分确切知道该字段的名称是什么。表单创建和规则创建之间的时间并不相同-也许是失败的原因。

答案 1 :(得分:0)

您需要使用“点符号”来验证数组中的属性。

$name_field = "esp.$key.esprqe";

Laravel Docs: validating arrays