一、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. Windows下 Zmq v4.0.4的使用 (C++)

    最近在研究Zero的使用. 我在网上找了一下,发觉大部分博客都写得乱七八糟,又不写明什么版本,什么系统下的,我都不知道怎么样才能弄出个编译过的程序来,只好自己摸索了. 我是windows下 使用vs2 ...

  2. java . -- IDEA运行最简单的Java程序Hello World

    以下内容基于IDEA, JAVA EE已经安装好的情况. 如果没有安装好,网上的安装教程非常多的. 下面开始,18个图解 点击Finish 运行的代码如下: public class HelloWor ...

  3. Laravel5.1 模型 --多对多关系

    多对多关系也是很常用的一种关系,比如一篇文章可以有多个标签,一个标签下也可以有多篇文章,这就是一个典型的多对多的关系. 1 实现多对多关系 多对多关系我们需要三张表,一张是文章另一张是标签,第三章表是 ...

  4. Web API中的模型验证Model Validation

    数据注释 在ASP.NET Web API中,您可以使用System.ComponentModel.DataAnnotations命名空间中的属性为模型上的属性设置验证规则. using System ...

  5. $routeParams传递路由参数

    $routeParams传的值是一个对象数组. 案例: index.html <!DOCTYPE html> <html lang="zh-cn" data-ng ...

  6. sql优化(2)

    转自:https://www.cnblogs.com/Jacck/p/8030455.html 看到一篇非常全面的SQL优化文章,在开发的工作中往往不考虑性能上的缺失(在一开始的时候数据量不大也看不出 ...

  7. 《JAVA多线程编程核心技术》 笔记:第四章、Lock的使用

    一.使用ReentrantLock类1.1 ReentrantLock的使用:1.2 ReentrantLock的不足:1.3 正确使用Condition实现等待/通知1.4 使用多个Conditio ...

  8. 在Sql Server中使用证书加密数据

    IF NOT EXISTS () CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'QWE23987zxJKL569&agf1$94467GRkjg5k3 ...

  9. PHP错误处理,无法显示验证码。。无法显示首页等莫名其妙的500

    use the date.timezone setting or the date_default_timezone_set() 这是由于调用date时,若timezone设置不正确所产生的E_NOT ...

  10. jquery实现滚动到页面底部时无限加载内容的代码

    var p="{$other.p}"; if(p=="") p=1; var stop=true;//触发开关,防止多次调用事件 $(window).scrol ...