Thinkphp 零散知識點(caa/js路徑,引入第三方類,ajax返回,session/cookie)

 1、關於JS和CSS路徑問題

1.找路徑是從入口文件index.php來找的,而不是從文件自己所在位置來找,

 由於咱們訪問時是訪問的入口文件

2.在存放JS和CSS的時候能夠放到public文件夾下

3.能夠使用標籤引入:

3.1 import標籤

傳統方式的導入外部JS和CSS文件的方法是直接在模板文件使用:javascript

系統提供了專門的標籤來簡化上面的導入:php

3.2 load標籤

load標籤,經過文件方式導入當前項目的公共JS或者CSScss

3.3js和css標籤

系統還提供了兩個標籤別名js和css 用法和load一致,例如:html

 

 

2、第三方類入

有兩塊地方能夠放第三方類
(1)模塊下面
(2)Library下面新建文件夾或者舊的文件夾裏面
放進去以後,須要添加命名空間,命名空間從根命名空間寫起
注意類文件的命名規則和類名的規則

以分頁爲例:

原來在分頁時使用limit標籤:java

如今也能夠引入分頁類:jquery

Library下面新建文件夾或者舊的文件夾裏面

作法1:在ThinkPHP\Library\Think文件夾下新建fenye文件夾並將以前的page.class.php複製到fenye裏

page.class.php的命名空間:namespace Think\fenye;(其他不發生變化)ajax

控制器裏面寫入:use Think\fenye\Page;sql

ZhuCeController.class.php數組

 1 namespace Home\Controller;
 2 use Think\Controller;
 3 use Think\fenye\Page;
 4 class ZhuCeController extends Controller
 5 {
 6 
 7         //第三方類引入
 8     function FenYe()
 9     {
10         
11         $model=M("nation");
12         $total=$model->count();
13         $page=new Page($total,1);
14          
15         $sql="select * from nation ".$page->limit;
16         $attr=$model->query($sql);
17         
18         $xinxi=$page->fpage();
19         //var_dump($attr);
20         $this->assign("xinxi",$xinxi);
21         $this->assign("nation",$attr);
22         
23         $this->display();    
24     }    
25 }
View Code

View/ZhuCe/FenYe.html:session

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>無標題文檔</title>
 6 </head>
 7 
 8 <body>
 9 <table border="1" width="40%">
10 <tr>
11 <td>代號</td>
12 <td>名稱</td>
13 </tr>
14 <foreach name="nation" item="v">
15 <tr>
16 <td><{$v.code}></td>
17 <td><{$v.name}></td>
18 </tr>
19 </foreach>
20 </table>
21 <div><{$xinxi}></div>
22 </body>
23 </html>
View Code

運行結果:

 

作法2.在Home模塊下的作法

在Home下新建文件夾fenye而後引入Page.class.php,其他不發生改變,效果是同樣的

分頁類裏面的命名空間發生改變:namespace Home\fenye

控制器裏面的的命名空間改變:use Home\fenye\Page

 

運行結果不變:

作法3.不使用use Home\fenye\Page;

 

作法4:改變分頁的部分條件,加入使用limit標籤

1.修改Home裏面的分頁類

2.修改控制器中的寫法

 

3.Ajax返回

(1)url要變爲MVC模式,指向的不是具體頁面,是操做方法

(2)在操做方法裏面返回值的時候,使用ajaxReturn()方法返回,注意返回類型,返回類型要和第二個參數一致

 

ThinkPHP能夠很好的支持AJAX請求,系統的\Think\Controller類提供了ajaxReturn方法用於AJAX調用後返回數據給客戶端。而且支持JSON、JSONP、XML和EVAL四種方式給客戶端接受數據,而且支持配置其餘方式的數據格式返回。

返回數據data能夠支持字符串、數字和數組、對象,返回客戶端的時候根據不一樣的返回格式進行編碼後傳輸。若是是JSON/JSONP格式,會自動編碼成JSON字符串,若是是XML方式,會自動編碼成XML字符串,若是是EVAL方式的話,只會輸出字符串data數據。

1)利用Ajax返回的動態驗證

 1 //ajax驗證用戶名非空
 2     function Yhm()
 3     {
 4         $model=D("Text");
 5         $rules=array(
 6             array('uid','require','用戶名不能爲空'),
 7         );
 8         if(!$model->validate($rules)->create())
 9         {
10             $fh=$model->getError();
11             $this->ajaxReturn($fh,"eval");
12         }
13         else
14         {
15             $fh="OK";
16             $this->ajaxReturn($fh,"eval");
17                 
18         }
19         
20     }
21     
View Code

2)Zhuce.html

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>表單驗證</title>
 6 <script src="../../../../../jquery-1.11.2.min.js">
 7 </script>
 8 </head>
 9 
10 <body>
11 <form action="__ACTION__" method="post">
12 <div>用戶名:<input type="text" id="uid" name="uid" /><span id="ts"></span></div><br />
13 <div>密&nbsp;&nbsp;&nbsp;&nbsp;碼:<input type="text" name="pwd" /></div>
14 <div>確認密碼:<input type="text" name="pwd1" /></div><br />
15 <div>年齡:<input type="text" name="age" /></div><br />
16 <div>郵箱:<input type="text" name="email" /></div><br />
17 <div>姓名:<input type="text" name="name" /></div><br />
18 <!--顯示錯誤信息 -->
19 <div style=" width:200px; height:30px; border:#F00 solid 2px; line-height:30px; vertical-align:middle; text-align:center;"><{$error}></div><br />
20 <div><input type="submit" value="註冊" /></div>
21 </form>
22 </body>
23 <script type="text/javascript">
24 $(document).ready(function(e) {
25     $("#uid").blur(function(){
26         var uid=$(this).val();
27         $.ajax({
28             url:"__CONTROLLER__/Yhm",
29             data:{uid:uid},//這裏要傳的參數名必須和表單裏的name一致
30             type:"POST",
31             dataType:"TEXT",
32             success: function(data){
33                 $("#ts").html(data);
34                 }
35 
36             });
37 
38         })
39 });
40 
41 </script>
42 </html>
View Code

顯示效果:

            

 

4.Session和Cookie

SESSION支持:

系統提供了Session管理和操做的完善支持,所有操做能夠經過一個內置的session函數完成,該函數能夠完成Session的設置、獲取、刪除和管理操做。

 

 

 

COOKIE支持:

 

 

登陸:

 登陸方法1:存session值,判斷是否有這個值在登陸

LoginController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
class LoginController extends Controller
{
    public function Login()
    {
        if(empty($_POST))
        {
            $this->display();    
        }    
        else
        {
            $model = D("users");        
        
            $uid = $_POST["uid"];
            $pwd = $_POST["pwd"];
            
            $attr = $model->field("Pwd")->find($uid);
            //echo $attr["pwd"];
            
            if($pwd == $attr["pwd"])
            {
                session("uid",$uid);
                $this->success("登陸成功","Main");
            }
            else
            {
                $this->error("登陸失敗");    
            }
        }
    }
    
    public function Main()
    {
        //var_dump(session('?uid'));
        //有session時返回true
        
        //判斷session
        if(!session('?uid'))
        {
            $this->error("未登陸","Login");    
            exit();
        }
    
        echo "主頁面";    
    }
}
View Code

Login.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
<h1>登陸</h1>
<form action="__ACTION__" method="post">
<div>用戶名:<input type="text" name="uid" /></div>
<div>密碼:<input type="password" name="pwd" /></div>
<input type="submit" value="登陸" />

</form>
</body>
</html>
View Code

 

登陸方法2:寫一個父類來控制登陸,未登陸者直接跳到登陸頁面

父類:CheckController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
class CheckController extends Controller
{
    //這個類是做爲全部控制器的父類
    //控制登陸
    function __construct()
    {
        parent::__construct();
        if(!session('?uid'))
        {
            $this->error("未登陸",U("Login/Login"));
            exit();
        }    
    }    
}
View Code

LoginController.class.php:登陸只管登陸,不繼承新的父類,登錄後的其餘內容繼承CheckController.class.php

寫法不變,原來的function Main() 註釋掉

好比說:

更改MainController.class.php裏面的命名空間:

namespace Home\Controller;
use Home\Controller\CheckController;
class MainController extends CheckController

這是不論訪問MainController下的哪一個路徑都只能到登陸

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.防止用戶繞過登陸直接訪問操做方法作一個控制器的父類,在該父類裏面寫一個構造方法,構造方法裏面判斷session裏面有沒有值,若是沒值。。。若是有值。。。

相關文章
相關標籤/搜索