Yii framework - Tìm hiểu cấu trúc và chạy thử với basic application
Bài đăng này đã không được cập nhật trong 3 năm
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
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 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 document root
của apache.
C:\xampp\htdocs
trên Windows nếu bạn dùng xamppC:\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 fileAppAsset.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...vvcontrollers
: 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
- File khai báo resource css, js.. (
assets\AppAsset.php
) - Cấu hình database connection (nếu có )
config\web.php
- Tạo controllers
controllers\XXXController.php
- Quản lý các model, các ActiveRecord mapping với database.
- File master page
views\layouts\main.php
- Folder
xxx
lưu trữ các view html của cácactions
có trongxxx
controller. Như cấu trúc bên trên, chúng ta có 1 controllerSiteController
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 folderviews
.
Controller, View Render như thế nào
Như mình đã nói ở trên.
- 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