yii schema.mysql.sql_YII学习,初体验 ,对YII的一些理解.
先說點沒用的:
不會選擇,選擇后不堅持,不斷的選擇.這是人生中的一個死循環,前兩一直迷茫.覺得自己前進方向很不明朗.想去學的東西有很多.想學好YII,想學PYTHON 想學學hadoop什么的,又想研究下mongodb.還想學習redis.這么多的想法一股腦的涌入我的腦海,一下讓我這個腦袋不堪重負.一下就亂了陣腳.于是靜下心來好好想想.經歷了幾天的思想掙扎.終于靜下心來,從最想學的開始,研究YII.在網上無意中看見這句話,覺得挺符合我當時的心境的.現在想想.其實無非是,貴在堅持.
想好好學習YII的框架,在網上一片好評的框架.可是我發現網上真的很少有能夠讓初學者感興趣的文章.所有文章一概的搬官方的指南,或者是翻譯兩本國外的圖書,根本很難理解,很生澀.而且很多地方不適合國內環境.其實很多人學習YII框架的目的無非是HOW(怎么用).沒有多少人愿意去研究WHY.我耗時好幾天去研究YII的框架.我雖然不需要完全理解YII是如何那么好的運行的.但是我至少要知道.它大概是怎么工作的.我該從何入手.做什么能夠影響到YII的運行.
進入正題:
YII框架的好處我就不多說了,大家可以自己去百度上面google一下.至于YII怎么安裝,能夠自動的建立應用之類的云云,大家可以自行參考YII中文官方網站上面的博客指南和權威指南.我想使用YII做一套CMS.這是我的目的.于是我帶著我的目的去研究了.
開始深入.
在YII框架建立好了應用之后,目錄結構和下面的差不多 ? 官方網站上有解釋各個目錄都是干啥地
testdrive/
index.php Web 應用入口腳本文件
index-test.php 功能測試使用的入口腳本文件
assets/ 包含公開的資源文件
css/ 包含 CSS 文件
images/ 包含圖片文件
themes/ 包含應用主題
protected/ 包含受保護的應用文件
yiic yiic 命令行腳本
yiic.bat Windows 下的 yiic 命令行腳本
yiic.php yiic 命令行 PHP 腳本
commands/ 包含自定義的 'yiic' 命令
shell/ 包含自定義的 'yiic shell' 命令
components/ 包含可重用的用戶組件
Controller.php 所有控制器類的基礎類
Identity.php 用來認證的 'Identity' 類
config/ 包含配置文件
console.php 控制臺應用配置
main.php Web 應用配置
test.php 功能測試使用的配置
controllers/ 包含控制器的類文件
SiteController.php 默認控制器的類文件
data/ 包含示例數據庫
schema.mysql.sql 示例 MySQL 數據庫
schema.sqlite.sql 示例 SQLite 數據庫
testdrive.db 示例 SQLite 數據庫文件
extensions/ 包含第三方擴展
messages/ 包含翻譯過的消息
models/ 包含模型的類文件
LoginForm.php 'login' 動作的表單模型
ContactForm.php 'contact' 動作的表單模型
runtime/ 包含臨時生成的文件
tests/ 包含測試腳本
views/ 包含控制器的視圖和布局文件
layouts/ 包含布局視圖文件
main.php 所有視圖的默認布局
column1.php 使用單列頁面使用的布局
column2.php 使用雙列的頁面使用的布局
site/ 包含 'site' 控制器的視圖文件
pages/ 包含 "靜態" 頁面
about.php "about" 頁面的視圖
contact.php 'contact' 動作的視圖
error.php 'error' 動作的視圖(顯示外部錯誤)
index.php 'index' 動作的視圖
login.php 'login' 動作的視圖
system/ 包含系統視圖文件
---------以上摘自官方YII權威指南頁面---------------
既然骨架建立出來了,很多人估計到這步的時候跟我一樣了.不明覺厲.而且現在的狀態是,摸不著頭腦.我滴個娘親啊,這得從何下手啊.這個時候大多數人做的事情我想和我一樣.肯定是現打開index.php看看里面到底寫了點啥玩意兒.打開了index.php后看見如下代碼了
$yii=dirname(__FILE__).'/../../framework/yii.php';$config=dirname(__FILE__).'/protected/config/main.php';//remove the following line when in production mode
// defined('YII_DEBUG') or define('YII_DEBUG',true);
require_once($yii);
Yii::createWebApplication($config)->run();
這幾行我估計大家都看的懂,定義了YII框架所在的目錄,引入了一個main.php的配置文件,然后打開了debug.最后直接調用了Yii::createWebApplication方法.看后面的調用方式,這個方法一定返回了某個類的具體實例.
看樣子問題轉移到了這個實例到底是啥滴實例?
并且傳入的$config給實例后,實例干了些什么?
調用run方法又干了些什么?
當我想繼續研究的時候我發現我進入了追查階段.但是我想的只是怎么用這個框架.好吧 回到主題.我要做CMS.
做cms的話前端展示和后臺管理一定要分開啊.而且據說YII支持模塊.于是我參考了幾個國內的YII做的cms后發現大多數人都吧admin寫成了模塊.我也來寫一個模塊.據說yii有個自動化的工具叫做Gii.于是我配置了Gii.并且生成了我想要的模塊admin模塊.
這個時候Gii會提示我們在main.php,也就是配置文件的modules里面添加上模塊的信息.打開了main.php文件之后有讓我大吃一驚.what?為蝦米是個數組.既然你是數組,我就先把你放在這里.一會研究你.先不管.把我的模塊添加進來;
'modules'=>array(//uncomment the following to enable the Gii tool//這句就是說取消注釋啟用Gii
'gii'=>array('class'=>'system.gii.GiiModule',
'password'=>'??????????',
//If removed, Gii defaults to localhost only. Edit carefully to taste.
'ipFilters'=>array('127.0.0.1','::1'),),//這個是參照官方的文檔添加的Gii模塊,其實本來就已經寫好了,只需要取消注釋就好了
'admin',//這個才是我添加的admin模塊.
),
先看看效果,訪問http://yourwebroot/index.php?r=admin就能夠看到你新建模塊的東西了.此時顯示了你的訪問路徑和兩句幫助信息,說這個頁面是怎么來滴.在那個控制器下面.而且告訴你要修改什么文件.此時我發現了一個很不爽的地方就是為啥你不給我定義控制器名稱的地方,我不想讓我的控制器名稱叫default.好嗎?于是修改了控制器的名稱,和控制器對應的view文件夾名稱還有控制器的文件名稱.但是,此時發現再訪問這個控制器滴時候竟然報錯了.說找不到控制器.好吧.我用腳后跟這么一想,一定是有個地方能設置默認的控制器.待我找找.打開模塊目錄.模塊自然是繼承自模塊基類.當打開模塊目錄后看到的第一個PHP文件里面的內容如下:
{public functioninit()
{//this method is called when the module is being created
// you may place code here to customize the module or the application
//這兩句的意思是這個方法將會在模塊被建立的時候調用.你可以在這里編寫代碼用于驗證等工作.
//注意到這個模塊繼承自CWebModule,也就是說CWebModule里面的屬性和方法在這里會被首先調用,那好,我在這里自然也可以設置從模塊的基礎類繼承出來的屬性.
//注意此時還沒有涉及到控制器.
// import the module-level models and components
$this->defaultController = '控制器名稱,不帶Controller后綴的,小寫.';$this->setImport(array('admin.models.*',
'admin.components.*',));
}public function beforeControllerAction($controller, $action)
{if(parent::beforeControllerAction($controller, $action))
{//this method is called before any module controller action is performed
// you may place customized code here
//這個地方會在控制器的方法被調用之前執行.也就是說這個地方很適合用來做驗證.
return true;
}else
return false;
}
}
上面注釋里面說了 ,我要去參考下CWebModules類里面定義的屬性和方法.(官方有手冊)果斷找到了里面定義的defaultController屬性.于是在init里面添加了一行$this->defaultController = '控制器名稱,不帶Controller后綴的,小寫.';搞定了控制器.再次訪問我們的網址http://yourwebroot/index.php?r=admin,OK了,看樣子我們的設置起作用了.其實在這里面還有很多我們可以設置的屬性.yii的手冊寫的很不錯.雖然一開始我并不知道應該怎么去讀他.
修改LAYOUT
此時我發現了一個更讓我不能夠接受的東西.為蝦米我的這個模塊會調用和首頁一樣的樣式風格,也就是一樣的視圖模板去渲染啊.這后臺的模板一定是不能和前臺一樣的.于是研究YII的視圖.也就是說此時我要實現的目的是讓admin模塊使用和前臺不一樣的視圖.在YII的權威指南上我們可以找到視圖的說明.上面說視圖分為布局,視圖,和小物件.看完之后發現小物件暫時用不到.那我就來看看布局吧.由于模塊的目錄結構和網站整體的目錄結構很想.看一下目錄結構.發現控制器有自己單獨的視圖文件夾.layout文件夾里面放置的是用來渲染的公共部分.在YII里面,我們可以理解為layout就是一個公共的模板框架.而真正的內容在layout所輸出的content里面.也就是說在開發的過程中.我們先寫好整體的公共部分框架,放在layouts文件夾里面,然后再在各個控制器單獨對應的視圖文件夾里面去寫不同的地方就行了.這里面可以用來渲染數據.好吧,我又用我的腳后跟想了想.一定有個地方能夠控制layout目錄.在什么地方呢.程序的運行邏輯是:
入口文件(載入配置)->模塊文件(配置模塊的一些信息)->調用控制器->調用控制器里面的方法/動作->渲染視圖文件.
也就是說是在控制器里面的方法下渲染的視圖文件.參考SiteController里面的action可以知道render()方法能夠沒有參數就執行.也就是說這個layout的默認屬性應該是被配置在了控制器這一層.
打開控制器文件,如下:
{public functioninit(){$this->layout="application.modules.admin.views.layouts.admin";
}public functionactionIndex()
{$this->render('index');
}public functionactionLogin()
{
}
}
這里面的AdminController繼承自Controller.通過目錄結構可以看到這個文件在components目錄下面,而且這個Controller繼承自Ccontroller.那么我想Ccontroller里面一定有一個屬性是默認的layout.果然找到了.于是我在里面設置了layout屬性.如果想讓所有admin模塊下面的layout屬性都指定到這個目錄.我們可以參考controller來重寫一個繼承自Ccontroller的類.在里面設置這個屬性.只要在其子類里面不去覆蓋這個屬性,那么我們設置的這個屬性就會被繼承.這個同上.在手冊上我們可以看見有很多屬性可以去設置.也有很多方法供我們使用.
到現在,我一共做了幾件事情,首先我修改了模塊里面的默認控制器,同比我也可以在作為模塊中控制器的父類里面設置每一個繼承控制器類的默認動作.我又設置了默認的layout方法.使用的別名路徑.這個是yii提供的一個功能.可以在權威指南上找到.接下來我們要做的事情就是針對admin模塊并參考默認的view文件夾來寫后臺的基礎視圖,實現后臺用戶的驗證.并且能夠渲染后臺的主頁面,實現后臺登陸用戶的管理.等等等等.這些工作后面在做.還記得上面我提的3個問題么.
我們在index.php的入口文件里面看見yii建立了一個某類的實例并且調用了這個類的run方法.而且還傳入到類里面一個配置文件.這個到底是哪個類的方法呢.追查代碼.我們會發現這個類是CWebApplication的實例.傳入的config數組一定是用來配置并生成這個類的實例了.也就是說這個配置文件是被CwebApplication這個類來解析的.具體的解析在這個類的基類CModule中的configure()方法上面.可以看手冊自己去追.這樣說也就是意味著所有寫在config數組里面的配置對會逐一的被配置到CwebApplication這個類上面.所以我們可以參考這個類的手冊來寫數組.打個比方來說.在這個類里面有一個參數叫做layout;我們在配置數組里面寫如下的參數 ?'layout' => '這里寫一個路徑別名'; 那么在沒有他處指定layout的情況下這個默認的layout就會被使用.
而這個配置文件里面又包含了數組.同樣會被解析.例如modules里面的數組 ?我們同樣可以配置module的各個屬性在配置數組里面,例如上面的admin模塊中,我們可以這樣配置
'modules'=>array(//uncomment the following to enable the Gii tool
'gii'=>array('class'=>'system.gii.GiiModule',
'password'=>'zhangjian.123!',
//If removed, Gii defaults to localhost only. Edit carefully to taste.
'ipFilters'=>array('127.0.0.1','::1'),),
'admin'=>array('defaultController'=>'admin',
'layout'=>'設置layout的路徑',
//在這里可以設置所有admin模塊所繼承的基類的屬性.可以看手冊Ccontroller里面的各個屬性.
//在這里設置的屬性會在模塊被調用的時候直接被設置成值.
),),
如果我們的模塊配置文件比較大.還可以把這個模塊的配置分離出去.然后在主配置文件里面去引用這個模塊的配置文件.這樣也方便大家一起開發.當然我們也可以在繼承的子類里面設置自己的屬性.也可以通過這個來設置.
YII對網站進行了抽象,每一個站點實際上都是CwebApplication的一個實例.這個實例里包含了屬性,方法,而有的屬性是控制器.有的屬性是模塊.有的屬性是組件.就像我們把一個網站比作一輛小汽車.那么yii就是一個汽車制造工廠.每個汽車的組成不同.有的有gps定位.有的是手自一體的.網站也就不一樣.有的使用了cache.有的使用了數據庫.而我們建設網站就像是組裝汽車一樣.可以從YII提供的組件里選擇自己得心應手的組件來應用.或者稍加修改.如果沒有我們想用的組件.我們也可以自己開發一個組件.用在網站上.就像汽車出廠的時候沒有行車記錄儀一樣.我們可以給我們建造的"小汽車"安裝一個行車記錄儀.
對于YII的初體驗就寫到這里.后面我還想繼續寫..如果覺得本文對你有所幫助,還請幫忙推薦一下.畢竟是個人觀點,如果有什么地方寫的不好.還希望各位大神指正.
總結
以上是生活随笔為你收集整理的yii schema.mysql.sql_YII学习,初体验 ,对YII的一些理解.的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python语言中包含的标准数据类型_P
- 下一篇: lucene索引MySQL原因_我如何在