一、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. 小程序组件与api

    通过组合基础组件进行快速开发. 组件是视图层的基本组成单元. 所有组件都有的属性: 属性名 描述 注解 id 组件的唯一标示 保持整个页面唯一 class 组件的样式类 在对应的 WXSS 中定义的样 ...

  2. SecureCRT超级终端使用说明

    SecureCRT超级终端使用说明 一.连接POS机 1.运行SecureCRT,选择‘文件’菜单,在下拉菜单中选择‘快速连接’菜单: 2.在弹出的对话框中按如下图选择参数: 3.POS端开机,且数据 ...

  3. 在Intellij IDEA下用X-debug调试PHP

    用Intellij IDEA使用X-debug来调试PHP,主要需要配置的部分有三个地方,分别为php.ini的配置,IDEA的配置和浏览器的配置,主要如下: php.ini(wamp修改的是phpF ...

  4. CSS样式设置

    转载来自:http://www.imooc.com/article/2067水平居中设置-行内元素 水平居中 如果被设置元素为文本.图片等行内元素时,水平居中是通过给父元素设置 text-align: ...

  5. Toxophily-数论以及二分三分

    G - Toxophily Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submi ...

  6. python中的 try...except...finally 的用法

    python中的 try...except...finally 的用法 author:headsen chen date:2018-04-09  16:22:11 try, except, final ...

  7. H5页面在微信中禁止下拉露出网页

    H5页面在微信中禁止默认事件的执行,js添加代码 $(function () { /************微信h5页面禁止下拉露出网页来**************/ $('body').on('t ...

  8. 《JAVA多线程编程核心技术》 笔记:第三章:线程间通信

    一. 等待/通知机制:wait()和notify()1.1.使用的原因:1.2 具体实现:wait()和notify()1.2.1 方法wait():1.2.2 方法notify():1.2.3 wa ...

  9. protoc-gen-go: error:bad Go source code was generated: 163:6: illegal UTF-8 encoding (and 2915 more errors)

    protoc-gen-go: error:bad Go source code was generated: 163:6: illegal UTF-8 encoding (and 2915 more ...

  10. reg_action

    function check_email($win) { $win = trim($win); $reg = '/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* ...