這一週一直忙於作實驗室的站點,基本功能算是完畢了。比較有收穫的是大概瞭解了ThinkPHP框架。寫一些東西留做記念吧。假設對於相同是Web方面新手的你有一絲絲幫助,那就更好了挖。php
曾經用PHP作過一個很是蹩腳的站點,爲何這麼說呢,因爲寫的全是死代碼。作完之後認爲實在是累,前端要div+css,js 後端要php,mysql,這麼多東西要弄,十分頭疼。因此,在接到作站點的任務後,我第一時間想到必定要使用開發框架去作,毫不能跟曾經同樣那麼累了。css
我選擇的是PHP的ThinkPHP框架。說實話,真的蠻不錯的。瞬間認爲Web開發仍是蠻有效率的。html
超級連接:ThinkPHP中文網前端
依照套路,首先貼一下實驗環境:mysql
-------------------------------------------------------------華麗切割-------------------------------------------------------------web
第一步:找網頁模板(不會美工,PS,見諒。。)sql
前端頁面我找的是一個大學的實驗室,這裏就不貼了,很是普通的那種。後臺直接下載的模板,感受蠻美麗的,執行後例如如下圖:thinkphp
第二步:初識百度UEditor插件
數據庫
由於我要作的是實驗室的站點。實驗室站點主要內容在例如如下幾個方面:後端
可見,信息主要偏重於後臺的新聞,文章信息的公佈,而前臺差點兒不存在編輯。因此重點要在後臺實現一個方便的文章公佈體系。
我選用了百度出品的UEditor所見即所得編輯器。主要是JS實現的,整合到後臺後例如如下所看到的,功能真的很是多哇:
關於UEditor的怎樣整合到站點中,請參考UEditor的官網,裏面有具體教程。
第三步:初識ThinkPHP框架
如下開始介紹ThinkPHP框架,首先爲了增強感性認識,先看一看ThinkPHPproject的文件夾結構:
目錄:
如下三個PHP文件:
而剩下的buildpath ,.settings , .project 是Zend IDE生成的,不管它們。
------------------------------------------------------華麗切割-------------------------------------------------------------
由於我這裏面實際是兩個project(home和admin),僅僅要理解當中一個就能夠,故如下僅僅介紹後臺,即admin部分。
接着往下看,看一下admin.php文件,這是需要了解的第一個文件,即後臺的入口文件。
幾個宏定義分別指明瞭:
如下新建一個小project來演示一下開發過程:
比方整個project的大文件夾是xxx,而後把ThinkPHP框架拷貝進來,並加入�admin.php文件(如上圖中的代碼)
此時在瀏覽器裏面輸入:http://localhost/xxx/admin.php會本身主動生成admin文件夾,例如如下圖
打開admin文件夾,內容例如如下:
當中主要關注四個目錄:
1. Conf 存放project配置文件(比方定義一些常量什麼的)
2. Lib (最重要!存放MVC模式中的模型類和控制器類)
3. Tpl(存放模板文件,按道理前面咱們下載的模板應該放在這裏)
4. Runtime(存放執行時文件,比方緩存啊,數據庫表緩存什麼的)
最後貼出瀏覽器上的執行結果。。對不起貼的有點晚。
假設能看到上面的畫面,說明ThinkPHP可以正常執行啦。如下咱們繼續無缺吧。
------------------------------------------------------------華麗切割-----------------------------------------------------
第四步:初識MVC模式
到這裏,不得不提一下在ThinkPHP中的MVC的概念。MVC很是有名,叫作模型-視圖-控制器模式。
在ThinkPHP裏面:
模型(Model)可以以爲就是一張數據庫表。那我作的project來講:
對於一篇文章(新聞),它的屬性包含ID號,標題,做者,建立時間,最後改動時間以及文章內容。這就是一篇文章的模型。而後就依照這個思路創建相應的數據庫表:
視圖(View)可以以爲就是用戶看到的東西,即模板,或者說皮膚。
比方前面貼出的後臺模板,那個在ThinkPHP概念中就是視圖。
控制器(Action)可以以爲是視圖與模型以前的橋樑。因爲站點上顯示的內容基本全部來自衆多模型們(數據庫表們),而控制器負責的就是決定在哪些狀況下顯示哪些模型裏面的哪些數據。仍是拿個人樣例說,我後臺project的首頁相應的控制器是Index控制器。(Index控制器爲全部project的默認控制器)。但是你想,一個站點的首頁一般是有很是多button啊,超連接啊什麼的,可以跳到其它地方去的東西。貼張圖:
這是個人後臺首頁。可以看到左邊有導航欄,右下邊列出了數據庫當前的文章信息,可以看到一共同擁有三篇文章。比方我現在可能想作:
1. 把文章」1111測試文章公佈系統」刪除
2. 把文章」詹姆斯高捧第3座MVP獎盃」改爲」詹姆斯高捧第4座MVP獎盃」
3. 新加入�一篇別的文章
這就相應了Index控制器的不一樣功能了,也就是Index控制器類IndexAction的不一樣方法(比方取名edit()方法,delete()方法,add()方法)。固然之因此會看到頁面顯示,是因爲默認狀況下運行Index控制器的Index()方法,在該方法中調用display()方法顯示模板(視圖)。不信可以看默認的文件,裏面的Index控制器的Index方法實現的就是HelloThinkPHP的歡迎頁面。
比方:
IndexAction文件夾爲:
/xxx/admin/Lib/Action/IndexAction.class.php
內容爲:
可以看到,默認狀況下在index方法中調用了$this->display()
(注意看IndexAction 繼承Action類,display方法是Action類的方法);
調用display()方法後,ThinkPHP會在相應project的Tpl目錄下的Index文件下下找index.html文件。當中前一個Index目錄相應的是Index控制器,index.html相應的是index()方法。
因此,一個控制器類相應一個模板目錄。詳細相應多少個模板跟控制器類有多少個方法以及有多少個方法需要display有關。
故,此時相應的模板文件路徑爲:
/xxx/admin/Tpl/Index/index.html
細心的朋友可能要問了,你這裏僅僅說了視圖(模板)和控制器啊,模型呢?你是怎麼知道數據庫裏的那三篇文章的信息的呢?事實上否則,我在index方法裏面還作了一些事情,下圖是精簡版index方法:
可以看到,第一步,我就實例化了一個模型。模型名字是Article,前面說到模型就是數據庫表,此時查看一下有哪些數據庫表:
第一個表名字是think_article,可以看到還差一個前綴think_,事實上這個是在配置文件裏指定的,還記得前文所述的config.inc.php嗎? 其配置代碼例如如下所看到的:
<?php
return array(
'DB_TYPE' =>'mysql',
'DB_HOST' =>'localhost',
'DB_NAME' =>數據庫名字,
'DB_USER' =>username,
'DB_PWD' =>password,
'DB_PORT' =>'3306',
'DB_PREFIX' =>'think_',
);
?>
第二條語句就是查詢數據庫。ThinkPHP提供了很是多種查詢數據庫的方法,我使用的是連貫操做法。
運行完第二條語句後$new_list變量就存儲了所有文章的信息,那麼怎麼把它顯示到界面上去呢?
看第三句話,它把該變量分配給了一個叫作’new_list’的變量 (好像同名了哇。。只是不要緊,關鍵是assign方法),而後咱們在模板文件中面進行替換就OK啦。默認狀況下,在HTML裏面寫 {$new_list}就OK啦。固然,這裏面的new_list是一個複合的變量,不是單純的數字或者字符串。。只是ThinkPHP提供了很是多循環的方法給咱們使用,很是是方便。
最後一條語句就是顯示相應的視圖文件了。咱們就能把數據庫中的文章信息依照視圖(模板)裏面定義的規則顯示在瀏覽器中了。
---------------------------------------------------------------華麗切割-----------------------------------------------------------
源代碼下載
最後給出演示樣例projectxxx的源代碼。有需要的朋友可以下載,可以很是快的瞭解ThinkPHP的大概原理。
源代碼功能:
用法:
<?php
return array(
'DB_TYPE' => 'mysql',
'DB_HOST' => 'localhost',
'DB_NAME' => '本身建一個數據庫',//需要新建一個數據庫!名字叫
'DB_USER' => '你的數據庫username', //數據庫username
'DB_PWD' => '你的數據庫password',//數據庫登陸password
'DB_PORT' => '3306',
'DB_PREFIX' => 'think_',//數據庫表名前綴
);
?>
各自是
'DB_NAME'=>'rubydb' ,
'DB_USER' =>'你的mysql登陸帳號' ,
'DB_PWD' =>'你的mysql登陸password'
輸入數據庫think_user裏面的用戶信息: ruby97,passwordruby97 ,再輸入驗證碼就能夠登陸。
選擇寫新聞button,本身加入�一篇文章。而後到http://localhost/xxx如下看結果吧!