Heim >PHP-Framework >Laravel >So verwenden Sie die Füllmethode von Laravel
In Laravel ist die Fill-Methode eine Methode zum Zuweisen von Attributen zu Eloquent-Instanzen. Diese Methode kann so verstanden werden, dass sie zum Filtern der vom Frontend übertragenen redundanten Felder verwendet wird, die dem aktuellen Modell entsprechen Das Modell wird im ersten Zustand erkannt. Das Modell befindet sich je nach den Einstellungen des ausfüllbaren Arrays in verschiedenen Zuständen.
Die Betriebsumgebung dieses Artikels: Windows 10-System, Laravel Version 6, Dell G3-Computer.
Die Füllmethode ist eine Methode zum Zuweisen von Attributen zu Eloquent-Instanzen Laravel 5.5 In der neuesten Version wurde zur besseren Lesbarkeit das Annotations-Framework gelöscht
public function fill(array $attributes) { $totallyGuarded = $this->totallyGuarded(); foreach ($this->fillableFromArray($attributes) as $key => $value) { $key = $this->removeTableFromKey($key); if ($this->isFillable($key)) { $this->setAttribute($key, $value); } elseif ($totallyGuarded) { throw new MassAssignmentException($key); } } return $this; }
Zunächst können Sie sehen, dass Laravel zunächst eine eigene Methode „TotalGuarded“ aufruft: Funktion
public function totallyGuarded() { return count($this->getFillable()) == 0 && $this->getGuarded() == ['*']; }
Sie können die Wirkung dieser Methode sehen. Sie besteht darin, ihre eigenen ausfüllbaren und geschützten Werte zu erhalten und dann festzustellen, ob sie sich alle in einem nicht stapelweise zuweisbaren Zustand befinden, und schließlich einen booleschen Wert zurückzugeben. Ok, gehen wir zurück Gehen Sie jetzt zur Fill-Methode und schauen Sie sich das Design weiter an. Die nächste ist eine foreach-Schleife, aber vor der Schleife führt Laravel die fillableFromArray-Methode für das eingehende Zuweisungsattribut aus Die Methode erkennt, ob Sie einen Wert im ausfüllbaren Array definiert haben, und gibt den Wert zurück, den das ausfüllbare Array mit den Attributen überschneidet. Wenn nicht, geben Sie das eigene Ereignis zurück und kehren Sie nach dem Aufruf von fillableFromArray zurück Verarbeiten Sie die Parameter. Die einzigen zurückgegebenen Werte sind die Attribute, die wir als Stapelzuweisung zulassen (falls Sie sie definiert haben).ip
Schleifen Sie die erste Zeile, verwenden Sie zuerst RemoveTableFromKey, um den Schlüssel des Parameters zu verarbeiten, und löschen Sie den Tabellennamen im Schlüssel . Diese Methode wird nicht zu ausführlich erklärt. Es handelt sich lediglich um eine Funktion zum Aufteilen von Zeichenfolgen und zum Entfernen von Werten Schauen Sie sich den Quellcode an:
// 返回一个 True or False 的布尔值 // 若是未设置 fillable 与 guarded,则会返回 True (注意,在这种状况下,此 `Model` 是不容许批量赋值任何属性的哦) // 反之则返回 False $totallyGuarded = $this->totallyGuarded();
Sie können sehen, dass bei dieser Methode Laravel zunächst beurteilt wird, ob der Schutz für dieses Modell deaktiviert ist. Wenn der Schutz für dieses Modell nicht aktiviert ist, wird True direkt zurückgegeben
protected function fillableFromArray(array $attributes) { if (count($this->getFillable()) > 0 && ! static::$unguarded) { return array_intersect_key($attributes, array_flip($this->getFillable())); } return $attributes; }Wenn der Schutz aktiviert ist, wird beurteilt, ob dieses Attribut im ausfüllbaren Array vorhanden ist. Wenn es existiert, dann wird True zurückgegeben.
$key = $this->removeTableFromKey($key);Wenn diese Eigenschaft im ausfüllbaren Array nicht vorhanden ist, ermittelt Laravel erneut, ob Wenn diese Eigenschaft im geschützten Array vorhanden ist, kann diese Eigenschaft nicht stapelweise zugewiesen werden. Dann wird direkt „False“ zurückgegeben. Wenn keine der oben genannten Bedingungen erfüllt ist, ermittelt Laravel schließlich ob sein ausfüllbares Array leer ist und dieses Attribut mit _ beginnt, dann einen booleschen Wert zurückgeben
public function isFillable($key) { if (static::$unguarded) { return true; } if (in_array($key, $this->getFillable())) { return true; } if ($this->isGuarded($key)) { return false; } return empty($this->getFillable()) && ! Str::startsWith($key, '_'); }und dann zur Füllmethode zurückkehren. Wenn dieses Attribut als Nächstes von der isFillable-Methode gefiltert wurde, weisen Sie dieses Attribut sich selbst zu (aufgrund von Für begrenzte Zeit wird die setAttribute-Methode nicht im Detail besprochen~),
if (static::$unguarded) { return true; }Wenn es nicht durch die isFillable-Methode gefiltert wurde, ermittelt Laravel, ob sich Ihr eigenes Modell in einem Zustand befindet, der die Stapelzuweisung von Attributen nicht einschränkt . Wenn nicht, löst Laravel direkt eine Ausnahme aus.
if (in_array($key, $this->getFillable())) { return true; }Nachdem Laravel alle Attribute erkannt und zugewiesen hat, gibt es sich selbst zurück Endlich eine ZusammenfassungWenn Sie die Füllmethode aufrufen, erkennt Laravel zunächst den Status des aktuellen Modells.
Wenn Sie das ausfüllbare Array festlegen. Wenn das geschützte Array nicht festgelegt ist, befindet sich dieses Modell in einem Zustand kann bestimmte Attribute nur stapelweise zuweisen
Wenn Sie kein ausfüllbares Array, sondern ein geschütztes Array festlegen, befindet sich dieses Modell in einem Zustand, in dem beliebige Attribute stapelweise zugewiesen werden können
Was die Situation angeht, werde ich nicht darauf eingehen Dabei legen Sie gleichzeitig ausfüllbare und geschützte Arrays fest, da dies von Laravel verboten ist. Rufen Sie dann fillableFromArray auf, um die Schnittmenge von Attributen und ausfüllbaren Arrays zu ermitteln. Wenn Sie ausfüllbare Arrays nicht definieren oder Guard deaktivieren, wird dies von dieser Methode ausgeführt Attribute direkt zurückgeben
und dann führt Laravel eine Schleife für das zurückgegebene Array aus. In dieser Schleife ruft Laravel die Methode isFillable für jedes Attribut auf, um zu prüfen, ob das Attribut von dieser Methode nicht ausgefüllt werden kann Wenn das Modell im ausfüllbaren Array vorhanden ist und kein geschütztes Array festgelegt ist oder in einem geschützten Array vorhanden ist, erkennt Laravel, ob sich das aktuelle Modell in einem Zustand befindet, in dem nur bestimmte Eigenschaften stapelweise zugewiesen werden können. Wenn dies der Fall ist, wird direkt eine Ausnahme ausgelöst
und dann wird Laravel $this nach Abschluss des Zuweisungsvorgangs zurückgeben
[Verwandte Empfehlung:
Laravel-Video-Tutorial]
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Füllmethode von Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!