一、JS文件与Css文件存放位置

其实JS与Css文件放在任意位置都可以找到,只要路径正确就行。

在TP框架中我们访问的所有文件都要走入口文件index.php,相当于访问的是index.php页面。

在模板文件中用到JS与Css文件,不能直接从模板文件去找,而是从index.php开始找相应的JS与Css文件。这是因为我们访问的不是具体的页面,而是index.php入口文件,而用src浏览调用的文件路径是从 模板文件找的,这样我们访问操作的时候这个路径就找不到JS和Css文件了,解决方法:

  1. 用绝对路径
  2. 从index.php找到文件的路径
  3. 将JS与Css文件放在Public文件夹下,这样就可以用TP框架的内置import标签、load标签等来加载文件。

二、第三方类的存放位置

  1. 放在初始命名空间(tp/ThinkPHP/Library/)下的文件夹中,例如Think/下,但是其中已经有一个Page.class.php了,所以我们可以新建一个文件夹fenye,将我们的分页类文件放在里面,注意文件名与类名必须要一致。
  • 使用时分页类要加上命名空间:namespace Think/fenye;
  • 在控制器下调用此文件:use Think/fenye/Page;    或者
    $page = new \Think\fenye\Page($total,10);//此时从根命名空间开始写起。

2.  放在Home模块新建文件夹下,如:Home/fenye/。

  • 使用时分页类要加上命名空间:namespace Home/fenye;
  • 在控制器下调用此文件:use Home/fenye/Page;    或者
    $page = new \Think\fenye\Page($total,10);//此时从根命名空间开始写起。

以分页类Page.class.php为例,我们调用分页类将Info表分页显示

在TP框架模型中分页查询有一个limit连贯操作,我们可以用下面这种方法实现分页查询

$info= M('Info');

$info->limit(10,25)->select();其中的参数可以用分页类中的$page->limit来获得。这就需要修改一下分页类:

分页方法:

//分页查询
function FenYe()
{
$model = D("Info");
$total = $model->count();
$page = new \Home\fenye\Page($total,3); //若不用命名空间,在new的时候从根开始写起

//原生SQL语句 query方法用于查询,execute方法用于增删改
/*$sql = "select * from Info ".$page->limit;
$attr = $model->query($sql);*/
//var_dump($attr); //用limit方法连贯操作
//var_dump($page->limit);
$attr = $model->limit($page->limit)->select();
$xinxi = $page->fpage(); //分页信息

$this->assign("shuju",$attr);
$this->assign("xinxi",$xinxi);
$this->display();
}

模板页面:

<h1>Info表</h1>
<table width="100%" border="1" cellpadding="0" cellspacing="0">
<tr>
<td>代号</td>
<td>姓名</td>
<td>性别</td>
<td>民族</td>
<td>生日</td>
</tr>
<foreach name="shuju" item="v">
<tr>
<td><{$v.code}></td>
<td><{$v.name}></td>
<td><{$v.sex}></td>
<td><{$v.nation}></td>
<td><{$v.birthday}></td>
</tr>
</foreach>
</table>
<div><{$xinxi}></div><!--分页信息-->

请求FenYe方法:

三、会话控制session与cookie

session赋值

Session赋值比较简单,直接使用:

  1. session('name','value'); //设置session

session取值

Session取值使用:

  1. $value = session('name');
  2. // 获取所有的session 3.2.2版本新增
  3. $value = session();

session删除

删除某个session的值使用:

  1. session('name',null); // 删除name

要删除所有的session,可以使用:

  1. session(null); // 清空当前的session

session判断

要判断一个session值是否已经设置,可以使用

  1. // 判断名称为name的session值是否已经设置
  2. session('?name');

Cookie设置

  1. cookie('name','value'); //设置cookie
  2. cookie('name','value',3600); // 指定cookie保存时间

Cookie获取

获取cookie很简单,无论是怎么设置的cookie,只需要使用:

  1. $value = cookie('name');

Cookie删除

删除某个cookie的值,使用:

  1. cookie('name',null);

要删除所有的Cookie值,可以使用:

  1. cookie(null); // 清空当前设定前缀的所有cookie值
  2. cookie(null,'think_'); // 清空指定前缀的所有cookie值

四、控制登录

在做项目时,因为每个页面都要用到登录控制,只要不登录就无法访问页面。

防止用户绕过登录直接访问操作方法
做一个控制器的父类,在父类里面做一个构造方法,在里面判断session里面有没有值,如果没有值就跳向登录

检查是否登录的父类CheckController.class,php:

<?php
namespace Home\Controller;
use Think\Controller; //检查是否登录
class CheckController extends Controller
{
function __construct()
{
parent::__construct(); //如果不调用父类的构造函数,就将父类构造函数重写,会覆盖父类的构造函数,会出错
if(!session("?uid")) //如果session没有存uid值
{
$this->error("未登录",U("Login/Login")); //返回登录页面
exit();
}
}
}

登录方法Login:因为Login也没有存session,所以不能继承CheckController,否则会陷入死循环。

<?php
namespace Home\Controller;
use Think\Controller;
use Home\RiZhi\RiZhi;
class LoginController extends Controller
{
function Login()
{
if(empty($_POST))
{
$this->display();
}
else
{if($_POST["uid"]!="" && $_POST["pwd"]!="")
{
$model = D("Users");
$uid = $_POST["uid"];
$pwd = $_POST["pwd"];
$attr = $model->field("Pwd")->find($uid);
//var_dump($attr);
if($pwd==$attr["pwd"])
{
session("uid",$uid); // 跳转页面之前将$uid存入session
$this->success("登录成功!","Main");
}
else
{
$this->error("登录失败!");
}
}
else
{
$this->error("用户名或者密码不能为空!");
}

其他控制器都可以继承CheckController父类,例如Main控制器:

<?php
namespace Home\Controller;
use Home\Controller\CheckController;
class MainController extends CheckController //继承父类
{
function Index()
{
echo "welcome";
}
}

这样在访问Index的时候会提示:

ThinkPHP框架基础知识三的更多相关文章

  1. ThinkPHP框架基础知识一

    ThinkPHP是一个快速.兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来 ...

  2. ThinkPHP框架基础知识二

    一.空操作和空控制器处理 空操作:没有指定的操作方法:空控制器:没有指定控制器,例如: http://网址/index.php/Home/Main/login  正常 http://网址/index. ...

  3. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  4. PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类

    一.程序设计 1.设计功能系统——数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理——原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的 ...

  5. DDD框架基础知识

    DDD框架基础知识 参考: https://www.cnblogs.com/zhili/p/OnlineStorewithDDD.html(领域驱动设计,分层架构) https://www.cnblo ...

  6. java 基础知识三 java变量

    java  基础知识 三 变量 1.作用域 {} 包围起来的代码 称之为代码块,在块中声明的变量只能在块中使用 2.常量 就是固定不变的量,一旦被定义,它的值就不能再被改变. 3.变量 变量必须在程序 ...

  7. Hadoop框架基础(三)

    ** Hadoop框架基础(三) 上一节我们使用eclipse运行展示了hdfs系统中的某个文件数据,这一节我们简析一下离线计算框架MapReduce,以及通过eclipse来编写关于MapReduc ...

  8. HBase框架基础(三)

    * HBase框架基础(三) 本节我们继续讨论HBase的一些开发常识,以及HBase与其他框架协调使用的方式.在开始之前,为了框架之间更好的适配,以及复习之前HBase的配置操作,请使用cdh版本的 ...

  9. Python基础知识(三)

    Python基础知识(三) 一丶整型 #二进制转成十进制的方法 # 128 64 32 16 8 4 2 1 1 1 1 1 1 1 例如数字5 : 101 #十进制转成二进制的方法 递归除取余数,从 ...

随机推荐

  1. plsql 环境搭建(sqlplus环境设置)

    1. 初始化参数脚本 修改glogin.sql 脚本, 此脚本为登录 sql/plus时会读取的脚本, 可以在这个脚本上设置一些参数, 比如 set serveroutput on 等等, 那么在登录 ...

  2. windows静态库的使用

    最近在学Zeromq(像框架一样的一个socket library)的使用,里面有关于库的使用问题.今天就来复习下静态库的使用: 使用静态库是重用代码的一种绝佳方式.您不必在自己创建的每个程序中重新实 ...

  3. C++设计模式之建造者模式(二)

    3.省略指挥者Director的建造者模式 指挥者类Director在建造者模式中扮演很关键的数据.简单的Director类用于指导详细建造者怎样构建产品,它按一定次序调用Builder的buildP ...

  4. jquery添加!important样式

    $("span.colorFlag").parents("th").css("cssText","background-color ...

  5. 重写ListView解决ListView内部ViewPaper滑动事件冲突问题

    非常easy 重写ListView 其它类似问题解决ScrollView嵌套ViewPager出现的滑动冲突问题 http://blog.csdn.net/zhangyiacm/article/det ...

  6. java项目学习

    GitHub地址:https://github.com/zhanglei-workspace/shopping-management-system

  7. 使用HTML5构建iOS原生APP(2)

    本文转载至 http://ju.outofmemory.cn/entry/18807 有时候我们在内嵌的webview中希望点击一个链接之后,触发iOS原生事件,而不是webview内页面跳转(因为w ...

  8. ICE新手入门版

    1.ICE是什么?  网络通信引擎ICE(Internet Communications Engine)是Zero C公司的分布式系统开发专家实现的一种新的高性能的面向对象中间件平台.从根本上说, I ...

  9. [Go语言]从Docker源码学习Go——指针和Structs

    这两天在看reflect这个包在Docker中的使用时,遇到了各种问题,最后虽然知道怎么用了. 但是对于这块的原理还不是太懂,于是把"THE WAY TO GO"中关键的几章看了下 ...

  10. cannot be cast to javax.servletFilter

    java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast ...