2016-08-09 189 views
0

Warum erhalte ich in diesem Code in der Zeile $errors[$field] .= '<div class="error"><p>' . $error . '</p></div>'; den Fehler 'Illegal offset type'?Warum bekomme ich in diesem Code den Fehler 'Illegal offset type'?

Code:

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

Validierung:

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

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

Lösung:

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

Da ein Array kein Schlüssel für einen Array sein kann. –

Antwort

3
foreach ($field as $error) 

diese Linie legt nahe, dass $field ein Array ist. Sie können ein Array nicht als Schlüssel für ein anderes Array verwenden.

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

zu beheben, um Ihre addError Methode ändern:

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

Danke Kumpel, ich habe es funktioniert auf der foreach, überprüfen Sie die bearbeitete Antwort. Ich kann die von Ihnen vorgeschlagene Zeile nicht ändern, da ich wissen muss, welches Feld Fehler hat, wie 'Benutzername' oder' Passwort'. – William

+0

@William Mein Vorschlag wird den Namen des Feldes nicht verbergen. Sowohl im ursprünglichen Code als auch in meinem ist der Name des Feldes nur '$ field'. Wenn es funktioniert, ist alles in Ordnung. – BeetleJuice

+0

Würde es den vorherigen Wert nicht überschreiben, wenn es mehr als 1 in diesem Feld mit Ihrem Vorschlag gibt? – William