Thuộc tính có thể điền trong Laravel là gì?

Khi làm việc với Laravel và Eloquent, bạn có thể tận dụng một loạt các hàm trợ giúp thú vị giúp việc chèn, cập nhật và xóa dữ liệu khỏi cơ sở dữ liệu của bạn trở nên rất dễ dàng

Hãy bắt đầu với một ví dụ nhanh về cách bạn có thể tạo một bài đăng mới



$post = new Post;
$post->title = 'My Awesome Post';
$post->body = 'This is the body of my post';
$post->active = 1;
$post->save();

Điều đó có vẻ đủ đơn giản, phải không? . Bạn có thể tiến thêm một bước và tạo một bài đăng mới như thế này



$post = Post::create([
            'title' => 'My Awesome Post',
            'body' => 'This is the body of my post',
            'active' => 1
        ]);

Rất có thể bạn sẽ gặp lỗi từ ví dụ trước trừ khi bạn cho Mô hình Hùng biện Bài đăng của mình biết giá trị nào được phép 'điền hàng loạt'

Nếu bạn định 'gán hàng loạt' biến cho Mô hình bài đăng của mình, bạn cần chỉ định biến nào có thể điền được. Bạn có thể dễ dàng làm điều đó bằng cách thêm một thuộc tính được bảo vệ



$post = Post::create([
            'title' => 'My Awesome Post',
            'body' => 'This is the body of my post',
            'active' => 1
        ]);
0 vào lớp của mình như vậy



namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $fillable = ['title', 'body', 'active'];
}

Ngoài ra còn có một cách khác mà bạn có thể chỉ định điều này bằng cách sử dụng thuộc tính



$post = Post::create([
            'title' => 'My Awesome Post',
            'body' => 'This is the body of my post',
            'active' => 1
        ]);
1. Theo mặc định, tất cả các cột trong Eloquent Model đều bảo vệ chống lại 'chỉ định hàng loạt', nhưng nếu bạn đặt


$post = Post::create([
            'title' => 'My Awesome Post',
            'body' => 'This is the body of my post',
            'active' => 1
        ]);
2 thành một mảng trống, nó sẽ thông báo rằng bạn có thể 'chỉ định hàng loạt' tất cả các cột



namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $guarded = [];
}

Đảm bảo bạn cẩn thận về việc cho phép tất cả các cột được gán hàng loạt. Bạn sẽ muốn đảm bảo rằng bạn xác minh tất cả các trường mà người dùng đang gửi, nếu không bạn có thể gặp phải một vài lỗ hổng

Đây là một ví dụ nhanh



public function createPost(Request $request){
    $post = Post::create( $request->all() );
}

Giả sử bạn đã gửi biểu mẫu tất cả thông tin cần thiết cho một bài đăng, nếu bạn không muốn cho phép người dùng đặt cột



$post = Post::create([
            'title' => 'My Awesome Post',
            'body' => 'This is the body of my post',
            'active' => 1
        ]);
3 thành


$post = Post::create([
            'title' => 'My Awesome Post',
            'body' => 'This is the body of my post',
            'active' => 1
        ]);
0, họ có thể dễ dàng mở Công cụ dành cho nhà phát triển và đưa trường sau vào biểu mẫu của bạn

🤩 Nhà tài trợ tuyệt vời của chúng tôi 👇

Thuộc tính có thể điền trong Laravel là gì?
Xem trang web

DigitalOcean cung cấp giải pháp lưu trữ đám mây đơn giản và đáng tin cậy cho phép các nhà phát triển nhanh chóng thiết lập và chạy trang web hoặc ứng dụng của họ

Thuộc tính có thể điền trong Laravel là gì?
Xem trang web

Bảng công việc chính thức của Laravel. Tìm các nhà phát triển Laravel giỏi nhất và tài năng nhất bằng cách đăng công việc của bạn trên bảng việc làm chính thức của Laravel

Thuộc tính có thể điền trong Laravel là gì?
Xem trang web

Tìm hiểu cách viết mã chuỗi khối của riêng bạn và tạo tiền điện tử của riêng bạn với nền tảng đào tạo trực tuyến thú vị và tương tác CoinCap. Tìm hiểu thêm về chương trình tài trợ DevDojo và xem biểu trưng của bạn tại đây để đưa thương hiệu của bạn đến với hàng nghìn nhà phát triển.

<input type="hidden" name="active" value="1">

Bây giờ, khi họ gửi biểu mẫu, bài đăng này sẽ được đặt thành hoạt động. Thay vào đó, nếu



$post = Post::create([
            'title' => 'My Awesome Post',
            'body' => 'This is the body of my post',
            'active' => 1
        ]);
3 được thêm vào mảng


$post = Post::create([
            'title' => 'My Awesome Post',
            'body' => 'This is the body of my post',
            'active' => 1
        ]);
1, điều này sẽ ngăn người dùng "hack biểu mẫu của bạn"

Đó là nó. Sử dụng thuộc tính



$post = Post::create([
            'title' => 'My Awesome Post',
            'body' => 'This is the body of my post',
            'active' => 1
        ]);
0 và


$post = Post::create([
            'title' => 'My Awesome Post',
            'body' => 'This is the body of my post',
            'active' => 1
        ]);
1 cho phép bạn chỉ định cột nào trong bảng của mình (Mô hình Eloquent) có thể được gán hàng loạt

Gán hàng loạt là một quá trình gửi một mảng dữ liệu sẽ được lưu vào mô hình đã chỉ định cùng một lúc. Nói chung, bạn không cần phải lưu dữ liệu trên mô hình của mình trên cơ sở từng cái một, mà là trong một quy trình duy nhất

Chuyển nhượng hàng loạt là tốt, nhưng có một số vấn đề bảo mật đằng sau nó. Điều gì sẽ xảy ra nếu ai đó chuyển giá trị cho mô hình và không có sự bảo vệ, họ chắc chắn có thể sửa đổi tất cả các trường bao gồm cả ID. Điều đó không tốt

Giả sử bạn có bảng 'sinh viên', với các trường “student_type, first_name, last_name, dob, Gender”. Bạn có thể muốn gán hàng loạt “first_name, last_name, dob, sex” nhưng bạn muốn bảo vệ student_type khỏi bị thay đổi trực tiếp. Đó là nơi có thể lấp đầy và được bảo vệ

Có thể lấp đầy là gì?

Có thể điền cho phép bạn chỉ định trường nào có thể gán hàng loạt trong mô hình của bạn. Hãy lấy ví dụ trên, bạn có thể làm điều đó bằng cách thêm biến đặc biệt $fillable vào mô hình. Vì vậy trong mô hình

class Student extends Model {protected $fillable = [‘first_name’, ‘last_name’, ‘email’]; //← only the field names inside the array can be mass-assign}

Như bạn đã nhận thấy, ' id, student_type ' không được bao gồm, có nghĩa là chúng được miễn

Bảo vệ là gì?

Guarded là mặt trái của fillable. Nếu có thể điền chỉ định trường nào sẽ được gán hàng loạt, thì được bảo vệ chỉ định trường nào không thể gán hàng loạt. Vì vậy trong mô hình

________số 8

Nếu bạn muốn chặn tất cả các trường được gán hàng loạt, bạn có thể làm điều này

protected $guarded = [‘*’];

Vì vậy, khi nào bạn sẽ sử dụng có thể lấp đầy hoặc được bảo vệ?

Sử dụng có thể điền là tốt khi bạn có 2–10 trường, nhưng nếu bạn có 20–50 trường trong mô hình của mình thì sao? . Tin tôi đi, đó là một công việc khá. Bạn có thể sử dụng “Tôi không nói rằng điều đó không tốt” trong tình huống này, nhưng nếu bạn muốn một cách dễ dàng hơn để bảo vệ nó khỏi sự gán hàng loạt, thì người bảo vệ sẽ thích hợp hơn

Những từ cuối

Mặc dù $fillable đóng vai trò là "danh sách trắng" gồm các thuộc tính có thể gán hàng loạt, nhưng bạn cũng có thể chọn sử dụng $guarded. Thuộc tính $guarded phải chứa một mảng các thuộc tính mà bạn không muốn gán hàng loạt. Tất cả các thuộc tính khác không có trong mảng sẽ được gán hàng loạt. Vì vậy, chức năng $guarded giống như một “danh sách đen”. Tất nhiên, bạn nên sử dụng $fillable hoặc $guarded — không phải cả hai

Cái gì có thể điền và bảo vệ trong Laravel?

Trong Laravel, thuộc tính có thể điền được sử dụng để chỉ định các trường sẽ được gán hàng loạt. Các thuộc tính được bảo vệ được sử dụng để chỉ định những trường không thể gán hàng loạt .

Có thể gán hàng loạt nghĩa là gì trong Laravel?

Gán hàng loạt là quá trình gửi một mảng dữ liệu sẽ được lưu vào mô hình đã chỉ định cùng một lúc . Nói chung, bạn không cần lưu dữ liệu trên mô hình của mình trên cơ sở từng cái một, mà là trong một quy trình duy nhất.

Cái gì được bảo vệ trong Laravel?

Laravel sử dụng protected để bảo vệ bạn khỏi sự xâm phạm vào cơ sở dữ liệu của bạn . Giống như tiêm Sql. Nó cũng chứa các câu lệnh thoát khỏi bất kỳ mối đe dọa nào mà người dùng sẽ chuyển qua các biểu mẫu của bạn. Theo dõi câu trả lời này để nhận thông báo.

ORM trong Laravel là gì?

Eloquent là một trình ánh xạ quan hệ đối tượng (ORM) được bao gồm theo mặc định trong khuôn khổ Laravel. ORM là phần mềm hỗ trợ xử lý các bản ghi cơ sở dữ liệu bằng cách biểu diễn dữ liệu dưới dạng các đối tượng, hoạt động như một lớp trừu tượng trên cùng của công cụ cơ sở dữ liệu được sử dụng để lưu trữ dữ liệu của ứng dụng.