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 //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
compose
vàPHP 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 //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 //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.
1 trên Windows nếu bạn dùng xamppDocumentRoot "C:/xampp/htdocs/basic/web"
2 trên Windows nếu bạn dùng wampDocumentRoot "C:/xampp/htdocs/basic/web"
- Hoặc
3 nếu bạn đang sử dụng LinuxDocumentRoot "C:/xampp/htdocs/basic/web"
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"
- 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õ //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.
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
9basic |
| 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 ......
0 : bao gồm các controllers được sử dụng để chạy làm console application.
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
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.
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.
4 : bao gồm các class model của application.
5 lưu trữ các dữ liệu trong quá trình chạy application.
6 : nơi tổ chức các test case cho unit test...
7 : folder chứa toàn bộ các third-party packages, library . Nó cũng chứa cả yii framework.
8 : folder lưu trữ các views HTML cho web app, cái sẽ được hiển thị cho các controller.
6 : entry point của web, nơi khởi nguồn của Yii framework. Cũng là document của application.DocumentRoot "C:/xampp/htdocs/basic/web"
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
- File khai báo resource css, js.. [
0]| views | layouts | main.php | student | index.php | info.php ....
- Cấu hình database connection [nếu có ]
4basic |
| 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 ......
- Tạo controllers
2| views | layouts | main.php | student | index.php | info.php ....
- Quản lý các model, các ActiveRecord mapping với database.
- File master page
3| views | layouts | main.php | student | index.php | info.php ....
- 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 ....
- thì cũng sẽ có cấu trúc thư mục và files tương ứng trong folder
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
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 :
5namespace app\controllers; use yii\base\Controller; class StudentController extends Controller {
}public function actionIndex[] { return $this->render['index']; } public function actionInfo[] { return $this->render['info']; }
- 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,
7namespace app\controllers; use yii\base\Controller; class StudentController extends Controller {
}public function actionIndex[] { return $this->render['index']; } public function actionInfo[] { return $this->render['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à
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.
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.