Rumah >rangka kerja php >Laravel >Cara menggunakan kaedah pengisian laravel
Dalam laravel, kaedah isian ialah kaedah untuk menetapkan atribut kepada kejadian Eloquent Kaedah ini boleh difahami sebagai digunakan untuk menapis medan berlebihan yang dihantar dari bahagian hadapan yang sepadan dengan model apabila kaedah ini dipanggil, ia akan terlebih dahulu Untuk mengesan status Model semasa, Model akan berada dalam keadaan berbeza mengikut tetapan tatasusunan boleh diisi.
Persekitaran pengendalian artikel ini: sistem Windows 10, Laravel versi 6, komputer Dell G3.
Kaedah isian ialah kaedah untuk menetapkan atribut kepada kejadian Eloquent.
Mari klik pada kaedah isian dan lihat sumbernya kod dahulu: Array
Versi yang digunakan oleh pengarang di sini ialah versi terbaru Laravel 5.5 Untuk kemudahan membaca, bingkai anotasi telah dipadamkan
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; }
Pertama sekali, anda boleh melihat bahawa Laravel akan mula-mula memanggil salah satu kaedah TotallyGuardednya sendiri, mari kita klik pada kaedah ini: Fungsi
public function totallyGuarded() { return count($this->getFillable()) == 0 && $this->getGuarded() == ['*']; }
Anda dapat melihat bahawa fungsi kaedah ini adalah untuk mendapatkannya yang boleh diisi dan dikawal, dan kemudian tentukan sama ada kedua-duanya berada dalam keadaan bukan kumpulan yang boleh diagihkan, dan akhirnya mengembalikan nilai Boolean ini
// 返回一个 True or False 的布尔值 // 若是未设置 fillable 与 guarded,则会返回 True (注意,在这种状况下,此 `Model` 是不容许批量赋值任何属性的哦) // 反之则返回 False $totallyGuarded = $this->totallyGuarded();
Ok, mari kita kembali kepada kaedah isian tadi dan teruskan melihat reka bentuk
Seterusnya ialah gelung foreach, tetapi sebelum gelung, Atribut tugasan Laravel melaksanakan kaedah fillableFromArray Klik masuk dan lihat kod
protected function fillableFromArray(array $attributes) { if (count($this->getFillable()) > 0 && ! static::$unguarded) { return array_intersect_key($attributes, array_flip($this->getFillable())); } return $attributes; }
Kaedah ini akan mengesan sama ada anda mempunyai mentakrifkan nilai dalam tatasusunan boleh diisi Jika nilai ditakrifkan, nilai boleh diisi dan atribut akan dikembalikan, jika tidak, kembalikan acara atribut sendiri
dan kemudian kembali untuk mengisi selepas memanggil fillableFromArray parameter, satu-satunya nilai yang dikembalikan ialah atribut yang kami benarkan penugasan kelompok (jika anda mentakrifkan )ip
Gelung baris pertama, mula-mula gunakan removeTableFromKey untuk memproses Kunci parameter dan padamkan nama jadual dalam kekuncinya. Kaedah ini tidak akan diterangkan terlalu banyak Ia hanya fungsi untuk pemisahan rentetan dan nilai rem
$key = $this->removeTableFromKey($key);
Melihat ke bawah, Laravel memanggil kaedah isFillable untuk setiap atribut diisi untuk memastikan bahawa ini atribut boleh diisi. Mari kita lihat kod sumbernya:
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, '_'); }
Anda boleh melihat bahawa dalam kaedah ini, Laravel terlebih dahulu menentukan sama ada Model telah melumpuhkan pengawalan (dijaga Jika Model tidak). dayakan pengawalan, ia akan mengembalikan True secara langsung
if (static::$unguarded) { return true; }
jika ia didayakan, maka ia akan dinilai sama ada atribut ini wujud dalam tatasusunan boleh diisi Jika ia wujud, Benar akan dikembalikan .
if (in_array($key, $this->getFillable())) { return true; }
Jika atribut ini tidak wujud dalam tatasusunan yang boleh diisi, maka Laravel akan menilai semula sama ada atribut ini wujud dalam tatasusunan yang dilindungi Jika ia wujud dalam tatasusunan ini, maka harta ini bukan harta yang boleh ditetapkan dalam kelompok, dan Palsu akan dikembalikan secara langsung.
if ($this->isGuarded($key)) { return false; }
Jika tiada satu pun di atas dipenuhi, maka Laravel akan Akhirnya, ia akan menentukan sama ada tatasusunan boleh diisi sendiri kosong dan atribut ini bermula dengan _, kemudian kembalikan nilai Boolean
return empty($this->getFillable()) && ! Str::startsWith($key, '_');
dan kemudian kembali ke kaedah isian untuk melihat sama ada atribut ini telah ditapis oleh kaedah isFillable , kemudian tetapkan atribut ini kepada dirinya sendiri (disebabkan masa yang terhad, kaedah setAttribute tidak akan dibincangkan secara terperinci~),
$this->setAttribute($key, $value);
Jika ia tidak ditapis oleh kaedah isFillable, maka Laravel akan menentukan sama ada Modelnya sendiri berada dalam There is no sekatan pada status penugasan kelompok mana-mana atribut Jika tidak, Laravel akan terus membuang Pengecualian
// 判断此属性是否经过了检测 if ($this->isFillable($key)) { // 将此属性赋值给自身 $this->setAttribute($key, $value); // 若是没有经过检测,那么判断一下自身 `Model` 是否为所有不可批量赋值状态,若是是,那么会抛出一个 `Exception` } elseif ($totallyGuarded) { throw new MassAssignmentException($key); }
Selepas mengesan dan menetapkan semua atribut, Laravel akan mengembalikan dirinya
mengembalikan $ini;
Analisis telah selesai, di atas ialah kod sumber kaedah isian~, dan akhirnya ringkasan
Apabila anda memanggil kaedah isian, Laravel akan mula-mula mengesan Status Model semasa,
Apabila anda menetapkan tatasusunan boleh diisi tetapi tidak menetapkan tatasusunan terkawal, maka Model ini akan berada dalam keadaan di mana hanya atribut yang ditentukan boleh diberikan dalam kelompok
Apabila anda tidak menetapkan tatasusunan boleh diisi, Tetapi apabila tatasusunan terkawal ditetapkan, maka Model akan berada dalam keadaan di mana mana-mana atribut boleh ditetapkan dalam kelompok
Bagi situasi di mana anda menetapkan tatasusunan boleh diisi dan dikawal pada masa yang sama, kami tidak akan membincangkannya, kerana berbuat demikian akan menyebabkan anda dimanipulasi oleh Laravel
dan kemudian panggil fillableFromArray untuk mendapatkan persilangan atribut dan tatasusunan yang boleh diisi pengawal, maka kaedah ini akan terus mengembalikan atribut
dan kemudian Laravel akan Membuat gelung pada tatasusunan yang dikembalikan Dalam gelung ini, Laravel akan memanggil kaedah isFillable untuk setiap atribut untuk menyemak sama ada atribut boleh diisi. Jika ia tidak dikesan oleh kaedah ini (ia tidak wujud dalam tatasusunan boleh diisi dan tatasusunan terkawal tidak ditetapkan atau wujud) dalam tatasusunan terkawal), maka Laravel akan mengesan sama ada Model semasa berada dalam keadaan di mana hanya atribut tertentu boleh ditetapkan dalam kelompok. Jika ya, Pengecualian
akan dilemparkan terus, dan kemudian Laravel akan mengembalikan $ini selepas menyelesaikan operasi tugasan
[Cadangan berkaitan: tutorial video laravel. ]
Atas ialah kandungan terperinci Cara menggunakan kaedah pengisian laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!