Heim > PHP-Framework > Laravel > So verwenden Sie die Füllmethode von Laravel

So verwenden Sie die Füllmethode von Laravel

WBOY
Freigeben: 2022-06-06 15:33:23
Original
3678 Leute haben es durchsucht

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.

So verwenden Sie die Füllmethode von Laravel

Die Betriebsumgebung dieses Artikels: Windows 10-System, Laravel Version 6, Dell G3-Computer.

So verwenden Sie die Füllmethode von Laravel.

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;
}
Nach dem Login kopieren

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() == ['*'];
}
Nach dem Login kopieren

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();
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

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, '_');
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren
Nachdem Laravel alle Attribute erkannt und zugewiesen hat, gibt es sich selbst zurück Endlich eine Zusammenfassung

Wenn 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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage