2016-08-09 96 views
0

为什么我会在$errors[$field] .= '<div class="error"><p>' . $error . '</p></div>';这行上的代码中得到'Illegal offset type'错误?为什么在此代码中出现错误'Illegal offset type'?

代码:

$errors = []; 
foreach ($validation->errors() as $field) 
{ 
    $errors[$field] = ''; 
    foreach ($field as $error) { 
     $errors[$field] .= '<div class="error"><p>' . $error . '</p></div>'; 
    } 
} 

验证:

private function addError($field, $error) 
{ 
    $this->errors[$field][] = $error; 
} 

public function errors() 
{ 
    return $this->errors; 
} 

解决方案:

foreach ($validation->errors() as $key => $fieldErrors) 
{ 
    $errors[$key] = ''; 
    foreach ($fieldErrors as $error) { 
     $errors[$key] .= '<div class="error"><p>' . $error . '</p></div>'; 
    } 
} 
+1

因为数组不能成为阵列的密钥。 –

回答

3
foreach ($field as $error) 

这条线表明,$field是一个数组。您不能将数组用作另一个数组的键。

$errors[$field] << won't work! 

要修正,更改addError方法:

private function addError($field, $error) 
{ 
    $this->errors[$field] .= $error; //I changed [$field][] to [$field] 
} 
+0

谢谢队友,我在foreach上工作,查看编辑后的答案。我不能改变你的建议,因为我需要知道这个字段有错误,比如'username'或'password'。 – William

+0

@William我的建议不会隐藏该字段的名称。在原始代码和我的代码中,这个字段的名字就是'$ field'。如果你有它的工作,一切都很好。 – BeetleJuice

+0

如果您的建议中该字段的数量超过1,是不是会覆盖之前的值? – William

相关问题