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 ...
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.
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.
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:xampphtdocs trên Windows nếu bạn dùng xampp
- C:wampwww 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:xampphtdocsasic | | 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:xampphtdocsasicweb) 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:xampphtdocsasicweb 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:xampphtdocsasicweb
Mở file httpd.conf trong C:xamppapacheconf 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 configweb.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.
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.
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
- File khai báo resource css, js.. (assetsAppAsset.php)
- Cấu hình database connection (nếu có ) configweb.php
- Tạo controllers controllersXXXController.php
- Quản lý các model, các ActiveRecord mapping với database.
- File master page viewslayoutsmain.php
- 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.
- File master page viewslayoutsmain.php
<div class="container"> <?= Breadcrumbs::widget([ 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?> <?= $content ?> </div>
File layoutsmain.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 appcontrollers; use yiiaseController; 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.
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!