一週試用yii開發一個帶各種該有功能的web程式(二)

CL.TANG發表於2016-10-18

  上篇隨筆寫完的是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>

檢視頁面內容:

但是,為什麼會有其他內容?我希望看到的是一個乾淨的頁面啊。

相關文章