TP基础问题第二天

Posted xiantu

tags:

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

1、简述MVC的原理以及单入口模式的好处;

 技术分享图片

  单入口模式优缺点:优点:安全灵活

            缺点:不利于推广,执行速度慢


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

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

  PHP版本不能小于5.3.0       

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

    控制器名  驼峰式命名   控制器名首字母大写  例如:Goods

  控制器类名  控制器类型+Controller    例如:GoodsController

  控制器类文件名 控制器类名+.class.php   例如:GoodsController.class.php


4、生成新模块的两种方法是什么?

  1.在入口文件中define(‘BIND_MOUDLE‘,‘模块名‘)  

   2.复制Home模块

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


   1.实例化基础模型类

    $Model = New \\Think\\Model(‘OrderGoods‘,‘ecm_’,‘数据库连接‘);
 
     2.M方法实例化基础模型类

    $Model = M(‘OrderGoods‘,‘ecm_’,‘数据库连接‘);命名空间位置不需要引入类


          3.实例化自定义模型类

              $Order = new OrderGoodsModel();
             没有参数
             设置表前缀
             类里面定义属性protected $tablePrefix = ‘ecm_‘;
             设置三大自动的属性
             设置批量验证protected $pathValidate
             设置$error属性
             通过getError()获取错误信息
             参数需要在自定义模型类中赋值


         4.D方法实例化自定义模型类

       $Order = D(‘OrderGoods’);
          只有一个参数其他参数需要在自定义模型类中赋值
            $Model = New \\Think\\Model(‘OrderGoods‘,‘ecm_’,‘数据库连接‘);
            通过命名空间规则引入类
            $Order = new OrderGoodsModel();

    没有参数
            设置表前缀
            类里面定义属性protected $tablePrefix = ‘ecm_‘;
            设置三大自动的属性
            设置批量验证protected $pathValidate
            设置$error属性
            通过getError()获取错误信息
            参数需要在自定义模型类中赋值
            $Model = M(‘OrderGoods‘,‘ecm_’,‘数据库连接‘);
            命名空间位置不需要引入类
            $Order = D(‘OrderGoods’);
            只有一个参数
            其他参数需要在自定义模型类中赋值


          5.实例化空模型类
 
         $Model = New \\Think\\Model();
            直接使用SQL语句进行查询
            查询
                $Model->query(‘SQL‘);
                    返回数组或者数据集
            增删改
                $Model->execute(‘SQL‘);
                    返回影响行数

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

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


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

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

   显示查询更高效

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

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


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

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

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


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

  在控制器中动态改变模板主题$this->theme(‘blue‘)->display(‘add‘);

   采用模板主题后,需要在视图目录下面创建对应的主题目录,和不启用模板主题的情况相比,模板文件只是多了一层目录


12、请写出ajax修改列表页面中一条记录中的昵称字段内容,请写出html的代码以及服务端的代码,html端使用$.ajax方式;

      

  控制器操作:

public function ajaxEdit(){
$user=D(‘User‘);
if(IS_POST){
$tel=trim(I(‘post.tel‘,‘‘));
$id=trim(I(‘post.id‘,‘‘));
$data[‘id‘]=$id;
$where=array();
$where[‘id‘]=$id;
$ret=$user->where($where)->setField(‘tel‘,$tel);
if($ret===false){
$data[‘msg‘]="修改失败";
$data[‘status‘]=1;
}elseif($ret==0){
$data[‘msg‘]="未修改任何数据";
$data[‘status‘]=2;
}else{
$data[‘msg‘]="修改成功";
$data[‘status‘]=3;
}
$this->ajaxReturn($data);
}
}

视图层:HTML页
css样式:
<style type="text/css">
.inpHide{
border: 0px;
}
.inpShow{
border: 1px;
border: solid;
}
</style>

//input框,当双击后会弹出input框,修改完毕后input框消失,同时不可被选中
<td align="center">
  <input class="inpHide" id="testInput-<{$v[‘id‘]}>" onblur="reInput(‘testInput-<{$v[‘id‘]}>‘)" readonly ondblclick="changeInput(‘testInput-<{$v[‘id‘]}>‘)" value="<{$v[‘tel‘]}>">
</td>

//ajax操作
</script>
function changeInput(id){
$(‘#‘+id).prop(‘class‘,‘inpShow‘);
$(‘#‘+id).attr(‘readonly‘,null);
}

function reInput(id){
var tel=$(‘#‘+id).val();
var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(18[0-9]{1}))+\\d{8})$/;

if (!myreg.test(tel)) {
alert("请填写正确的手机号");
}else{

$.ajax({
type:"post",
url:"<{:U(‘Home/List/ajaxEdit‘,‘‘,‘‘)}>",
data:"tel="+tel+"&"+"id="+id,
dataType:"json",
success:function(data){
if(data.status==1){
alert(data.msg);
$(‘#‘+id).prop(‘class‘,‘inpHide‘);
$(‘#‘+id).attr(‘readonly‘,true);
}else if(data.status==2){
alert(data.msg);
$(‘#‘+id).prop(‘class‘,‘inpHide‘);
$(‘#‘+id).attr(‘readonly‘,true);
}else{
alert(data.msg);
$(‘#‘+id).prop(‘class‘,‘inpHide‘);
$(‘#‘+id).attr(‘readonly‘,true);
}
}

});
}
}
</script>


13、请写出用户列表的页面的控制器和模型类的全过程代码(含命名空间、类的定义等内容),含有分页并且分页要求在模型类中实现;
  

namespace Home\\Controller;
use Think\\Controller;
use Think\\Upload;
class UserController extends Controller{

public function addUsers(){

        if(IS_POST){

            $pic = $this->doUpload();
            $_POST[‘avatar‘] = $pic[‘avatar‘];

            $users = D(‘Users‘);
            $ret = $users->insUser();

            if($ret){
                $this->success(‘记录:‘.$ret.‘ 数据添加成功!‘);
            }else{
                $this->error(‘数据新增失败!原因:‘.$users->getError());
            }
        }else{
            $this->display();
        }

    }



namespace Home\\Model;

use Think\\Model;
use Think\\Page;

class UsersModel extends Model{

       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 \\Think\\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;
    }

}                

 

  






































































































































以上是关于TP基础问题第二天的主要内容,如果未能解决你的问题,请参考以下文章

TP手册学习第二天

js第基础第二天(代码调试)

python基础自学 第二天

Java基础学习第二天

Python基础总结之异常调试代码第十二天开始(新手可相互督促)

js基础第二天(if判断语句)