程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> thinkphp筆記,thinkphp

thinkphp筆記,thinkphp

編輯:關於PHP編程

thinkphp筆記,thinkphp


M 項目目錄/應用目錄/Lib/Model  V 項目目錄/應用目錄/Tpl  C 項目目錄/應用目錄/Lib/Action   1.PATHINFO 模式    http://域名/項目名/入口文件/模塊名/方法名/鍵1/值1/鍵2/值2 2.普通模式    http://域名/項目名/入口文件?m=模塊名&a=方法名&鍵1=值1&鍵2=值2 3.REWRITE模塊    http://域名/項目名/模塊名/方法名/鍵1/值1/鍵2/值2 4.兼容模式    http://域名/項目名/入口文件?s=模塊名/方法名/鍵1/值1/鍵2/值2   <?php
// 本類由系統自動生成,僅供測試用途
class IndexAction extends Action {
    public function index(){
        echo "hello world";
}
    public function add(){
        echo "你好,吳昊<br>";
        echo '你好'.$_GET['name'].'你的年齡是'.$_GET['age'];
    }
} http://localhost/test/index.php/Index/add?name=wuhao http://localhost/test/index.php/Index/add/name/wuhao http://localhost/test/index.php/Index/add/name/wuhao/age/18  

'URL_PATHINFO_DEPR'=>'-',    //修改URL的分隔符

'TMPL_L_DELIM'=>'<{', //修改左定界符 'TMPL_R_DELIM'=>'}>', //修改右定界符 http://localhost/test/index.php/Index-add-name-wuhao-age-23    http://localhost/test/index.php/Index/index
http://localhost/test/index.php/Index/add public function add(){       /*echo "你好,吳昊<br>";       echo '你好'.$_GET['name'].'你的年齡是'.$_GET['age'];*/       $name='吳昊';       $this->assign('myname',$name);       //$this->myname='abc';       $this->display();  } <meta http-equiv="content-type" content="text/html;charset=utf-8">
一些動態的數據可以通過assign()方法分配給模板顯示 <h1>訪問了add方法。</h1> <p>你好!{$myname}</p> D:\wamp\www\test\App\Tpl\Index   需要在方法中通過new Model(表名)的形式操作數據庫   $m=new Model('User');   $arr=$m->select();   'DB_TYPE'=>'mysql',   //設置數據庫類型
 'DB_HOST'=>'localhost',//設置主機  'DB_NAME'=>'thinkphp',//設置數據庫名  'DB_USER'=>'root',    //設置用戶名  'DB_PWD'=>'',        //設置密碼  'DB_PORT'=>'3306',   //設置端口號  'DB_PREFIX'=>'tp_',  //設置表前綴  'DB_DSN'=>'mysql://root:@localhost:3306/thinkphp',//使用DSN方式配置數據庫信息 ,優先級比傳統方式高
 $user=new Model('User');     $arr=$user->select();     var_dump($arr);     $this->display();   'SHOW_PAGE_TRACE'=>true,//開啟頁面Trace 還有一種簡單實用模型的方式  M() 等效為 new Model();  $m=M('User');  $arr=$m->select();   使用模型的實例可以對數據進行操作,操作的工作一般就是對數據庫進行 增刪改查 CURD  增 -C Create $m->add()  刪 -D Delete $m->delete()  改 -U Update $m->save()  查 -R Read   $m->select()   a、模板可以遍歷數組  <volist name='data' id='vo'>    {$vo.id}----{$vo.username}-----{$vo.sex}<br/>   </volist>  b、我們可以開啟調試功能中的page_trace   1.開啟調試功能    define('APP_DEBUG',true);   2.我們需要設置配置文件,開啟頁面trace    'SHOW_PAGE_TRACE'=>true,//開啟頁面Trace   讀取數據  對數據的讀取 Read  $m=new Model('User');  $m=M('User');  select:$m->select();    //獲取所有數據,以數組形式返回  find:$m->find($id);    //獲取單條數據  getField(字段名)    //獲取一個具體的字段值  $arr=$m->where('id=2')->getField('username'); 創建數據     對數據的添加 Create  $m=new Model('User');  $m=M('User');  $m->字段名=值  $m->add();    返回值是新增的id號 刪除數據     $m=M('User');  $m->delete(2);               //刪除id為2的數據  $m->where('id=2')->delete();    返回值是受影響行數 更新數據  $m=M('User');  $data['id']=1;  $data['username']='ztz2';  $m->save($data);      返回值是受影響行數     CURD演示: ================================================================================================================================================================================================== 查詢方式: 一、普通查詢方式  a、字符串   $arr=$m->where("sex=0 and username='gege'")->find();  b、數組   $data['sex']=0;   $data['username']='gege';   $arr=$m->where($data)->find();   注意:這種方式默認是and的關系,如果使用or關系,需要添加數組值:$data['_logic']='or'; 二、表達式查詢方式   $data['id']=array('lt',6);    $arr=$m->where($data)->select();   EQ 等於,NEQ不等於, GT 大於,EGT大於等於, LT 小於,ELT小於等於,LIKE 模糊查詢    $data['username']=array('like','%ge');    $arr=$m->where($data)->select();   NOTLIKE    $data['username']=array('notlike','%ge%');    $arr=$m->where($data)->select();    注意:如果一個字段要匹配多個通配符    $data['username']=array('like',array('%ge%','%2%','%五%'),'and');    //如果沒有第三個值,默認關系是or關系   BETWEEN    $data['id']=array('between',array(5,7));    $arr=$m->where($data)->select();    //SELECT * FROM `tp_user` WHERE ( (`id` BETWEEN 5 AND 7 ) )    $data['id']=array('not between',array(5,7));    $arr=$m->where($data)->select();   IN    $data['id']=array('in',array(4,6,7));    $arr=$m->where($data)->select();    //SELECT * FROM `tp_user` WHERE ( `id` IN (4,6,7) )    $data['id']=array('not in',array(4,6,7));    $arr=$m->where($data)->select();    //SELECT * FROM `tp_user` WHERE ( `id` NOT IN (4,6,7) ) 三、區間查詢   $data['id']=array(array('gt',4),array('lt',10));    //默認關系是 and 的關系   //SELECT * FROM `tp_user` WHERE ( (`id` > 4) AND (`id` < 10) )   $data['id']=array(array('gt',4),array('lt',10),'or')     //關系就是or的關系   $data['name']=array(array('like','%2%'),array('like','%五%'),'gege','or'); 四、統計查詢   count  //獲取個數;max   //獲取最大數;min   //獲取最小數;avg   //獲取平均數;sum   //獲取總和 五、SQL直接查詢  a、query 主要是處理讀取數據的:成功返回數據的結果集,失敗返回boolean false   $m=M();   $result=$m->query("select *  from t_user where id >50");   var_dump($result);  b、execute 用於更新個寫入操作:成功返回影響行數,失敗返回boolean false   $m=M();   $result=$m->execute("insert into t_user(`username`) values('ztz3')");   var_dump($result);   'DB_LIKE_FIELDS'=>'title|content'     //查詢語句中條件自動變為模糊查詢%% 查詢方式演示: ================================================================================================================================================================================================== 常用連貫操作  1.where     幫助我們設置查詢條件   2.order     對結果進行排序    $arr=$m->order('id desc')->select();    $arr=$m->order(array('id'=>'desc','sex'=>'asc'))->select();  3.limit    限制結果    limit(2,5)     limit('2,5')     limit(10)    //limit(0,10)  4.field     設置查詢字段    field('username as name,id')    field(array('username'=>'name','id')   field('id',true)     //獲取除了id以外的所有字段  5.table  6.group  7.having 二、補充      alias 用於給當前數據表定義別名 字符串    page 用於查詢分頁(內部會轉換成limit) 字符串和數字    join* 用於對查詢的join支持 字符串和數組    union* 用於對查詢的union支持 字符串、數組和對象    distinct 用於查詢的distinct支持 布爾值    lock 用於數據庫的鎖機制 布爾值    cache 用於查詢緩存 支持多個參數(以後在緩存部分再詳細描述)    relation 用於關聯查詢(需要關聯模型擴展支持) 字符串    validate 用於數據自動驗證 數組    auto 用於數據自動完成 數組    filter 用於數據過濾 字符串    scope* 用於命名范圍 字符串、數組  ================================================================================================================================================================================================== 視圖: 一、模板的使用          a、規則   模板文件夾下[TPL]/[分組文件夾/][模板主題文件夾/]和模塊名同名的文件夾[Index]/和方法名同名的文件[index].html(.tpl)   更換模板文件的後綴名(修改配置文件)   'TMPL_TEMPLATE_SUFFIX'=>'.html',    //更改模板文件後綴名  b、修改模板文件目錄層次   'TMPL_FILE_DEPR'=>'_',    //修改模板文件目錄層次  c、模板主題   'DEFAULT_THEME'=>'your',    //設置默認模板主題   需要在TPL下面新建一個your文件夾作為模板主題文件夾   如何動態修改模板主題?   1、在後台准備一個功能,修改config.php文件中的默認模板項   2、通過url傳遞 t=主題 參數可以修改不同的模板    'DEFAULT_THEME'=>'your',//設置默認模板主題    'TMPL_DETECT_THEME'=>true,//自動偵測模板主題    'THEME_LIST'=>'your,my',//支持的模板主題列表 http://localhost/test/index.php/Index/index/t/my    http://localhost/test/index.php/Index/index/t/you 二、輸出模板內容     a、display   1.display中沒有參數:$this->display();   2.可以帶參數    $this->display(本模塊文件夾下的其他模板文件);    $this->display('index2');    $this->display(其他文件夾下的模板文件);    $this->display('Public:error');    //注意,僅僅需要在Tpl下有Public文件夾以及其中的error.html即可,不需要一定有Public模塊    $this->display(其他主題下的 文件夾下的 模板文件);    //需要開啟主題支持    $this->display('my:Index:index');    $this->display(一個URL路徑);    $this->display('./Public/error.html');    $this->display('./Public/error.html','utf-8','text/xml');    $this->show($content);   3.fetch方法    獲得模板文件中的內容,以字符串形式返回:$content=$this->fetch('Public:error');   4.show方法    不需要模板文件,可以直接輸出模板內容     $content=$this->fetch('Public:error');     dump($content);     $content=str_replace('h1','i',$content);     $this->show($content); 三、模板中的賦值         //$this->assign('name','趙桐正');   $this->name='趙桐正2';     $this->display(); 四、模板替換       __PUBLIC__:會被替換成當前網站的公共目錄 通常是 /Public/ __ROOT__: 會替換成當前網站的地址(不含域名) __APP__: 會替換成當前項目的URL地址 (不含域名) __GROUP__:會替換成當前分組的URL地址 (不含域名) __URL__: 會替換成當前模塊的URL地址(不含域名) __ACTION__:會替換成當前操作的URL地址 (不含域名) __SELF__: 會替換成當前的頁面URL   更換模板變量規則,修改配置項   'TMPL_PARSE_STRING'=>array(           //添加自己的模板變量規則   '__CSS__'=>__ROOT__.'/Public/Css',   '__JS__'=>__ROOT__.'/Public/Js',  ),   登錄框實例: 引入擴展類,把ThinkPHP3.1.2_Extend裡面的文件放在D:\wamp\www\test\ThinkPHP\Extend文件夾下。 對應的js和css: D:\wamp\www\test\Public\Css    ·D:\wamp\www\test\Public\Js ================================================================================================================================================================================================== 模板中的變量: 一、變量輸出           1.標量輸出   2.數組輸出     {$name[1]}    {$name['k2']}    {$name.k1}   3.對象輸出     {$name:k}    {$name->k} 二、系統變量 用法含義例子 $Think.server 獲取$_SERVER {$Think.server.php_self} $Think.get 獲取$_GET {$Think.get.id} $Think.post 獲取$_POST {$Think.post.name} $Think.request 獲取$_REQUEST {$Think.request.user_id} $Think.cookie 獲取$_COOKIE {$Think.cookie.username} $Think.session 獲取$_SESSION {$Think.session.user_id} $Think.config 獲取系統配置參數 {$Think.config.app_status} $Think.lang 獲取系統語言變量 {$Think.lang.user_type} $Think.const 獲取系統常量 {$Think.const.app_name}或{$Think.APP_NAME} $Think.env 獲取環境變量 {$Think.env.HOSTNAME} $Think.version 獲取框架版本號 {$Think.version} $Think.now 獲取當前時間 {$Think.now} $Think.template 獲取當前模板 {$Think.template} $Think.ldelim 獲取模板左界定符 {$Think.ldelim} $Think.rdelim 獲取模板右界定符 {$Think.rdelim} 三、使用函數   {$name|strtoupper} 生成的編譯後文件是: <?php echo (strtoupper($name)); ?>   {$name|date='Y m d H:i:s',###} 四、默認值   {$name|default='這裡是默認值'} 五、運算符   + - * / % ++ --        {$name++}   模板中的基本語法: 一、導入CSS和JS文件        1、<link rel='stylesheet' type='text/css' href='__PUBLIC__/Css/test.css'/>       <script src='__PUBLIC__/Js/test.js'></script>  2.import   <import type='js' file='Js.test' />     //導入Public文件夾下面的Js目錄中的test.js文件,import標簽可以省略type屬性,默認就是js的   <import type='css' file='Css.test' />   <import type='js' file='Js.my' basepath='./Other'/>     //可以更改默認文件夾 設置basepath屬性  3.load   <load href='__PUBLIC__/Js/test.js' />     //方法可以自動檢測導入的文件類型 二、分支結構   <if condition='$age lt 18'>        未成年    <elseif  condition='$age eq 18'/>        青春年少    <else />        成年   </if>       >  gt     <  lt     == eq     <= elt     >= egt      != neq     === heq     !== nheq    <switch name='number'>        <case value='1'>一個和尚挑水吃</case>        <case value='2'>兩個和尚台水吃</case>        <case value='3'>三個和尚沒水吃</case>        <default/> 這裡是默認值   </switch> 三、循環結構  1.for   <table border='1' width='500'>        <for start='10' end='00' name='j' step='-2' comparison='gt'>             <tr><td>{$j}</td><td>abc</td></tr>        </for>   </table>  2.volist   <volist name='list' id='v'>    {$v.username}<br/>   </volist>  3.foreach   $user=M('User1');   $arr=$user->select();   $this->assign('list',$arr);   $this->display();    <foreach name='list' item='v'>       <tr>            <td>{$v.id}</td>            <td>{$v.username}</td>            <td>{$v.sex}</td>            <td>{$v.password}</td>       </tr>  </foreach> 四、特殊標簽  1、比較標簽    eq或者 equal 等於   neq 或者notequal 不等於      gt 大於     egt 大於等於     lt 小於     elt 小於等於     heq 恆等於   nheq 不恆等於    2.范圍標簽   in           <in name='n' value='9,10,11,12'>在這些數字裡面<else/>不在這些數字的范圍內</in>     <notin name='n' value='9,10,11,12'>在這些數字裡面<else/>不在這些數字的范圍內</in>   between     <notbetween name='n' value='1,10'>{$n}在1-10之間<else/>{$n}不在1到10之間</between>  3.present:標簽來判斷模板變量是否已經賦值,   <present name='m'>m有賦值<else/>m沒有賦值</present>  4.Empty:empty標簽判斷模板變量是否為空,   <empty name='n'>n為空賦值<else/>n有值</empty>  5.Defined: 判斷常量是否已經定義  6.Define:在模板中定義常量  7.Assing: 模板中變量賦值 五、其他標簽使用  1、在模板中直接使用PHP代碼   <php> echo "我是趙桐正" </php>  2、建議更改左右定界符   在配置文件中改變    'TMPL_L_DELIM'=>'<{', //修改左定界符    'TMPL_R_DELIM'=>'}>', //修改右定界符   模板的使用技巧: 一、模板包含   <include file="完整模板文件名" />   <include file="./Tpl/default/Public/header.html" />   <include file="read" />   <include file="Public:header" />   <include file="blue:User:read" />   <include file="$tplName" />   <include file="header" title="ThinkPHP框架"keywords="開源WEB開發框架"/>   在模板中變量用[變量]接受:<include file='file1,file2' /> 二、模板渲染  1、自動開啟模板渲染 設置配置文件    'LAYOUT_ON'=>true,    //開啟模板渲染    准備一個模板渲染頁面,在頁面中使用{__CONTENT__}接受具體模板頁面的內容    如果在某一個具體模板中不希望使用渲染模板,可以在頁首添加{__NOCONTENT__}  2、不開啟自動模板渲染可以在每一個具體頁面的頁首添加:<layout name='layout'/>  3.使用技巧:在渲染模板文件中也可以使用其他模板文件的內容   <include file='Public:header'/>       <body>            <p>這裡是渲染頁面!!!</p>            {__CONTENT__}       </body>  </html> 三、模板的繼承  ================================================================================================================================================================================================== 控制器的模塊和操作: 一、空模塊和空操作  1、空操作   function _empty($name){    $this->show("$name 不存在 <a href='__APP__/Index/index'>返回首頁</a>");   }  2.空模塊  class EmptyAction extends Action{       function index(){            $city=M('City');            $arr=$city->select();            $this->assign('list',$arr);            $name=MODULE_NAME;            $this->display("City:$name");   }  } 二、前置操作和後置操作  1、前置操作: _before_操作名  2、後置操作: _after_操作名   ================================================================================================================================================================================================== URL: 'URL_CASE_INSENSITIVE'=>true,//url不區分大小寫 'URL_HTML_SUFFIX'=>'html|shtml|xml',//限制偽靜態的後綴 一、URL規則
1、默認是區分大小寫的
2、如果我們不想區分大小寫可以改配置文件
'URL_CASE_INSENSITIVE'=>true,    //url不區分大小寫
3、如果模塊名為 UserGroupAction
那麼url找模塊就必要要寫成
http://localhost/thinkphp4/index.php/user_group/index
4、如果'URL_CASE_INSENSITIVE'=>false
那麼url也可以寫為
http://localhost/thinkphp4/index.php/UserGroup/index
二、URL偽靜態
'URL_HTML_SUFFIX'=>'html|shtml|xml',    //限制偽靜態的後綴
三、URL路由
1、啟動路由
要在配置文件中開啟路由支持
2、使用路由
1.規則表達式配置路由
'my'=>'Index/index',    //靜態地址路由
':id/:num'=>'Index/index',    //動態地址路由
'year/:year/:month/:date'=>'Index/index',    //動態和靜態混合地址路由
'year/:year\d/:month\d/:date\d'=>'Index/index',    //動態和靜態混合地址路由 
加上 \d代表類型只能是數字
'my/:id$'=>'Index/index',    // 加上$說明地址中只能是 my/1000 後面不能有其他內容了
2.正則表達式配置路由
'/^year\/(\d{4})\/(\d{2})\/(\d{2})/'=>'Index/index?year=:1&month=:2&date=:3'
3、注意事項:
1.越復雜的路由越往前面放
'URL_ROUTE_RULES'=>array(
'my/:year/:month:/:day'=>'Index/day',
'my/:id\d'=>'Index/index',
'my/:name'=>'Index/index',
)
2.可以使用$作為完全匹配的路由規則
'URL_ROUTE_RULES'=>array(
'my/:id\d$'=>'Index/index',
'my/:name$'=>'Index/index',
'my/:year/:month:/:day$'=>'Index/day',
),
3.用正則匹配的方式
'URL_ROUTE_RULES'=>array(
'/^my\/(\d+)$/'=>'Index/index?id=:1',
'/^my\/(\w+)$/'=>'Index/index?name=:1',
'/^my\/(\d{4})\/(\d{2})\/(\d{2})$/'=>'Index/day?year=:1&month=:2&day=:3',
),
四、URL重寫
五、URL生成
頁面跳轉  $this->success('查詢成功',U('User/test'));  $this->redirect('User/test','',5,'頁面正在跳'); 'APP_GROUP_LIST' => 'Home,Admin', //項目分組設定 'DEFAULT_GROUP'  => 'Home', //默認分組 ==================================================================================================================================================================================================

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved