Làm việc với form trong yii2

0
963

Việc lấy dữ liệu từ người dùng điền để đưa lên website chúng ta cần 1 mô hình để lấy dữ liệu từ người dùng tải lên và trả lại kết quả cho người dùng trên cùng 1 view .Giả sử nếu bạn làm 1 form nhập với các điều kiện đúng và sai đúng thì render ra 1 view đúng và sai thì render ra 1 view khác thì bây giờ chỉ với việc thêm 1 model thì việc trả dữ liệu từ action sẽ chỉ ra 1 view giúp bạn tiết kiệm nhiều đoạn code dư thừa và giúp code sáng sủa hơn .

Yii2 có 2 kiểu tạo form đó là Model với ActiveRecord .Nhiều bạn thắc mắc cách dùng của 2 cái này khi nào dùng cái nào .Theo ý mình thì nếu bạn làm việc from nhập liệu vào database thì nên dùng ActiveRecord để giúp truy xuất dữ liệu còn nếu check thông tin người dùng không cần thiết lưu database bạn nên dùng Model cho nhanh

Sau đây mình sẽ hướng dẫn các bạn cách tạo 1 form bằng model hoàn chỉnh từ Model đến View luôn 🙂

Tạo model

Bạn cần tạo 1 model để xác định thông tin đầu vào và check xem dữ liệu người dùng nhập đúng chưa tránh việc hacker xử dụng sql inject .

<?php
namespace frontend\models;
use yii\base\Model;
use common\models\User;
/**
 * Signup form
 */
class TestForm extends Model
{
    public $name;
    public $email;
    public $noi_dung;
    public $title;
    /**
     * @inheritdoc
     */
    public function rules()
    {
        
        return [
             [['name', 'title', 'noi_dung'], 'string'],
              
            ['email', 'email'],
            ['email','required'],
            ['title', 'string', 'max' => 255],
            ['noi_dung', 'string', 'max' => 2000],
           [['name', 'title', 'noi_dung'], 'required', 'message' => 'Please nhập dữ liệu vào.']
        ];
    }
}



Ở đây mình check các thông tin nhập vào với các kiểu giá trị và độ dài như trên .Nếu bạn nhập from ko theo luật này thì xác định ko gửi được form nhé. Tiếp theo đến phần

Controller chúng ta sẽ gọi đến form vừa khai báo ở trên

<?php
namespace frontend\controllers;
/**
 * Coder By : Nguyễn Anh Hiến
 * @link http://facebook.com/hienk8ccntt
 */
class TestformController extends \yii\web\Controller {

    public function actionIndex() {
        $model = new \frontend\models\TestForm();
        if ($model->validate() & \Yii::$app->request->post()) {
            return $this->render('thanhcong', ['model' => $model]);
        } else {
            return $this->render('form', ['model' => $model]);
        }
    }

}

Ở đây nếu mình check nếu bạn có gửi thông tin dạng post lên và đáp ứng các rules của giá trị nhập trên thì controller sẽ render ra file view tên là thanhcong còn nếu ko thì render ra file view tên là form

File view tên form ta sẽ làm form để người dùng nhập dữ liệu vào .File view mình viết có dạng sau

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
/**
 * Coder By : Nguyễn Anh Hiến
 * @link http://facebook.com/hienk8ccntt
 */
/* @var $this yii\web\View */
/* @var $model common\models\Status */
/* @var $form yii\widgets\ActiveForm */
$this->title = Yii::t('frontend', 'Statuses');
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="col-lg-12 main">
 <?php $form = ActiveForm::begin(); ?>

    <?= $form->field($model, 'name')->textInput() ?>

    <?= $form->field($model, 'title')->textInput() ?>

    <?= $form->field($model, 'noi_dung')->textInput() ?>
    <?= $form->field($model, 'email')->textInput() ?>

    <div class="form-group">
        <?= Html::submitButton('Gửi') ?>
    </div>

    <?php ActiveForm::end(); ?>

</div>

Bạn cso thể xem và tham khảo nhé .Giờ nếu nhập sai dữ liệu thì sẽ có 1 thông báo bên dưới cho bạn .

error_validate_yii2

Đấy chính là tác dụng của form .Bạn nên dùng form để check những thông tin mà người dùng gửi lên nhé .Tóm lại với mô hình MVC thì model thực hiện 2 chức năng là kết nối và tương tác với database và phần thứ 2 là xử lý thông tin dữ liệu