Để người dùng có thể gửi các thông tin từ website tới server chúng ta thường sử dụng form trong html. Trong bài viết này, chúng ta sẽ sử dụng widget ActiveForm trong Yii2 thay cho việc dùng form html thông thường để lấy các thông tin từ người dùng.
Tạo mới Form Input
- Do ActiveForm hỗ trợ sử dụng với model nên tại hạ sẽ tạo ra 1 model, 1 view để hiển thị và 1 action trong SiteController để xử lý các request từ form.
Ở đây, tại hạ tạo 1 file model là Contact.php trong frontend/models như sau:
+ Trong model tại hạ có khai báo 2 thuộc tính là name và email. Hàm rules() là hàm có nhiệm vụ validate dữ liệu gửi từ người dùng, ở đây tại hạ sử dụng rule name là required để bắt buộc thông tin nhập vào không để trống, thuộc tính email có thêm rule là email để check email đúng định dạng
Tiếp theo tạo 1 view là contact.php trong frontend/views/site như sau:
+ Ở view contact, ActiveForm được sử dụng với phương thức begin() tương ứng với thẻ <form> và end() tương ứng với thẻ </form> khi render ra HTML, button submit form tại hạ cũng đã sử dụng helper Html của Yii2 là submitButton() để tạo ra 1 button submit
Cuối cùng là tạo 1 actionContact trong frontend/controllers/SiteController.php:
+ Trong hàm actionContact, tại hạ sẽ khởi tạo 1 đối tượng Contact Model, sau đó sẽ check xem các thông tin request từ người dùng có hợp lệ không thông qua hàm validate(), hàm load() được sử dụng để đối tượng Contact có thể lấy giá trị các thuộc tính email, name hoặc cách khác có thể lấy trực tiếp qua request:
Ví dụ muốn lấy giá trị POST lên từ input của email: Yii::$app->request->post('email').
Trong case này, nếu các trường thông tin đẩy lên là hợp lệ, thì sẽ in ra thông tin email và name, còn nếu không hợp lệ sẽ hiển thị ra message thông báo ứng với các rules đã khai báo bên Model
Tiếp tục, tại hạ sẽ truy cập URL: http://localhost/advanced/site/contact và được kết quả
Để thử validate form, tại hạ sẽ submit mà không nhập gì và thử với 1 email không đúng định dạng
- Trường hợp không nhập gì rồi submit:
- Trường hợp nhập email sai định dạng:
Như vậy rules đã hoạt động, bây giờ tại hạ sẽ nhập chính xác để xem hệ thống có in ra thông tin không
Vậy là đã hiển thị ra thông tin email và name từ việc submit form.
Nếu muốn setup các thông tin như method, attribute của thẻ form, các đồng code sẽ chỉnh lại trong hàm begin() như sau, ví dụ ở đây tại hạ muốn để method là POST, id là contact-form
Ngoài các thuộc tính trên, các đồng code có thể khai báo thêm các thuộc tính khác.