+3

Yii framework - Tìm hiểu cấu trúc và chạy thử với basic application

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 :

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 document root của apache.

  • C:\xampp\htdocs trên Windows nếu bạn dùng xampp
  • C:\wamp\www trên Windows nếu bạn dùng wamp
  • Hoặc /var/www nếu bạn đang sử dụng Linux

Như môi trường mình đang sử dụng trên Windows với xampp 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 web trong đó có 1 file index.php , document root của application sẽ nằm ở thư mục này (C:\xampp\htdocs\basic\web) 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 C:\xampp\htdocs\basic\web 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 C:\xampp\htdocs\basic\web


Mở file httpd.conf trong C:\xampp\apache\conf tìm đến DocumentRoot và sửa lại đường dẫn đến yii application nhé.

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

Add cookieValidationKey

Mở file config\web.php tìm đến 'cookieValidationKey' => '123456' thiết lập một giá trị bất kỳ. Trong ví dụ của mình sẽ là 123456

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 http://localhost , 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.

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
        ......
  • assets : folder bao gồm các file resources như js, css sử dụng trong web page. Chúng được define trong file AppAsset.php
  • commands : bao gồm các controllers được sử dụng để chạy làm console application.
  • config : 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
  • controllers : 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.
  • mail : 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.
  • models : bao gồm các class model của application.
  • runtime lưu trữ các dữ liệu trong quá trình chạy application.
  • tests : nơi tổ chức các test case cho unit test...
  • vendor : folder chứa toàn bộ các third-party packages, library . Nó cũng chứa cả yii framework.
  • views : folder lưu trữ các views HTML cho web app, cái sẽ được hiển thị cho các controller.
  • web : 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.. (assets\AppAsset.php)
  2. Cấu hình database connection (nếu có ) config\web.php
  3. Tạo controllers controllers\XXXController.php
  4. Quản lý các model, các ActiveRecord mapping với database.
  5. File master page views\layouts\main.php
  6. Folder xxx lưu trữ các view html của các actions có trong xxx controller. Như cấu trúc bên trên, chúng ta có 1 controller SiteController với các action (about, contact, error, index và login) thì cũng sẽ có cấu trúc thư mục và files tương ứng trong folder views.

Controller, View Render như thế nào

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

  1. File master page views\layouts\main.php
    <div class="container">
        <?= Breadcrumbs::widget([
            'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
        ]) ?>
        <?= $content ?>
    </div>

File layouts\main.php đó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 main.php.

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 <?= $content ?> 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 <?= $content ?>.

Tạo các views

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

  • Controller name : StudentController
  • Gồm các actions : index, info
  • 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à Student - Index Page và full name Fullname: Nguyen Van Manh

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 return $this->render('index'); cái sẽ thực hiện get content của file index.php và replace content trong master page ,nơi mà có variable <?= $content ?>. Tương ứng , với file info cũng vậy.

Result

Mở browser với URL http://localhost/?r=student/index hoặc http://localhost/?r=student/info

Trong Yii, r= sẽ đại diện cho controller và actions refer tới. Ở trong trường hợp này. http://localhost/?r=student/index 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 http://localhost/?r=student/info cũng vậy.

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.

Thank you for reading!


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.