YII框架的使用

YII框架的使用
spit: 吐痰,吐口水, 過去式: spat
spat: 自己也能夠做爲一個單詞, 意思是: 「小打小鬧」「小的吵鬧」「小爭吵」php


  1. list函數,「列表」, 表示將數組中 對應的 元素值 相應的賦值給 多個變量...
    explode和implode是在數組和字符串之間轉換, 轉換的分隔符不能爲空: 若是delimiter爲空, 則
    會產生一個警告: empty delimiter...css

  2. 數組排序用sort, 數組倒序用array_reversehtml


yii 框架是美籍華人薛強開發的徹底免費開源的php框架. Qiang
yii 是 yes it is的首字母縮寫. yee. 讀做 yi: yee, easy extensible, efficient框架, 基於mvc設計模式. 純oop的
下載地址: http://www.yiiframework.com 中文社區是: http://www.yiichina.com前端

yii仍然是index.php單入口模式, 其中的view視圖層會跟 layout和一些小組件widget如treeview等交互.
而Controller控制器,則包括 Filter>atction等層次...jquery

yii的requirements目錄是環境檢測, 看服務器所在的環境是否知足yii的安裝環境...linux

yii對php 的版本要求仍是比較低的: 只要 php version > 5.1.0 就行了, 不少集成環境都可以知足.c++


安裝yii框架

  1. 要使用cmd 命令行方式來安裝;
  2. 要進入到www下的yii目錄下的 framework目錄: cd framework/
  3. 執行命令: php yiic.php webapp your_project_path/project_name //其中yiic.php是一個php腳本, webapp是命令關鍵字.
    而後在你的項目目錄下會生成一個project_name的文件夾, 裏面是yii建立的各個目錄...

關於項目的路徑, 一般是放在跟framework框架相同級別/同級的目錄中, 所以, 你在進入framework框架下, 執行php命令的時候, 天然建立的項目路徑就是: ../your_project_name

yiic: yii_command, 是yii的命令行腳本, yiic是linux的shell腳本, yiic.php是yiic的php腳本, yiic.bat是yiic的windows腳本.web

asset
美 ['æset] 英 ['æset
建立的yii程序的目錄結構是: index.php是入口文件; assets是公共資源文件(asset['2set'] ), css, images, themes,
protected(最重要的就是這個目錄: 包括conf/main.php這個是主配置文件, controllers/這個是控制器目錄, models/是模型目錄,
views/是視圖目錄)..shell

應該多看的是yii的 文檔- 導航標籤中 的 內容:


兩種方案和思想, 一種是直接訪問localhost,把webapp直接放在localhost下, 另外一種是放在localhost下的子目錄中, 這樣的好處是, 能夠建立多個這樣的子程序web數據庫

views: 包括site/index.php, 和 layouts/main.php, 一個視圖文件就是按照layouts/main.php的佈局, 而後加上site/index.php中的內容組成的,
也就說, 最後生成的內容: layouts/是佈局/結構, site/index.php是內容.

熟悉了tp後, 來看yii就很容i了, 能夠用tp的思惟思想來學習yii, 反過來yii也能夠加深對tp的理解

注意, yii的目錄結構中的文件夾, 一般用的都是 "小寫的" "複數", 如:views/,contrllers/, models/, commands/, components/等等

控制器的名稱則是首字母大寫的, 默認的是 SiteController. 方法的命名規範是: actionIndex.

class MyController extends Controller{
   public function index(){
      print('hello yii') ;
       $this->render('index');
       }   
    
    }
這裏建立的是My控制器, 控制器文件名應該是: MyController.php,同時, 在views/目錄(注意是views目錄下, 不是site目錄! 那裏的site目錄是yii給咱們的默認的
一個SiteController控制器所對應的視圖文件夾), 下就應該有對應的文件夾my/. 注意控制器是首字母大寫的, 而views/"控制器對應的視圖目錄名" 是小寫的, 如這裏的
MyController控制器對應的視圖目錄就是: views/my/. 而後, my目錄下的文件如:index.php, do.php, login.php, article.php就是這個控制器類對應的方法名稱,如: funtion actionIndex
function actionDo(), function actionLogin(). action的命名規則, 而對應的方法視圖文件要用小寫的!

yii默認給咱們提供了一個Site控制器和site視圖子目錄, 是能夠直接使用的!

訪問的時候, 輸入的地址是:  `localhost/yiidemo/index.php?r=Index/dosomething`, 其中r表示route路由, 後面跟上控制器名稱和操做方法.

yii的組件, 都是以類的方式來提供的, 或許是受c/c++的影響太深, 都是以C開頭的, 表示是"類",如CTreeView.php

渲染者: render+er: renderer.

framework中的內容組成: (a-z排序)

  1. base是他的核心基本類庫, 包括程序的自舉,啓動, 運行: CApplication, CModel, CError, CException,CBehavior, CComponent, interface |.php
  2. caching,cli, collections(這個是yii的集合類, 包括CList.php, CMap.php, CQueue.php, CStack.php等類以及每一個類對應的迭代類: CListIterator.php, CMapIterator.php,
    CQueueIterator.php, CStackIterator.php, CTypedList.php...)
  3. console, db(數據庫相關的類...)
  4. messages相似於tp的languages
  5. views相似於ThinkPHP中的tpl/trace_jump.tpl等模板,如error, 404, 300.錯誤等等..
  6. 框架的核心仍是web目錄, 裏面有widgets, services,和renderers, vendors第三方的, validators,和一些工具: utils 等等.


當前的yii的穩定版是1.1.17

YiiBase類中的方法基本上都是靜態方法...public static function createWebApplication($config=null){ return self::createWebApplication($config);}
public和static的順序:

  1. public一般在最前面, 說明訪問權限, 由於這個是從外部 的訪問者來講的, 這個離函數自己 "更遠";
  2. 而後纔是說明這個方法的性質, 是靜態的, 仍是動態的, 因此這個時候, 才用 static 來修飾.
    即: 一個函數的定義是: public static function a_public_static_func(){....}


  1. jquery的find查找方法
    find就是查找當前正在處理的元素的後代元素的方法。find方法,由前面的選擇器指定選擇範圍,後面的find參數
    指定選擇的內容。
    實際上 $(parent).find(descend) 就等同於 $(parent descend)

  2. html方法返回的是 元素的內容,(內部的東西) 元素自己的標籤是不包括的 ,如:

<p> <span> span text<strong> strong text</strong></span></p>, 
$('span').html(), 將會輸出: span text<strong> strong text</strong>, 
span自己的標籤並不輸出,即不會輸出:<span> span text<strong> strong text</strong></span>

不論是前端仍是後端, 都是在服務器上生成好代碼後, 以後再 發送到瀏覽器的, php和html頁面之間進行數據交換的操做都是在服務器上。惟一的區別只是發送到瀏覽器端的代碼量有大有小, 差異只是體如今網絡傳輸延遲上。 服務器端是不會渲染顯示的, 服務器端只有代碼!

鍵盤的選擇仍是以「柔和, 輕柔,柔軟」的爲好, 那種很硬,彈簧很硬的,質地很硬的很差...

strtr: r是replace替換的意思.

  1. strtr返回的是str的替換後的副本, 並非str自己,
  2. 最好是使用 array replace_pairs

yiidemo用戶本身的項目是如何運行起來的?

yiidemo 本身項目中的入口文件是: index.php, 它首先包含 framework框架中的yii.php, require_once $yii; ,
而後建立本身的應用程序: Yii::createWebApplication($config) -> run(); , 到此, web程序就運行起來了.

而yii.php是框架下的"入口文件", 它其實是一個Yii的類, 這個類又繼承自YiiBase類:
class Yii extends YiiBase {...} 最終, 由 YiiBase.php提供app的核心功能!

yii的應用程序有兩種, 一種是console應用程序,一種是web應用程序

使用的都是Yii::createApplication($class, $config=null){ return new $class($config); }, 返回的是一個類的對象實例;
根據這個class類名參數來決定是建立哪一種app, 若是$class是 "CWebApplication", "CConsoleApplication"...

頁面的標題, 如今能夠用函數來動態生成了, 只要使用pageTitle成員屬性: 就行了: $this-> pageTitle = Yii::app() -> name. ' - About' ;

什麼叫Gii? 參考: http://blog.csdn.net/dogfish/article/details/6381402

當gii沒有權限的時候: 設置: module 設置gii的時候 不是本地的要設置容許IP 'allowedIPs' => ['127.0.0.1', '::1', '192.168.1.*', 'XXX.XXX.XXX.XXX']
gii is a magic tool that can write code for you . 是yii的自動生成 代碼 的工具.
在yii中使用gii, 只須要在protected/config/main.php中, 配置gii的模塊module便可..

設置默認的控制器: 在protected/config/main.php中, 加上: defaultController => 'Index';, 並且默認的方法就是 index: function actionIndex()...

render中的layout主要是包含: 公共的 頭部和尾部...

自定義載入本身的模板文件?

  1. 將js, css等文件放在 項目/assets/(index或admin)/目錄中
  2. 在views/controller_name/模板文件.php(zhuyi, 模板文件是php, 不是tp的html).
  3. 載入外部的css/js文件等. 因爲外部項目目錄路徑是經過 <?php ... 來輸出的. 因此這個不論是在action方法中, 仍是在模板文件中都是可使用的, 若是是原來的模板文件, 則用
  4. 控制器向視圖模板傳遞數據? 在控制器中, 使用 關聯數組, 而後將這個關聯數組變量, 做爲render, 或renderPartial的第二個參數, 而後在模板中使用 關聯數組的下標變量來輸出:$data = array('var1' => 10, 'var2' => 20); $this -> render('index', $data); 而後在模板中使用 <?php echo $var1; ?> 來輸出.
  5. 注意在yii中, 沒有smarty, 等模板引擎, 都是用原生的php語句進行輸出的. 可是對於foreach等具備 大括號的 語句輸出, 也不使用大括號, 而是使用相似 "模板引擎"的方法, 在最後的時候, 用endforeach 的方式來輸出: <?php foreach($article as $v): ?> 注意foreach後是冒號, 不是分號或大括號; <li> <?php echo $v->title; ?>(這裏注意, 若是<?php中 , 只有一條語句, 那麼能夠不用加 分號!) </li> <?php endforeach; ?>

在yii中如何擴展自定義全局函數?

在protected/中建立一個functions.php文件(或func.php文件均可以, 反正後面要包含的). 而後在裏面寫上自定義函數.
使用時, 在 項目的入口文件 index.php中, 包含這個自定義函數文件: include_once './protected/functions.php';

沒必要只建立一個Index控制器,(雖然 你能夠將不少/甚至所有邏輯業務 , 都放在一個Index控制器中,) 可是, 爲了將業務邏輯分得更清楚一些, 也便於維護 , 能夠多建立幾個控制器,每一個業務邏輯(單元模塊功能),(甚至一個頁面 "生成器" ) 建立一個控制器..., 並且注意 名稱的大小寫, 有些大寫只是框架的命名規範所要求的. 其餘地方, 該用小寫的仍是用小寫.

yii包括其餘框架(如tp)中, 使用 公共部分 -> layouts 佈局, 一是便於有統一的佈局樣式, 另外一個就是便於 修改和維護. yii的layouts比 tp要更好更清晰明確.

使用模板佈局layouts的方法和步驟是:

  1. 分析公共區域, 可是要注意, assets中的內容, 如css, js可能不同, 能夠把link等 放在任何地方, 因此在layouts中要把它提取出來;
  2. 在protected/layouts/下建立咱們本身的佈局文件, 如 my.php

這個控制器中, 有幾個 public的成員變量, $layout, $menu, $breadcumbs,等, 這些能夠修改, 或者重載, public $layout = "//layouts/my"

  1. 建立佈局文件, 將公共的部分提取出來, 放在my.php中 , 同時, 在須要單獨顯示具體模板內容的 地方 加入<?php echo $content ?>, 注意這個echo content 是放在佈局中的, 不是放在具體的模板中的.由於實際在渲染的時候, 是先讀取 佈局文件, (這就要求凡是使用佈局的 頁面的結構 應該是同樣的! ) 而後將佈局文件中的content用 實際模板中的內容來替換的.
  2. 配置, 設置 protected/components/controller.php, 中 將 $this->layouts 換成咱們本身的佈局文件名: my(不須要加php)
  3. 修改其餘業務對應的模板文件, 將重複的部分removed, 只須要本身單獨顯示的不一樣的部分

建立好本身的yii應用程序時, 裏面的 css和images和themes 是示例站點的資源. 若是你要 開發本身的web 程序, 這些文件夾(css, images, themes)能夠刪除不要.

若是你要寫了 $this->render('index'); 那麼就必定要有views的對應模板文件, 不然就會報錯!

難道link的css文件要放在view 視圖模板文件中嗎? 不能放在 layout中?

<?php echo Yii::app()->request->baseUrl ?> 獲得的就是 項目的目錄路徑.

==================

gii自動建立控制器等的用法:

  1. 在config/main.php中enable gii module : modules => array( 'gii'=>array(....) );
    自己gii是不安全的, 可能被黑客使用, 在開發建立過程當中, 能夠打開gii, 開發完畢後, 要關閉gii.
    class => 'system.gii.GiiModule' (其中, system就是framework框架目錄, GiiModule是指CGiiModule.php文件. 包含了Yii::import "CCodeFile, CCodeModel, CCodeForm" 等類文件.
  2. 主要是用gii來產生 後臺 模塊. gii是經過web方式 web-based 來生成的.
  3. 注意,yii的配置文件, 只有用戶項目中, 纔有, yii核心代碼framework中 是沒有 config的.
  4. yii產生後臺的方式, 和 前臺跟後臺 分離的方式 不同, yii是吧 後臺模塊專門用gii來產生 的, 做爲 modules/admin 來產生的, 而tp則是把前臺和後臺做爲平等的 項目啦實現的.
  5. 建立時, 是訪問的 index.php?r=gii, 建立完成後, 要訪問後臺模塊: index.php?r=admin/default/index (r=模塊id/控制器/方法). 並且後臺模塊也可使用前臺的佈局layouts.

  6. 要調用 yii的麪包屑導航, 使用的方法是: 只須要在 對應的 "模板文件" (注意是模板文件, 即$content包含的內容中) 定義好 breadcurmbs 成員變量就行了, 不要什麼echo, print的, 輸出的語句是在其餘框架函數中.
<?php 
    $this -> breadcrumbs = array(
        $this->module->id,               // 注意這裏要用字符串, 不能是 $this->module. 這個將會是一個模塊! 報錯
        'other', 'other2'...

);


?>
<h1> <?php  echo $this->uniqueId. '/'. $this->action->id; ?> </h1>

最後生成的麪包屑導航格式是: Home (默認就是從Home開始的) >>(indicator就是相似兩個大於符號的) admin >> other >>other2( 所以, breadcrumbs的數組中, 有多少個元素, 就有多少級麪包屑導航級數...

注意 , 全部的在views/index.php視圖中的 $this, 都是指的 當前的控制器! 要得到控制器的方法和module , 都直接使用 $this->action->id, $this->module->id; 而要得到類自己的名稱: 則要使用 get_class($this); 

__FILE___, 會把當前文件的 "完整路徑 / + 文件名" 都顯示出來.

一般 控制器 的 默認的 方法 都設置 設置 成 index方法: function actionIndex()..., 並且前臺的目錄項目名稱 一般也設置成 index, 後臺設置成 admin..

能夠100% 的說, 不論是在函數中, 方法中, 仍是array數組的配置文件中, 只要是碰到 "字符序列", 只要不是 明確使用的 (const, define(...)) 常量(大寫的), 都應該看做是 "字符串", 都應該加上 字符串引號. 這個就不要再犯這樣的錯了!!


小物件widget的用法:

  1. widget主要是用在 表單上, 並且, 使用widget, 由於是來自類, 有隱含 的方法和操做 的. 因此有 不少自動化的操做.
  2. yii是徹底oop的, 因此他的 表單 也是以類對象的方式 來使用的.
  3. 要使用表單的 widget, 先要建立表單對象, 而後調用表單對象的方法, 來建立相應的域:
在視圖.php文件中
<?php
 $form = $this -> beginWidget('CActiveForm');
 echo $form -> textFiled('LoginModelObj 表單模型', '表單域的名稱, 如usename, password等', '表單域的屬性組成的數組: array('id'=>'username'...) );

 $this->endWidget();
?>


$form中的全部方法, 都是來自於 類CActiveForm的,  而後 , LoginModel extends  CFormModel

其中, 模型要在 控制器方法中, 用new LoginModel() 的方式建立出來, 而後經過renderPatial的參數 傳遞到視圖文件中...

要注意, $form -> textFiled('model_name', 'form_field_name', array_attr) 中的 表單域的名字, 在相應的模型LoginModel中要有相應的 public 成員變量, ...
相關文章
相關標籤/搜索