hbsprogram.com

thủ thuật wordpress ,vps và mình thích thì mình viết thôi

Models là 1 thành phần quan trọng trong mô hình MVC .Ở đây xử lý dữ liệu,quy tắc và logic trong ứng dụng

Ở trong phần này chúng ta sẽ quan tâm đến các vấn đề :

  • Attributes : đại diện cho dữ liệu và có thể được truy cập như thuộc tính đối tượng hoặc các phần tử mảng bình thường;
  • Attribute labels :Chỉ thị nhãn hiển thị cho các thuộc tính ,Cái này thường kết hợp với i18n để làm đa ngôn ngữ
  • Massive assignment : Hỗ trợ 1 cách đơn giản nhiều thuộc tính
  • Validation rules : Kiểm tra dữ liệu đầu vào dựa trên các quy tắc xác nhận khai báo;
  • Data Exporting : Cho phép model xuất dữ liệu với nhiều kiểu định dạng khác nhau

1 Attributes

Models trình bầy dữ liệu data dưới dạng các thuộc tính .Mỗi thuộc tính giống như 1 tài sản công khai của 1 bảng dữ liệu .Phương thức  yii\base\Model::attributes() xác định mỗi thuộc tính của 1 lớp models .

Ví dụ :

tạo file model trong frontend/model

<?php
namespace frontend\models;
use yii\base\Model;

class Demo extends Model
{
	public $name;
	public $email;
	public $password;
}

Bây giờ đến lúc test xem Attributes

<?php
namespace frontend\controllers;
use Yii;
use yii\web\Controller;
use frontend\models\Demo;

class DemoController extends Controller
{
	
	public function actionIndex()
	{
		$model = new Demo();
		$model->name="Hien";
		echo $model->name;
		$data="Hello word";
		return $this->render('index',['data'=>$data]);
	}
	
}

2 Attribute Labels

Bạn muốn hiển thị dữ liệu hoặc lấy dữ liệu đầu vào ,Bạn cần hiển thị 1 tên labels ví dụ như ở đây mình muốn hiển thị name thay bằng Họ tên ,email bằng Email của bạn,password là password của bạn .Đoạn code dưới đây mình đã sử dụng attributeLabels

<?php
namespace frontend\models;
use yii\base\Model;

class Demo extends Model
{
	public $name;
	public $email;
	public $password;
	public function attributeLabels()
	{
		return [
				'name' =>"Họ tên",
				'email' =>"Email của bạn",
				'password' =>"Pass word",
		];
	}
}

Khi sử dụng bạn chỉ cần dùng như sau

$model = new Demo();
		echo $model->getAttributeLabel('name');

3 Scenarios Kịch bản

Mỗi một mô hình dữ liệu được sử dụng trong các tình huống khác nhau .Ví dụ như tình huống đăng nhập,đăng kí .Đăng nhập bạn cần những thứ như email,password .Còn đăng kí thì bạn cần nhiều hơn :Email,password,Họ tên ,Ngày sinh …. .Vấn đề ở đây là bạn có phần đăng nhập gồm những thuộc tính con trong phần đăng kí .Chẳng nhẽ tách làm 2 model như vậy sẽ rất phiền hà .Yii2 đã giải quyết việc đó bằng cách scenarios() tạo ra các kịch bản khác nhau cho từng trường hợp khác nhau .Đây là 1 phần rất quan trọng trong model nó có nhiệm vụ xử lý các vấn đề logic như phần đầu đưa ra .DƯới đây là ví dụ về scenarios()

Ở phần models

<?php
namespace frontend\models;
use yii\base\Model;
use Codeception\Scenario;

class Demo extends Model
{
	public $name;
	public $email;
	public $password;
	const LOGN_IN='login';
	const SIGN_UP='signup';
	public function scenarios()
	{
		return 
		[
			self::LOGN_IN =>['email','password'],
			self::SIGN_UP =>['email','password','name'],
		];
	}
	public function attributeLabels()
	{
		
		return [
				'name' =>"Họ tên",
				'email' =>"Email của bạn",
				'password' =>"Pass word",
		];
	}
}

Còn phần Controller việc áp dụng đơn giản

$model = new Demo(['scenario' => 'login']);

Vậy là bạn đã xong phần scenarios();

4 Data Exporting

 

Dữ liệu cần có khả năng xuất ra các định dạng khác nhau như xuất ra kiểu json,xml hoặc dạng excel .Ví dụ dưới đây

$user = \frontend\models\User::findOne(100);
$array_user = $user->attributes;

5 Rules

rules trong models có nhiệm vụ check dữ liệu nhập vào .Rules() giống kiểu cái phiễu lọc dữ liệu mà người dụng nhập vào .Nhìn vào đoạn code dưới đây bạn sẽ thấy rules được viết như nào

public function rules()
{
    return [
        [['name', 'email', 'password'], 'required'],

        // the email attribute should be a valid email address
        ['email', 'email'],
        ['password','password'],
    ];
}

Ở các bài viết tiếp theo mình sẽ chỉ rõ các trường dữ liệu như interger hay double ,string được dùng như sao tại rules

Có gì khó hiểu bạn hãy để lại comment mình rất vui lòng giải đáp