ThinkPHP3.2基础知识

Posted sgwr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP3.2基础知识相关的知识,希望对你有一定的参考价值。

1、如何开启调试模式,开启调试模式有什么用处?

// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define(‘APP_DEBUG‘,True);

  开启调试模式的用处:方便及时发现隐患问题和分析、解决问题。

2.如何定义空空控制器和空操作?

  空操作:

技术分享图片
技术分享图片
<?php
namespace Home\\Controller;
use Think\\Controller;
class CityController extends Controller{    
    public function _empty($name){       
//把所有城市的操作解析到city方法 $this->city($name); }
//注意 city方法 本身是 protected 方法 protected function city($name){
//和$name这个城市相关的处理 echo ‘当前城市‘ . $name; }
技术分享图片
技术分享图片

  空控制器:

技术分享图片
技术分享图片
<?php
namespace Home\\Controller;
use Think\\Controller;
class EmptyController extends Controller{    
     public function index(){       
        //根据当前控制器名来判断要执行那个城市的操作       
         $cityName = CONTROLLER_NAME;        
         $this->city($cityName);    }   
        //注意 city方法 本身是 protected 方法    
     protected function city($name){       
        //和$name这个城市相关的处理         
         echo ‘当前城市‘ . $name;    
    }
}
技术分享图片
技术分享图片

3、控制器的参数的前置和后置操作如何定义?

  前置操作:_before_操作名           后置操作:_after_操作名

  例子:

技术分享图片
技术分享图片
<?php
namespace Home\\Controller;
use Think\\Controller;
class IndexController extends Controller{    
  //前置操作方法    
    public function _before_index(){        
       echo ‘before<br/>‘;    
    }    
    public function index(){        
       echo ‘index<br/>‘;    
    }   
   //后置操作方法    
  public function _after_index(){        
      echo ‘after<br/>‘;    
    }
}
技术分享图片
技术分享图片

4.请写出自动验证的规则,要求在修改和新增时都校验密码字段(pwd)的规则并且不管是否为空都要进行校验,规则为:密码要含有大小写字母和数字并且长度要至少为6位;

protected $_validate=array(
      array(‘password‘,‘require‘,‘密码不能为空!‘),
      array(‘password‘,‘/^[a-zA-Z0-9]{6}$/‘,‘密码不能小于六位!‘,0,‘regex‘,3),   
)

5.3种查询方式和8种查询方法都是什么?

  3种查询方式:字符串、数组、对象

  8种查询方法:表达式查询、快捷查询、区间查询、组合查询、统计查询、子查询、SQL查询、动态查询

6.请写出一个组合查询中复合查询的示例代码;

$where[‘name‘]  = array(‘like‘, ‘%thinkphp%‘);
$where[‘title‘]  = array(‘like‘,‘%thinkphp%‘);
$where[‘_logic‘] = ‘or‘;
$map[‘_complex‘] = $where;
$map[‘id‘]  = array(‘gt‘,1);

7、请写出连贯操作中可以重复调用的操作;

  where       用于查询或者更新条件的定义      字符串、数组和对象

  join           用于对查询的join支持                   字符串和数组

    union        用于对查询的union支持               字符串、数组和对象

    scope       用于命名范围                                字符串、数组

       bind         用于数据绑定操作                         数组或多个参数

8.自动加载的原理;

  通过类的命名空间自动定位到类库文件

9.I方法常用的两种过滤规则并说明其含义;

  1.htmlspecialchars:把一些预定义的字符转换为 HTML 实体.

  使用语法:string:必需。规定要转换的字符串

          quotestyle:可选。规定如何编码单引号和双引号。

       character-set:可选,字符串值,规定要使用的字符集。

htmlspecialchars(string,quotestyle,character-set)

 技术分享图片

  例子:

技术分享图片

    技术分享图片

   技术分享图片

  2.strip_tags:剥去 HTML、XML 以及 PHP 的标签。

     语法:strip_tags(string,allow)

        string:必需。规定要检查的字符串。

        allow:可选。规定允许的标签。这些标签不会被删除。

     例子:

<?php
echo strip_tags("Hello <b><i>world!</i></b>");
?>

  输出:Hello world!

  模型中写入的过滤方法:

  1. $this->data($data)->filter(‘strip_tags‘)->add();

10.模版赋值的两种参数规则;

  字符串:$this-assign(‘show‘,$show);

  数组:$this-assign($arr);

11.如何修改模版标签的定界符?

‘TMPL_L_DELIM‘    =>    ‘<{‘,
‘TMPL_R_DELIM‘    =>    ‘>}‘

12.模版变量在模版中输出,字符串、数组、对象都如何输出;

  字符串:<{$name}>

  数组:<{$data[‘name‘]}>

  对象:<{$data:name}>  或  <{$data->name}>

13.如何开启批量验证;

  protected  $patchValidate = true;

14.控制器中如何获取模型类错误信息?

   D(‘表名‘)->getError();

15.简述MVC流程,单入口模式的好处:

技术分享图片

 

   单入口模式优点:安全,灵活。可集中进行安全处理,访问统计等统一控制。

16.入口文件中为什么要判断PHP版本,TP要求PHP的版本是什么?

  因为ThinkPHP3.2引入了命名空间的概念,PHP5.3以上(包含PHP5.3)的版本才支持

  PHP版本不能小于5.3.0        

17.控制器的定义规则是什么(含控制器名、控制器类名和控制器类文件名),并举出一个例子。

  控制器名: 首字母大写。例:Index

  控制器类名:控制器名+Controller。例:IndexController

  控制器类文件名:控制器类名+.class.php。例:IndexController.class.php

18 自定义模型类的命名规则,含模型名、模型类名和模型类文件名;

  模型名:根据表名,去掉表前缀后首字母大写,如果有下划线,去掉下划线后首字母大写。(大驼峰法) 例:User

  模型类名:模型名+Model。例:UserModel

  模型类文件名:模型类名+.class.php   例:UserModel.class.php

19.生成新模块的两种方法是什么?

  1.define(‘BIND_MODULE‘,‘Admin‘);

  2.复制Home模块

20.模型类的五种实例化方式是什么,每种举出一个例子;

  1.实例化空模型类:$model=new Model();

  2.实例化基础模型类:$model=new  Model([‘模型名‘],[‘数据表前缀‘],[‘数据库连接信息‘]);

  3.M方法实例化基础模型类:$model=M([‘模型名‘],[‘数据表前缀‘],[‘数据库连接信息‘]);

  4.实例化自定义基础模型类:$model=new 模型类操作名([‘模型名‘],[‘数据表前缀‘],[‘数据库连接信息‘]);

  5.D方法实例化自定义基础模型类:$model=D([‘模型名‘],[‘数据表前缀‘],[‘数据库连接信息‘]);

21.I方法设置默认值的等价的完整的原生方法是什么?

  例:$id=isset($_GET[‘id‘])?$_GET[‘id‘]:‘‘;

22.隐式查询与显示查询的区别,哪种方式更高效,请举例说明两种查询方式的书写规则;

  区别:显示查询可以提高查询速度,效率高               

  显示查询更高效

  显式查询:field   例如:$this->field(‘name‘,‘pwd‘)->select();

  隐式查询:例如:$this->select();

23.指定字段更新和插入的连贯操作是什么,举例描述如何进行指定字段插入和修改;

  更新:setField     例:$User-> where(‘id=5‘)->setField(‘name‘,‘ThinkPHP‘);

  插入:add()   $User->data($data)->add();

24.模版主题如何调用,使用模版主题后,视图层目录需要如何调整?

  模板主题调用:$this->theme(‘blue‘)->display();

  视图层目录:--view

          --blue  //模板主题

            --Index  //控制器名

              --color.html       //模板主题页面

25.入口文件中定义的内容

// 检测PHP环境
if(version_compare(PHP_VERSION,‘5.3.0‘,‘<‘)) die(‘require PHP > 5.3.0 !‘);
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define(‘APP_DEBUG‘,True);
// 定义应用目录
define(‘APP_PATH‘,‘./Application/‘);
// 引入ThinkPHP入口文件
require ‘./ThinkPHP/ThinkPHP.php‘;
//定义根目录的绝对地址
define(‘ROOT‘,str_replace("\\\\","/",dirname(__FILE__)));

26.U方法的参数规则

(‘地址表达式‘,[‘参数‘],[‘伪静态后缀‘],[‘显示域名‘])

地址表达式:[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...

27.如何判断请求类型,常用的请求方式有哪两种,I方法的参数规则?

判断请求类型:REQUEST_METHOD
常见的请求方式:get post
I方法的参数规则:I(‘变量类型.变量名‘,[‘默认值‘],[‘过滤方法‘],[‘额外数据源‘])

  注意:变量类型不区分大小写。
  变量名则严格区分大小写。
  默认值和过滤方法均属于可选参数。

技术分享图片

28.成功和失败,重定向跳转的方法以及参数规则。

success(‘成功条件‘,‘跳转地址‘,‘跳转时间’);

注意:方法的默认跳转地址是$_SERVER["HTTP_REFERER"]

error(‘错误提示‘,‘跳转地址‘,‘跳转时间’);

注意:默认的等待时间success方法是1秒,error方法是3秒

重定向到New模块的Category操作
重定向:$this->redirect(‘New/category‘, array(‘cate_id‘ => 2), 5, ‘页面跳转中...‘);

重定向到指定的URL地址

redirect(‘/New/category/cate_id/2‘, 5, ‘页面跳转中...‘)

29.URL的四种模式,简述每种形式的规则

普通模式:http://localhost/?模块=home&控制器=user&操作=login&var=value
pathinfo模式:http://localhost/index.php/home/user/login/var/value/
REWRITE模式:http://localhost/home/user/login/var/value
兼容模式:http://localhost/?s=/home/user/login/var/value

30.TP常用的配置文件有哪几个?配置文件的加载顺序依次是什么?

配置文件:1.惯例配置:框架内置配置文件(位于ThinkPHP/Conf/convention.php
     2.应用配置:应用配置文件也就是调用所有模块之前都会首先加载的公共配置文件(默认位于Application/Common/Conf/config.php
     3.模块配置:每个模块会自动加载自己的配置文件(位于Application/当前模块名/Conf/config.php
加载顺序:惯例配置--->应用配置--->模块配置

31.模版渲染display方法的参数规则

display(‘[模板文件]‘[,‘字符编码‘][,‘输出类型‘]);
模板文件的写法支持下面几种:

技术分享图片

32.常用的模版内置标签以及在模版中使用的示例,举出5个!

1.<foreach name=‘‘ item=‘‘ key=‘‘></foreach>
2.<volist name=‘‘ id=‘‘></volist>
3.<for start="开始值" end="结束值" comparison="" step="步进值" name="循环变量名" ></for>
4.比较标签:
<eq name="name" value="value">value</eq> 技术分享图片
5.范围判断标签:<in name="id" value="1,2,3">id在范围内</in>
6.<if condition="$value eq $k">value</if>
7.
<empty name="name">name为空值</empty>
8.
<import file="Js.Util.Array" basepath="其他目录" />//起始路径是Public目录

33.模版包含的参数规则以及举例说明

include标签用法:<include file=‘模版表达式或者模版文件1,模版表达式或者模版文件2,...‘ />

  模版表达式的定义规则为:模块@主题/控制器/操作



          1.使用模板表达式:例如: 技术分享图片

          2.使用模板文件:可以直接包含一个模板文件名(包含完整路径),例如:
<include file="./Application/Home/View/default/Public/header.html" /
          
          3.传入参数:<
include file="Public/header" title="ThinkPHP框架" keywords="开源WEB开发框架" />
                  模板中使用:技术分享图片

34.三大自动的参数规则

字段映射:protected $_map=array(
        ‘表单中的名‘=>‘字段名’//把表单中的name名映射到数据表中的字段名
      );
自动验证:protected $_validate=array(
        array(‘字段名‘,‘验证规则‘,‘提示信息‘,‘验证条件‘,‘附加规则‘,‘验证时间‘),
      );
自动完成:protected $_auto=array(
        array(‘字段名‘,‘验证规则‘,‘验证时间‘,‘附加规则‘),
      );

35.举例描述上传类在控制器中调用的全过程代码(要求包含控制器的代码以及模型类新增数据到数据库的全部代码),并说明表单中需要注意的内容!

模型类:
public function doUpload(){
if(empty($config)){
$config = array(
‘maxSize‘ => 3145728,
‘rootPath‘ => ‘./Public/‘,//保存根路径,一定要重新设置,否则无法找到根路径
‘savePath‘ => ‘Uploads/‘,
‘saveName‘ => array(‘uniqid‘,‘‘),
‘exts‘ => array(‘jpg‘, ‘gif‘, ‘png‘, ‘jpeg‘),
‘autoSub‘ => true,
‘subName‘ => array(‘date‘,‘Ymd‘),
);
}
$upload=new Upload($config);
$info=$upload->upload();
if(!$info){
$this->error=$upload->getError();
return false;
}
foreach($info as $key=>$v){
$pic[$key]=$v[‘savepath‘].$v[‘savename‘];
}
return $pic;
}
控制器:
$pic=$this->work->doUpload();
$_POST[‘图片字段‘]=$pic[‘图片字段‘];//添加到数据库中
表单中需要注意的内容:
1.<form action="" method="post" enctype="multipart/form-data" ></form>
2.<input type="file" name="" value="">
3.注意rootPath路径。
注意:保存根路径,一定要重新设置,否则无法找到根路径














































































以上是关于ThinkPHP3.2基础知识的主要内容,如果未能解决你的问题,请参考以下文章

ThinkPHP3.2基础知识

ThinkPHP3.2基础知识

代码审计 | ThinkPHP3.2.x框架SQL注⼊

ThinkPHP3.2基础教程(33)--路由功能

ThinkPHP3.2基础教程(20)--模型-CURD操作-数据写入

ThinkPHP3.2基础教程--模型-字段定义