一、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. tomcat修改默认端口

    1.webserver: tomcat2.version:   Apache Tomcat/7.0.293.operation: 修改默认端口 3.1 修改tomcat目录下的/conf/server ...

  2. 第一百四十七节,封装库--JavaScript,滑动导航

    JavaScript,封装库--滑动导航 效果图 html <!--滑动导航--> <div id="nav"> <ul class="ab ...

  3. android去权限反编译,签名,zipalign优化

    反编译:上工具ApkTool 下载自行搜索google  apktool github cd apktool目录 java -jar apktool_2.0.1.jar d xx.apk 生成xx目录 ...

  4. scrapy 相关

    Spider类的一些自定制 # Spider类 自定义 起始解析器 def start_requests(self): for url in self.start_urls: yield Reques ...

  5. style标签进行实时编辑及修改css(转)

    心得: style也是一个标签,那么也可以使用css对其进行编辑 html5新属性 contenteditable,可以让标签元素处于可编辑状态,对于style标签也适用 为了不影响head标签里的s ...

  6. win7下安装memcached

    memcached server端服务在win7下的安装.启动图解 1.首先下载解压memcached-1.2.6-win32-bin.zip到某一盘下,如下图 2.通过管理员方式运行cmd.exe. ...

  7. 基础知识《十三》深入浅出Java回调机制

    本文转载自http://hellosure.iteye.com/blog/1130176 在网上看到了一个比喻,觉得很形象,这里借用一下: 你有一个复杂的问题解决不了,打电话给你的同学,你的同学说可以 ...

  8. 160628、利用Oracle rownum让表排序字段值连续

    利用Oracle rownum让表排序字段值连续 1.需求说明 表(eval_index)中有字段如下: 表字段 描述 说明 ID 主键 GROUP_ID 分组编号 SORT_NUM 排序序号 按照分 ...

  9. Less-mixin判断(守卫)一

    mixin卫士--判断 类似于JavaScript的if/else example: .test(@a) when (@a>10){//当大于10 font-size:18px; } .test ...

  10. 动态代理:JDK原生动态代理(Java Proxy)和CGLIB动态代理原理+附静态态代理

    本文只是对原文的梳理总结,以及自行理解.自己总结的比较简单,而且不深入,不如直接看原文.不过自己梳理一遍更有助于理解. 详细可参考原文:http://www.cnblogs.com/Carpenter ...