2013-08-20 14 views
7

Tôi muốn cập nhật mô hình của tôi với đoạn mã sau:hộp kiểm Xử lý trong Input :: tất cả() trong Laravel 4

$feature = Feature::find($id)->update(Input::all()); 

này làm việc cho tất cả các lĩnh vực ngoại trừ -field "thực hiện" mà là một boolean trong bảng và được biểu thị bằng hộp kiểm trong biểu mẫu chỉnh sửa.

{{ Form::label('done', 'Done?')}} 
{{ Form::checkbox('done',1)}} 

Làm cách nào tôi có thể xử lý hộp kiểm có cập nhật và Nhập: tất cả()?

Cảm ơn bạn.

+0

Tôi khuyên bạn nên tránh sử dụng 'Input :: all()'. Bằng cách đó, bạn đang cho phép bất kỳ ai có kiến ​​thức HTML tối thiểu để cập nhật các trường không thể chỉnh sửa được trên mô hình của bạn. Ngay cả khi bạn xác định '$ có thể truy cập được 'trên mô hình của mình, nó quá rủi ro. – vFragosop

+0

Cảm ơn lời khuyên đó. Tôi sẽ sử dụng 'Input: all()' chỉ cho những mô hình mà người dùng có thể chỉnh sửa. Các thuộc tính không nên được chỉnh sửa bởi người dùng do đó sẽ được bảo vệ. – Strernd

+2

Sử dụng mảng $ fillable trong mô hình là một ý tưởng hay khi sử dụng Input :: all(). Từ các tài liệu: "Thuộc tính có thể điền được chỉ định các thuộc tính nào nên được gán hàng loạt. Điều này có thể được đặt ở cấp lớp hoặc cấp độ thể hiện. . " –

Trả lời

24

Tôi tìm thấy một workaround cho điều này

{{ Form::hidden('done', 0); }} 
{{ Form::checkbox('done', 1); }} 
+0

Đây là cách để làm! –

+1

Nếu bạn đã chọn 'thực hiện' và xác thực không thành công, cả hai đều không được tự động điền với 1? Sau đó, gửi tiếp theo nó sẽ không quan trọng nếu họ bỏ chọn nó, nó vẫn sẽ đi qua như kiểm tra. Một công việc xung quanh sẽ là tự thêm HTML cho đầu vào bị ẩn để tránh nó được điền sau khi xác thực. – Justin

+3

Lưu ý điều này sẽ gây ra một vấn đề (ít nhất là trong Laravel 5) nếu bạn đang sử dụng mẫu :: khi chỉnh sửa bản ghi, vì mô hình sẽ tự động thay đổi giá trị ẩn thành 1 nếu 'hoàn thành' trước đó được đặt thành 1. Nếu bạn sử dụng '' nó tránh bất kỳ vấn đề nào với Form :: model ghi đè giá trị. – alexleonard

1

Tôi đang thực hiện một kiểm tra nhanh chóng trước khi lưu.

if(!Input::get('someCheckbox')) $feature->someCheckbox = 0; 
1

Tôi biết điều này là cũ, nhưng tôi thấy cách này có hiệu quả nhất khi điền dữ liệu mẫu

$myModel->fill(array_merge(['checkBoxName1'=>'0','checkBoxName2'=>'0'], $request->all())); 

hoặc trong trường hợp của OP nó sẽ là như thế này:

$feature = Feature::find($id)->update(array_merge(['checkBoxName1'=>'0','checkBoxName2'=>'0'],Input::all())); 

Tôi chỉ thích cách đó hơn là thêm một trường ẩn.