Yii2 with MongoDB

I. Lời nói đầu

- Yii2 là một PHP framework có hiệu suất cao tốt cho việc phát triển các ứng dụng Web 2.0. Yii2 đi kèm với các tính năng phong phú : MVC, DAO / ActiveRecord, i18n / l10n, bộ nhớ đệm, xác thực và kiểm soát truy cập dựa trên vai trò, cấu trúc, thử nghiệm... Nó có thể làm giảm thời gian phát triển ứng dụng WEB của bạn một cách đáng kể.

+) Yii2 chỉ tải các tính năng mà bạn cần. Nó có hỗ trợ bộ nhớ đệm mạnh mẽ. Nó được thiết kế một cách rõ ràng để làm việc hiệu quả với AJAX. +) Security đi kèm như là tiêu chuẩn với Yii. Nó bao gồm xác nhận đầu vào, lọc đầu ra, SQL injection và phòng chống Cross-site scripting.

+) Yii2 giúp bạn phát triển mã sạch và tái sử dụng. Nó theo mô hình MVC, bảo đảm một sự tách biệt rõ ràng của logic và trình bày.

- MongoDB là 1 hệ thống CSDL mã nguồn mở được phát triển và hỗ trợ bởi 10gen, là CSDL NoSQL hàng đầu được hàng triệu người sử dụng. Thay vì lưu trữ dữ liệu dưới dạng bảng và các tuple như trong các CSDL quan hệ thì nó lưu trữ dữ liệu dưới dạng JSON (trong MongoDB được gọi là dạng BSON vì nó lưu trữ dưới dạng binary từ 1 JSON document).

II. Yii2 với MongoDB

1. Cài đặt Yii2 và MongoDB

a. Install Yii2

Bạn có thể install Yii2 bằng Composer bằng lệnh

php composer.phar create-project yiisoft/yii2-app-advanced newapp 2.0.4

hoặc tải trực tiếp từ GitHub tại

Sau khi cài đặt thành công bạn gõ vào Browser: localhost/webapp

1.png

b. Install MongoDB trên Ubuntu

Mở Terminal

Bước 1: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

Bước 2: echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list

Bước 3: sudo apt-get update

Bước 4: sudo apt-get install -y mongodb-org & sudo apt-get install -y mongodb-org=3.0.3 mongodb-org-server=3.0.3 mongodb-org-shell=3.0.3 mongodb-org-mongos=3.0.3 mongodb-org-tools=3.0.3

Run MongoDB

- sudo service mongod start
- sudo service mongod stop
- sudo service mongod restart

Kết quả cài MongoDB thành công

2.png

2. Yii2 connect MongoDB create funtion user

Bạn vào đây để tải và cài đặt Extension cho Yii2

(https://github.com/yiisoft/yii2-mongodb)

có thể cài băng Composer hoặc tải Extension

Composer: php composer.phar require --prefer-dist yiisoft/yii2-mongodb
Tải về: https://github.com/yiisoft/yii2-mongodb/archive/master.zip

Sau khi import extension mongodb thành công thì mở đường dẫn thư mục ra ta sẽ có như hình bên dưới: 3.png

  • Cấu hình connect MongoDB: mở file main-local.php trong thư mục common/config/main-local.php thêm cấu hình mongodb vào như sau:
'mongodb' => [
    'class' => '\yii\mongodb\Connection',
    'dsn' => 'mongodb://developer:[email protected]:27017/report',
],
  • Tùy vào lúc cài đặt mongodb của bạn có password hay ko có password, nếu có password thì bạn điền password của bạn vào, và đặt tên collection vào mydatabase.

  • Mở file User.php trong thư mục models/User.php để modify một số thông tin kết nối mongodb, mặc định Yii2 kết nối tới MySql.

  • Inport các class vào Class Model

.:
use yii\db\ActiveRecord;

mới:
use yii\mongodb\ActiveRecord;
.
  • Thêm mới const
.
const ROLE_USER = 'user';
const ROLE_ADMIN = 'admin';
.
  • Modify function nameTable
:
public static function tableName()
{
    return '{}';
}

mới:
public static function CollectionName()
{
    return ['report', 'user'];
}
  • Thêm attributes
public function attributes()
{
	return [
	  '_id',
	  'username',
	  'password_hash',
	  'password_reset_token',
	  'email',
	  'auth_key',
	  'role',
	  'status',
	  'created_at',
	  'updated_at',
	];
}
  • Trong hàm behaviors thêm created_at và updated_at
:
public function behaviors()
{
  return [
    TimestampBehavior::className(),
  ];
}

mới:
public function behaviors()
{
  return [
    TimestampBehavior::className(),
	'attributes' => [
	  ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
	  ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
	]
  ];
}
  • Trong phân quyền user thêm:
:
public function rules()
{
  return [
    ['status', 'default', 'value' => self::STATUS_ACTIVE],
    ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]],
  ];
}

mới:
public function rules()
{
  return [
    ['status', 'default', 'value' => self::STATUS_ACTIVE],
    ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]],
	['role', 'default', 'value' => self::ROLE_USER],
	['role', 'in', 'range' => [self::ROLE_USER, self::ROLE_ADMIN]],
  ];
}
  • Trong hàm findIdentity sửa:
:
public static function findIdentity($id)
{
  return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);
}

mới:
public static function findIdentity($id)
{
  return static::findOne($id);
}

Vào form sigup để đăng ký tài khoản Login

4.png

Vào form login tài khoản vừa tạo

5.png

Login thành công sẽ trở về màn hình Home

6.png

Tổng kết

  • Yii2 là một PHP framwork mới ra lò cuối 2014 lên còn khá mới mẻ với mọi người, theo đánh giá của cá nhân tôi đã từng làm Yii 3-4 dự án thì tôi thấy Yii về tốc độ không chê được, khả năng hỗ trợ các developer rất tốt.

  • Về MongoDB thì không cần nói nhiều về mặt tốt độ truy vẫn dữ liệu của nó. MongoDB là framwork quản trị dữ liệu tuyệt vời của NoSQL.

Bài viết bước đầu giới thiệu về Yii2 sử dụng data với MongoDB giúp các bạn phần nào nắm được kiến trúc của Yii2 và dùng MongoDB trong Yii2 như thến nào. Chúc các bạn sớm có 1 site ứng dụng Yii2 với MongoDB. ^_^ 😃

Tài liệu tham khảo

http://www.yiiframework.com/

http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

https://github.com/yiisoft/yii2-mongodb

All Rights Reserved