2011-02-24 39 views
6

Trong khung công tác CakePHP, các quy tắc xác thực là một thuộc tính của mô hình. Đó là, không quan trọng dữ liệu đến từ đâu: khi bạn muốn viết nó trong một mô hình, nó sẽ phải vượt qua xác nhận.Xác nhận là thuộc tính của biểu mẫu

Thay vì trong symfony, bạn chỉ định quy tắc xác thực cho mỗi biểu mẫu. Vì có thể có nhiều hơn một biểu mẫu cho mỗi mô hình (và các biểu mẫu có thể liên quan đến dữ liệu từ các mô hình khác nhau), kết quả là dữ liệu cho một số mô hình có thể phải vượt qua các bộ lọc khác nhau, theo biểu mẫu của nó.

Tôi hiểu rằng điều này đôi khi có thể hữu ích và thực tế CakePHP cung cấp các phương thức để xác định các quy tắc xác thực khác nhau nếu bạn muốn. Nhưng đây là ngoại lệ, không phải là quy tắc. Dường như với tôi rằng việc thiết kế theo cách khác sẽ mở ra cánh cửa cho các lỗi, nơi bạn cập nhật các quy tắc xác thực của mình, nhưng quên kiểm tra tất cả các biểu mẫu.

Mặt khác, tôi chắc chắn rằng Fabien Potencier thông minh hơn tôi, và có lẽ đã đặt một số suy nghĩ vào thiết kế này. Vì vậy, câu hỏi mhy là:

Lý do chính đáng để xác thực mỗi biểu mẫu (như một quy tắc, không phải là ngoại lệ)?

+0

Tại sao lưu ý lại? Tôi nghĩ rằng đây là một câu hỏi hợp pháp về một sự lựa chọn thiết kế. : -? – Andrea

+1

"Dường như với tôi rằng việc thiết kế theo cách khác sẽ mở ra cánh cửa cho các lỗi, nơi bạn cập nhật các quy tắc xác thực của mình, nhưng quên kiểm tra tất cả các biểu mẫu". Nếu tôi hiểu mối quan tâm của bạn một cách chính xác, bạn có thể tránh điều này bằng cách tạo các lớp con của biểu mẫu của bạn và chỉ thay đổi các trình xác thực cụ thể cho lớp con đó. Ví dụ, để giới hạn email đến một miền cụ thể cho một kiểu người dùng cụ thể, như trong ví dụ của circusdei, tạo 'lớp UserRegistrationForm mở rộng UserForm' và thay thế trình xác thực 'toàn cầu' bằng một trình cụ thể. – yitznewton

Trả lời

3

Tôi sẽ nói rằng chúng là 2 thứ khác nhau.

Mẫu Xác Nhận - xác nhận rằng các dữ liệu đi vào các mô hình có hiệu lực kiên trì và duy trì tính toàn vẹn logic kinh doanh (chung xác nhận CakePHP)

Daïng Filtering - xác nhận rằng mẫu được điền trong việc sử dụng các giá trị có thể chấp nhận. Rõ ràng có một số chồng lên nhau và rất nhiều thời gian xác nhận biểu mẫu được xử lý bởi xác thực mô hình. Lần khác nó có thể không được.

Ví dụ: biểu mẫu có thể cần biết trạng thái của hộp kiểm để xác định phần tiếp theo của trình hướng dẫn cần được hiển thị. Điều này không liên quan gì đến mô hình nhưng là một yêu cầu xác thực hợp lệ.(hộp kiểm hoặc nút radio có giá trị trong một tập hợp các giá trị pháp lý)

Tất nhiên, bằng cách sử dụng CakePHP bạn có thể dễ dàng viết một thành phần/hành vi kết hợp với cả hai kịch bản bằng cách sử dụng các chỉ mục có khóa trong mảng xác nhận. Đủ dễ dàng để đặt khóa 'mặc định' được sử dụng luôn và khóa cho mỗi 'hành động' xác định logic xác thực bổ sung.

Thậm chí còn có một vài giải pháp được tạo sẵn nếu bạn google một chút.

1

Lý do chính xác như tôi biết: 1. Vài biểu mẫu. 2. Các biểu mẫu có chức năng rất khác nhau. 3. email có thể cần phải vượt qua các xác nhận khác nhau (email đăng nhập có thể cần phải có một URL từ [email protected], trong khi email đăng ký có thể từ bất kỳ tên miền nào).

2

Bạn quên mất khả năng xâm nhập. Đây là những gì tôi muốn nói:

  • quy tắc xác nhận cơ bản xuất phát từ giản đồ cơ sở dữ liệu của bạn, những thứ như chiều dài chuỗi, loại lĩnh vực, vv - những đi vào lớp BaseModelForm
  • bạn có thể dễ dàng ghi đè lên những trong lớp con, như ModelForm (và bạn được khuyên, vì lớp Base ~ được tạo tự động và bạn sẽ mất các sửa đổi ở regen kế tiếp)
  • bạn có thể phân lớp lại nếu bạn cần thay đổi một vài trình xác nhận (hoặc widget).

Đôi khi tôi có các quy tắc xác thực khác nhau cho mỗi biểu mẫu, như quy tắc phụ trợ, một cho giao diện người dùng - mặc dù họ đang xử lý cùng một mô hình. Các quy tắc cơ bản đến từ lớp được tạo tự động và tôi thay đổi một vài tiện ích và trình xác thực hoặc loại bỏ một vài.

Các vấn đề liên quan