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