上篇隨筆寫完的是yii能使用簡單的命令建立出一個基本的架構,我們只需要在這個架構上進行程式碼編寫,擴充套件功能。而生成的一個小型系統是可以操作的,但是不是我們想要的,所以,這篇結合原始碼講如何建立出我們自己的頁面,並進行操作。
那麼yii是怎麼處理這麼一套流程的呢?
大致執行過程。
1. 請求訪問index.php
2. 由index.php作為一個初始化專案環境指令碼,載入config/資料夾下的配置,構造出請求特徵。
3. 根據請求的url,找到對應的控制器。
4. 在根據請求的url,找到請求的在控制器中的處理方法,在該方法中執行業務邏輯。
5. 呼叫模版。還是根據控制器的URL特點,找到指定模版的位置,引數傳入,執行程式碼,返回body給呼叫處。
6. 完成一次請求。
先看以上流程提及的可能使用的檔案及資料夾。
index.php自動生成的程式碼:
<?php // change the following paths if necessary $yii=dirname(__FILE__).'/../framework/yii.php'; $config=dirname(__FILE__).'/protected/config/main.php'; // remove the following lines when in production mode defined('YII_DEBUG') or define('YII_DEBUG',true); // specify how many levels of call stack should be shown in each log message defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3); require_once($yii); Yii::createWebApplication($config)->run();
這裡專案的幾個目錄,我們在框架中已經定義的比較死了。
views為模版目錄,下面會根據控制器進行建立一個資料夾,還會在資料夾下在建立一個對應控制方法的模版。
controllers為控制器資料夾,控制器檔名為:控制器Controller.php,如SiteController.php而檔案中只有一個類,類名也為控制器Controller,如SiteController
控制器中的行為方法為“action行為”,形如:
public function actionIndex()
那麼就在views中存在了這麼一個模版,/views/site/index.php
當然,所有這些,其實不用強記,只為了解,因為yii給我們提供了命令列工具,自動建立一個滿足以上這些規則的控制器,模版。
部分原始碼實現:
//預設行為 public $defaultAction='index'; //預設的控制器 public $defaultController='site'; //查詢對應控制器 public function runController($route)//查詢對應的控制器 { if(($ca=$this->createController($route))!==null)//建立一個控制器和得到控制器ID。 { list($controller,$actionID)=$ca; $oldController=$this->_controller; $this->_controller=$controller;//將最新的控制器ID作為奔雷的控制器屬性,供全域性使用。 $controller->init();//控制器初始化。到底呼叫的那個類的方法。 $controller->run($actionID);//執行對應的控制方法。 $this->_controller=$oldController;//重置當前控制器為初始值。 } } //控制器類名稱結合 $className=ucfirst($id).'Controller'; $classFile=$basePath.DIRECTORY_SEPARATOR.$className.'.php'; //控制器方法的處理 $id[0]=strtolower($id[0]); return array( new $className($controllerID.$id,$owner===$this?null:$owner), $this->parseActionParams($route), );
這裡主要實現的是真正的業務邏輯,下面說如何用命令列方式建立出另外的控制器,另外的模版。
進入cmd模式,執行shell命令。
D:\php\workspace\my_demo\index>php protected/yiic.php shell Yii Interactive Tool v1.1 (based on Yii v1.1.10) Please type 'help' for help. Type 'exit' to quit. >> help
輸入help,檢視到有如下命令:
At the prompt, you may enter a PHP statement or one of the following commands: - controller - crud - form - help - model
這裡我們使用控制器。
>> controller admin/post mkdir D:/php/workspace/my_demo/index/protected/controllers/admin generate PostController.php mkdir D:/php/workspace/my_demo/index/protected/views/admin mkdir D:/php/workspace/my_demo/index/protected/views/admin/post generate index.php Controller 'admin/post' has been created in the following file:
提示我們說建立了這些東西。那麼檢視是否生成
views裡:
也就是說,我們可以通過命令生成符合yii命名規則的要求檔案。
那麼,如果我們想將原來的部落格系統換成我們自己的網站,由yii系統我們知道我們需要修改views中site的index.php。
修改index.php內容為:
<html> <head> </head> <body> <center>這是我自己的第一個頁面,雖然將原來的大段內容刪除了。不在是一個部落格</center> <a href="/admin/post/index/">指向admin/post/index.php的內容</a> </body> </html>
檢視頁面內容:
但是,為什麼會有其他內容?我希望看到的是一個乾淨的頁面啊。