一、关于JS和CSS路径问题

1.找路径是从入口文件index.php来找的,而不是从文件本身所在位置来找,

 因为我们访问时是访问的入口文件

2.在存放JS和CSS的时候可以放到public文件夹下

3.可以使用标签引入:

3.1 import标签

传统方式的导入外部JS和CSS文件的方法是直接在模板文件使用:

系统提供了专门的标签来简化上面的导入:

3.2 load标签

load标签,通过文件方式导入当前项目的公共JS或者CSS

3.3js和css标签

系统还提供了两个标签别名js和css 用法和load一致,例如:

二、第三方类入

有两块地方可以放第三方类
(1)模块下面
(2)Library下面新建文件夹或者旧的文件夹里面
放进去之后,需要添加命名空间,命名空间从根命名空间写起
注意类文件的命名规则和类名的规则

以分页为例:

原来在分页时使用limit标签:

现在也可以引入分页类:

Library下面新建文件夹或者旧的文件夹里面

做法1:在ThinkPHP\Library\Think文件夹下新建fenye文件夹并将之前的page.class.php复制到fenye里

page.class.php的命名空间:namespace Think\fenye;(其余不发生变化)

控制器里面写入:use Think\fenye\Page;

ZhuCeController.class.php

 namespace Home\Controller;
use Think\Controller;
use Think\fenye\Page;
class ZhuCeController extends Controller
{ //第三方类引入
function FenYe()
{ $model=M("nation");
$total=$model->count();
$page=new Page($total,1); $sql="select * from nation ".$page->limit;
$attr=$model->query($sql); $xinxi=$page->fpage();
//var_dump($attr);
$this->assign("xinxi",$xinxi);
$this->assign("nation",$attr); $this->display();
}
}

View/ZhuCe/FenYe.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>
<table border="1" width="40%">
<tr>
<td>代号</td>
<td>名称</td>
</tr>
<foreach name="nation" item="v">
<tr>
<td><{$v.code}></td>
<td><{$v.name}></td>
</tr>
</foreach>
</table>
<div><{$xinxi}></div>
</body>
</html>

运行结果:

做法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返回的动态验证

 //ajax验证用户名非空
function Yhm()
{
$model=D("Text");
$rules=array(
array('uid','require','用户名不能为空'),
);
if(!$model->validate($rules)->create())
{
$fh=$model->getError();
$this->ajaxReturn($fh,"eval");
}
else
{
$fh="OK";
$this->ajaxReturn($fh,"eval"); } }

2)Zhuce.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>
<script src="../../../../../jquery-1.11.2.min.js">
</script>
</head> <body>
<form action="__ACTION__" method="post">
<div>用户名:<input type="text" id="uid" name="uid" /><span id="ts"></span></div><br />
<div>密&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="text" name="pwd" /></div>
<div>确认密码:<input type="text" name="pwd1" /></div><br />
<div>年龄:<input type="text" name="age" /></div><br />
<div>邮箱:<input type="text" name="email" /></div><br />
<div>姓名:<input type="text" name="name" /></div><br />
<!--显示错误信息 -->
<div style=" width:200px; height:30px; border:#F00 solid 2px; line-height:30px; vertical-align:middle; text-align:center;"><{$error}></div><br />
<div><input type="submit" value="注册" /></div>
</form>
</body>
<script type="text/javascript">
$(document).ready(function(e) {
$("#uid").blur(function(){
var uid=$(this).val();
$.ajax({
url:"__CONTROLLER__/Yhm",
data:{uid:uid},//这里要传的参数名必须和表单里的name一致
type:"POST",
dataType:"TEXT",
success: function(data){
$("#ts").html(data);
} }); })
}); </script>
</html>

显示效果:

            

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 "主页面";
}
}

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>

登录方法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();
}
}
}

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里面有没有值,如果没值。。。如果有值。。。

Thinkphp 零散知识点(caa/js路径,引入第三方类,ajax返回,session/cookie)的更多相关文章

  1. laravel 5.2 引入第三方类

    composer 安装类依赖包 很受用 也很方便 但是要是一个有一定规模的公司技术团队 因为要照顾大局 还是引入类好些 下面是引入类的方法 1.首先在app目录下创建一个新的文件夹,命名Tools(可 ...

  2. 在 Ubuntu 系统安装 Redi laravel 5.2 引入第三方类

    composer 安装类依赖包 很受用 也很方便 但是要是一个有一定规模的公司技术团队 因为要照顾大局 还是引入类好些 下面是引入类的方法 1.首先在app目录下创建一个新的文件夹,命名Tools(可 ...

  3. ajax的使用:(ajaxReturn[ajax的返回方法]),(eval返回字符串);分页;第三方类(page.class.php)如何载入;自动加载函数库(functions);session如何防止跳过登录访问(构造函数说明)

    一.ajax例子:ajaxReturn("ok","eval")->thinkphp中ajax的返回值的方法,返回参数为ok,返回类型为eval(字符串) ...

  4. vue项目引入第三方js插件,单个js文件引入成功,使用该插件方法时报错(问题已解决)

    1.引入第三方js文件,npm安装不了 2.控制台显示引入成功 3.在methods下使用 图片看不清请看下面代码 updateTime() { setInterval(()=>{ var cd ...

  5. 【Thinkphp】引入第三方类库常见问题

    TP3.2在添加第三方sdk的时候,文件放在ThinkPHP/Library/Org文件夹下可独立创建文件夹(官方文档有其他思路)需对文件做以下修改. 1.第一应该修改文件的名称(下载的sdk一般是 ...

  6. ThinkPHP讲解(十)——第三方类的引入:以分页为主

    第三方类的引入,以分页类为例: 1.在控制器里新建一个分页的操作方法FenYe() 注意:第三方类Page.class.php放在Think或Home文件夹下,并新近一个文件夹,放在里面,并在其类里加 ...

  7. TP3.2之引入第三方类库文件和普通.php文件

    1.引入第三方类库 .class.php文件 1.1 类库有写namespace命名空间 namespace Org\Util; class Auth { } 保存到ThinkPHP/Library/ ...

  8. vue-cli项目中引入第三方插件

    前言 最近有小伙伴问道如何在vue-cli项目中引入第三方插件或者库,例如如果想在项目中使用jQuery中的Ajax请求数据呢?或者我想使用Bootstrap框架呢?等等这些问题,本篇博客将带你学习如 ...

  9. ThinkPHP视图css和js加上版本号防止缓存

    前台模块中,我的所有控制器都继承BaseController,虽然ThinkPHP中我们提供了两个配置项 'TMPL_CACHE_ON' => false,// 禁止模板编译缓存 'HTML_C ...

随机推荐

  1. 【扩展欧几里得】BAPC2014 I Interesting Integers (Codeforces GYM 100526)

    题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...

  2. 阿里云ECS试用

    公司在推一个大项目,感觉阿里云挺好用的,自己搞了台小机器平时可以跑着玩,而且可以做个跳板机,平时学校里的收费网直接用跳板机就可以访问了,直接写个脚本在自己机器上跑一下: #!/usr/bin/expe ...

  3. C语言的强制类型转换

    1.什么是强制类型转换:遇到一些类型不同的一些数据之间的表达运算 ,需要将较高的数据类型转换成较低类型时. 2.强制类型的形式: (强制转换的类型)(表达式): 2.强制类型的使用: float a, ...

  4. 数据结构——UVA 1600 机器人巡逻

    描述 A robot has to patrol around a rectangular area which is in a form of mxn grid (m rows and n colu ...

  5. 代码对齐 分类: C#小技巧 2014-04-17 14:45 166人阅读 评论(0) 收藏

    开发项目时,为了是代码层次清晰.美观,常常需要调整多行,使之对齐.在网上也看到一些方法,感觉不好用,偶尔发现一个小技巧. (1)多行代码同时右移 同时选中几行,按"Tab"键,就会 ...

  6. Android的Touch系统简介(一)

    一.Android touch事件的相关概念 用户的Touch事件被包装成MotionEvent 用户当前的touch事件主要类型有: ACTION_DOWN: 表示用户开始触摸. ACTION_MO ...

  7. 如何设置jsp默认的编码为utf-8

    方法一: 文件里写: <%@ page contentType="text/html; charset=UTF-8"  %> 方法二: 选择window –> P ...

  8. [转] socket异步编程--libevent的使用

    这篇文章介绍下libevent在socket异步编程中的应用.在一些对性能要求较高的网络应用程序中,为了防止程序阻塞在socket I/O操作上造成程序性能的下降,需要使用异步编程,即程序准备好读写的 ...

  9. MVC模式实现登录以及增删改查之登录(一)

    我在这里用的不是maven项目,用的一般的web项目,所以需要用到的架包需要自己去下载添加,在项目中,一定注意环境的配置,我用的是jre1.7 1  新建项目 2  建立好MVC的管理包,导入对应的架 ...

  10. NSPredicate查询日期的问题

    查询日期的时候日期可以根据参数传进去,但不能在字符串中传参后在作为查询条件 简单比较以下两段代码 NSDate* date1=[NSDate date]; NSDate* date2=date1; r ...