Hướng dẫn cài đặt và sử dụng yii2 năm 2024

Yii framework - cái tên có lẽ không còn xa lạ gì với các PHP Developer. Nhưng không hẳn tất cả chúng ta ai ai cũng sử dụng nó.

Trước tiên đi vào nội dung, mình vẫn phải nói rằng "mình là newbie với Yii". Trong quá trình tìm hiểu, mình cũng phải đọc rất nhiều bài viết - tất nhiên không thể thiếu được Yii document guide http://www.yiiframework.com/doc-2.0/guide-index.html

Nếu bạn cũng là một newbie thì cũng đừng quên - Yii document guide

Bài viết này mình sẽ tổng hợp những gì mình hiểu, mình đã thấy và đã làm. Một bức tranh tổng quát về Yii, với mong muốn giúp bạn cũng có cái nhìn tổng thể trước khi bắt tay vào tìm hiểu những thành phần chính quan trọng hơn.

Giới thiệu

Có quá bài viết nói về lịch sử hình thành của Yii, nên mình xin phép được bỏ qua và chỉ gói gọn với vài gạch đầu dòng sau :

  • Yii có nghĩa là Yes It Is!
  • Một MVC framwork bắt đầu phát triển từ 1/1/2008 bởi Qiang Xue
  • Một open source , Easy (dễ dàng), Efficient (hiệu suất) và Extensible (khả năng mở rộng).
  • Version 1.0 release lần đầu tiên vào 3/12/2008.
  • Tháng 10/2014 version 2.0.0 ra đời với sự lột xác bởi việc viết loại hoàn toàn cấu trúc của Yii.

Và tất nhiên trong bài viết này mình sẽ cùng tìm hiểu về Yii 2.0.

Installing

Việc cài đặt hết sức đơn giản, bạn chỉ cần download yii basic application rồi triển khai lên apache server là xong.

Nhưng chúng ta không dừng lại ở đó, mình sẽ cùng tìm hiểu cách xây dựng một ứng dụng web php sử dụng Yii framework như thế nào, cách bố trí cấu trúc source project ra làm sao.

Đảm bảo rằng bạn đã chuẩn bị đầy đủ các môi trường cần thiết để chạy PHP Application như : Apache, PHP , Mysql hoặc một hệ quản trị ưa thích mà bạn muốn.

Lưu ý : Với Yii 2.0 bắt buộc bạn phải sử dụng PHP version >= 5.4. Trong bài viết này, mình sử dụng PHP 7.0, với XAMP trên windows.

Download file yii-basic-app

Để tạo Yii basic application, bạn có thể dùng qua các cách sau :

  • Qua composer - một công cụ quản lý thư viện trong PHP ( cách thức cài đặt composePHP CLI bạn có thể google) php composer.phar create-project yiisoft/yii2-app-basic basic 2.0.12
  • Download trực tiếp file nén Yii 2 with basic application template https://github.com/yiisoft/yii2/releases/download/2.0.12/yii-basic-app-2.0.12.tgz
    Bạn có thể lựa chọn một phiên bản khác ở đây https://github.com/yiisoft/yii2/releases

Extract yii-basic-app

Sau khi download file yii-basic-app-2.0.12.tgz, tiến hành giải nén tại

DocumentRoot "C:/xampp/htdocs/basic/web"

0 của apache.

  • DocumentRoot "C:/xampp/htdocs/basic/web"

    1 trên Windows nếu bạn dùng xampp
  • DocumentRoot "C:/xampp/htdocs/basic/web"

    2 trên Windows nếu bạn dùng wamp
  • Hoặc

    DocumentRoot "C:/xampp/htdocs/basic/web"

    3 nếu bạn đang sử dụng Linux

Như môi trường mình đang sử dụng trên

DocumentRoot "C:/xampp/htdocs/basic/web"

4 với

DocumentRoot "C:/xampp/htdocs/basic/web"

5 sẽ có cấu trúc folder như sau.

C:\xampp\htdocs\basic | 
                        | assets
                        | commands
                        | config
                        | controllers
                        | mail
                        | models
                        | runtime
                        | tests
                        | vendor
                        | views
                        | web
                            | index.php
                            | ....
                        ......

HÃY CHÚ Ý THƯ MỤC

DocumentRoot "C:/xampp/htdocs/basic/web"

6 trong đó có 1 file

DocumentRoot "C:/xampp/htdocs/basic/web"

7 , document root của application sẽ nằm ở thư mục này (

DocumentRoot "C:/xampp/htdocs/basic/web"

  1. nơi mà web của chúng ta sẽ chạy.

Cấu hình web folder với apache

Mục đích của việc cấu hình là sử dụng folder

DocumentRoot "C:/xampp/htdocs/basic/web"

8 làm document root của apache. Điều đó có nghĩa là, khi bạn gõ http://localhost thì nó sẽ chạy web app của bạn(file index.php).

Tất nhiên , bạn cũng có thể không cần làm theo cách này, bạn có thể tạo alias hoặc vitual host. Miễn sao có thể chạy được application nhé. Và hãy nhớ rằng, document root của application sẽ nằm ở thư mục

DocumentRoot "C:/xampp/htdocs/basic/web"

8


Mở file

basic | 
        | assets
            | AppAsset.php
        | commands
            | HelloController.php
        | config
            | console.php
            | db.php
            | web.php
        | controllers
            | SiteController.php
        | mail
        | models
            | LoginForm.php
            | ContactForm.php
        | runtime
        | tests
        | vendor
        | views
            | layouts
                | main.php
            | site
                | about.php
                | contact.php
                | error.php
                | index.php
                | login.php
        | web
            | index.php
        ......

1 trong

basic | 
        | assets
            | AppAsset.php
        | commands
            | HelloController.php
        | config
            | console.php
            | db.php
            | web.php
        | controllers
            | SiteController.php
        | mail
        | models
            | LoginForm.php
            | ContactForm.php
        | runtime
        | tests
        | vendor
        | views
            | layouts
                | main.php
            | site
                | about.php
                | contact.php
                | error.php
                | index.php
                | login.php
        | web
            | index.php
        ......

2 tìm đến

basic | 
        | assets
            | AppAsset.php
        | commands
            | HelloController.php
        | config
            | console.php
            | db.php
            | web.php
        | controllers
            | SiteController.php
        | mail
        | models
            | LoginForm.php
            | ContactForm.php
        | runtime
        | tests
        | vendor
        | views
            | layouts
                | main.php
            | site
                | about.php
                | contact.php
                | error.php
                | index.php
                | login.php
        | web
            | index.php
        ......

3 và sửa lại đường dẫn đến yii application nhé.

DocumentRoot "C:/xampp/htdocs/basic/web"

Add cookieValidationKey

Mở file

basic | 
        | assets
            | AppAsset.php
        | commands
            | HelloController.php
        | config
            | console.php
            | db.php
            | web.php
        | controllers
            | SiteController.php
        | mail
        | models
            | LoginForm.php
            | ContactForm.php
        | runtime
        | tests
        | vendor
        | views
            | layouts
                | main.php
            | site
                | about.php
                | contact.php
                | error.php
                | index.php
                | login.php
        | web
            | index.php
        ......

4 tìm đến

basic | 
        | assets
            | AppAsset.php
        | commands
            | HelloController.php
        | config
            | console.php
            | db.php
            | web.php
        | controllers
            | SiteController.php
        | mail
        | models
            | LoginForm.php
            | ContactForm.php
        | runtime
        | tests
        | vendor
        | views
            | layouts
                | main.php
            | site
                | about.php
                | contact.php
                | error.php
                | index.php
                | login.php
        | web
            | index.php
        ......

5 thiết lập một giá trị bất kỳ. Trong ví dụ của mình sẽ là

basic | 
        | assets
            | AppAsset.php
        | commands
            | HelloController.php
        | config
            | console.php
            | db.php
            | web.php
        | controllers
            | SiteController.php
        | mail
        | models
            | LoginForm.php
            | ContactForm.php
        | runtime
        | tests
        | vendor
        | views
            | layouts
                | main.php
            | site
                | about.php
                | contact.php
                | error.php
                | index.php
                | login.php
        | web
            | index.php
        ......

6

Nếu bạn sử dụng composer để download yii basic app thì có thể cookieValidationKey sẽ được tạo ra tự động. Trong trường hợp cookieValidationKey đã có giá trị rồi, thỉ bạn có thể bỏ qua bước này.

Chạy thử yii basic app

Mở browser với URL quen thuộc

basic | 
        | assets
            | AppAsset.php
        | commands
            | HelloController.php
        | config
            | console.php
            | db.php
            | web.php
        | controllers
            | SiteController.php
        | mail
        | models
            | LoginForm.php
            | ContactForm.php
        | runtime
        | tests
        | vendor
        | views
            | layouts
                | main.php
            | site
                | about.php
                | contact.php
                | error.php
                | index.php
                | login.php
        | web
            | index.php
        ......

7 , nếu đúng với hình ảnh bên dưới thì xin chúc mừng bạn. Toàn bộ cấu hình đã thiết lập đúng.

Hướng dẫn cài đặt và sử dụng yii2 năm 2024

Cấu trúc project

basic | 
        | assets
            | AppAsset.php
        | commands
            | HelloController.php
        | config
            | console.php
            | db.php
            | web.php
        | controllers
            | SiteController.php
        | mail
        | models
            | LoginForm.php
            | ContactForm.php
        | runtime
        | tests
        | vendor
        | views
            | layouts
                | main.php
            | site
                | about.php
                | contact.php
                | error.php
                | index.php
                | login.php
        | web
            | index.php
        ......

  • basic |
        | assets  
            | AppAsset.php  
        | commands  
            | HelloController.php  
        | config  
            | console.php  
            | db.php  
            | web.php  
        | controllers  
            | SiteController.php  
        | mail  
        | models  
            | LoginForm.php  
            | ContactForm.php  
        | runtime  
        | tests  
        | vendor  
        | views  
            | layouts  
                | main.php  
            | site  
                | about.php  
                | contact.php  
                | error.php  
                | index.php  
                | login.php  
        | web  
            | index.php  
        ......  
    

    8 : folder bao gồm các file resources như js, css sử dụng trong web page. Chúng được define trong file

    basic |
        | assets  
            | AppAsset.php  
        | commands  
            | HelloController.php  
        | config  
            | console.php  
            | db.php  
            | web.php  
        | controllers  
            | SiteController.php  
        | mail  
        | models  
            | LoginForm.php  
            | ContactForm.php  
        | runtime  
        | tests  
        | vendor  
        | views  
            | layouts  
                | main.php  
            | site  
                | about.php  
                | contact.php  
                | error.php  
                | index.php  
                | login.php  
        | web  
            | index.php  
        ......  
    
    9
  • isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?>
    0 : bao gồm các controllers được sử dụng để chạy làm console application.
  • isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?>
    1 : nơi sẽ lưu trữ các file config của web page như console app, web page, database connection, các param common...vv
  • isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?>
    2 : lưu trữ các controllers của web page, nơi sẽ khai báo các action của web page và sử lý bussiness.
  • isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?>
    3 : nếu bạn sử dụng mail, thì folder sẽ chứa các layout dựng nên các form cho việc gửi mail.
  • isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?>
    4 : bao gồm các class model của application.
  • isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?>
    5 lưu trữ các dữ liệu trong quá trình chạy application.
  • isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?>
    6 : nơi tổ chức các test case cho unit test...
  • isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?>
    7 : folder chứa toàn bộ các third-party packages, library . Nó cũng chứa cả yii framework.
  • isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?>
    8 : folder lưu trữ các views HTML cho web app, cái sẽ được hiển thị cho các controller.
  • DocumentRoot "C:/xampp/htdocs/basic/web"

    6 : entry point của web, nơi khởi nguồn của Yii framework. Cũng là document của application.

Trong đó, chúng ta cần ghi nhớ các folder/files quan trọng sau, cũng là những folder/files chính để tạo nên ứng dụng ban đầu

  1. File khai báo resource css, js.. (
        | views  
        | layouts  
            | main.php  
        | student  
            | index.php  
            | info.php  
        ....  
    
    0)
  2. Cấu hình database connection (nếu có ) basic |
        | assets  
            | AppAsset.php  
        | commands  
            | HelloController.php  
        | config  
            | console.php  
            | db.php  
            | web.php  
        | controllers  
            | SiteController.php  
        | mail  
        | models  
            | LoginForm.php  
            | ContactForm.php  
        | runtime  
        | tests  
        | vendor  
        | views  
            | layouts  
                | main.php  
            | site  
                | about.php  
                | contact.php  
                | error.php  
                | index.php  
                | login.php  
        | web  
            | index.php  
        ......  
    
    4
  3. Tạo controllers
        | views  
        | layouts  
            | main.php  
        | student  
            | index.php  
            | info.php  
        ....  
    
    2
  4. Quản lý các model, các ActiveRecord mapping với database.
  5. File master page
        | views  
        | layouts  
            | main.php  
        | student  
            | index.php  
            | info.php  
        ....  
    
    3
  6. Folder
        | views  
        | layouts  
            | main.php  
        | student  
            | index.php  
            | info.php  
        ....  
    

    4 lưu trữ các view html của các

        | views  
        | layouts  
            | main.php  
        | student  
            | index.php  
            | info.php  
        ....  
    

    5 có trong

        | views  
        | layouts  
            | main.php  
        | student  
            | index.php  
            | info.php  
        ....  
    

    4 controller. Như cấu trúc bên trên, chúng ta có 1 controller

        | views  
        | layouts  
            | main.php  
        | student  
            | index.php  
            | info.php  
        ....  
    

    7 với các action (

        | views  
        | layouts  
            | main.php  
        | student  
            | index.php  
            | info.php  
        ....  
    
  7. thì cũng sẽ có cấu trúc thư mục và files tương ứng trong folder
    isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?>
    8.

Controller, View Render như thế nào

Như mình đã nói ở trên.

1. File master page

| views | layouts | main.php | student | index.php | info.php ....

3

    
isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?>

File

namespace app\controllers;
use yii\base\Controller;
class StudentController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
    public function actionInfo()
    {
        return $this->render('info');
    }
}

1 đóng vài trò là một master page, có nghĩa là bố cục layout của web page sẽ được viết tại

namespace app\controllers;
use yii\base\Controller;
class StudentController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
    public function actionInfo()
    {
        return $this->render('info');
    }
}

2.

Trong đó có một phần nội dung có thể thay đổi được, để include nội dung ở các view html tại các controller actions. Điều đó được sử dụng tại

namespace app\controllers;
use yii\base\Controller;
class StudentController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
    public function actionInfo()
    {
        return $this->render('info');
    }
}

3 bên trên.

Để thấy rõ hơn, giờ mình sẽ tạo một controller mới, nội dung render view sẽ được replace trong

namespace app\controllers;
use yii\base\Controller;
class StudentController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
    public function actionInfo()
    {
        return $this->render('info');
    }
}

3.

Tạo các views

Giả sử mình sẽ có 1 controller như bên dưới.

  • Controller name :

    namespace app\controllers; use yii\base\Controller; class StudentController extends Controller {

    public function actionIndex()  
    {  
        return $this->render('index');  
    }  
    public function actionInfo()  
    {  
        return $this->render('info');  
    }  
    
    }

    5
  • Gồm các actions :

    namespace app\controllers; use yii\base\Controller; class StudentController extends Controller {

    public function actionIndex()  
    {  
        return $this->render('index');  
    }  
    public function actionInfo()  
    {  
        return $this->render('info');  
    }  
    
    }

    6,

    namespace app\controllers; use yii\base\Controller; class StudentController extends Controller {

    public function actionIndex()  
    {  
        return $this->render('index');  
    }  
    public function actionInfo()  
    {  
        return $this->render('info');  
    }  
    
    }

    7
  • Cấu trúc view sẽ có dạng như sau :
        | views  
        | layouts  
            | main.php  
        | student  
            | index.php  
            | info.php  
        ....  
    

Tạo file index.php và info.php tương ứng với nội dung lần lượt là

namespace app\controllers;
use yii\base\Controller;
class StudentController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
    public function actionInfo()
    {
        return $this->render('info');
    }
}

8 và full name

namespace app\controllers;
use yii\base\Controller;
class StudentController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
    public function actionInfo()
    {
        return $this->render('info');
    }
}

9

Tạo class StudentController và thêm các action tương ứng.

namespace app\controllers;
use yii\base\Controller;
class StudentController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
    public function actionInfo()
    {
        return $this->render('info');
    }
}

Như ban thấy `compose`0 cái sẽ thực hiện get content của file

DocumentRoot "C:/xampp/htdocs/basic/web"

7 và replace content trong master page ,nơi mà có variable

namespace app\controllers;
use yii\base\Controller;
class StudentController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
    public function actionInfo()
    {
        return $this->render('info');
    }
}

3. Tương ứng , với file info cũng vậy.

Result

Mở browser với URL `compose`3 hoặc `compose`4

Trong Yii, `compose`5 sẽ đại diện cho controller và actions refer tới. Ở trong trường hợp này.`compose`3 sẽ đưa chúng ta tới màn hình index với nội dung Student - Index Page được hiển thị.

Tương úng với `compose`4 cũng vậy.

Hướng dẫn cài đặt và sử dụng yii2 năm 2024

Tổng kết

Vậy là mình đã chia sẻ xong cấu trúc căn bản và ứng dụng basic app demo sử dụng Yii framework. Nội dung chủ yếu chỉ tập chung vào việc tìm hiểu cấu trúc folder source project. Nơi để bạn biết sẽ bắt đầu từ đâu, tìm hiểu những gì khi mới bắt tay vào phát triển.