thinkphp3.2 微博系统项目

时间:2022-09-24 17:53:02

深入Thinkphp3.2框架遇到很多小问题 果然在学习语法知识的过程中 做项目是最好的检验成果

问题:

MVC:

M:Model模型、V:View视图、C:Controller控制器
View视图:存放模板文件.html,结合html+css+jquery等将完整的页面在Controller中通过$this->display()渲染出来
Controller控制器:控制器可以将View AJAX传递过来的数据 再次传递给Model层。通过D方法等
Model模型:接收Controller传递过来的数据 进行访问数据库 增删改查 并对接收的数据进行服务器端的自动验证和自动完成等操作

submit

 <input type="submit">  //点击按钮表单自动跳转
<input type="button"> //点击按钮 不会跳转 类似虚构的submit 只是不会提交

a标签

<a href="#"></a>    //#默认#Top 点击滚动条会自动返回顶部
<a href="javascript:void(0)"></a> //不会返回顶部

模板文件中使用循环、条件等语句

Controller层:

$list['data'] = 0;
$this->assign('list',$list);

View层:

<switch name="list">   //注意此处name值没有$
<case value="$list['data']">
<p>$list['data']<p>
</case>
<default />
<h1>$list['data']<h1>
</switch>

模板变量和系统变量常量

*a. //可以在Config中设置模块替换变量*
    'TMPL_PARSE_STRING' => array(
'__CSS__' => __ROOT__.'/Public/'.MODULE_NAME.'/css',
'__JS__' => __ROOT__.'/Public/'.MODULE_NAME.'/js',
'__IMG__' => __ROOT__.'/Public/'.MODULE_NAME.'/img',
),

View中即可直接使用__JS__、__IMG__、__CSS__

*b. 在View中也可以使用(模板)系统常量
网站使用Think.const 输出Think.server.script_name}和{Think.SERVER.script_name}等效

c. 在View中也可以使用(模板)系统变量

{$Think.server.script_name} // 输出$_SERVER变量
{$Think.session.session_id|md5} // 输出$_SESSION变量
{$Think.get.pageNumber} // 输出$_GET变量
{$Think.cookie.name} // 输出$_COOKIE变量

注意一:Action中使用的系统常量不可以直接在模板文件中使用
比如:

Action中:MODULE_NAME //输出模型名称
模板中:{:MODULE_NAME}

注意二:在JS文件中直接使用thinkphp的常量是不被解析替换的,所以要先在模板文件的元素中对thinkphp的常量进行定义
比如:
模板文件:

<script type="text/javascript"> 
var app="__APP__";
</script>
<script src="__PUBLIC__/Js/test.js"></script>

test.JS文件:

$(function(){
alert(__APP__);
});

CSS文件中和JS文件中引用IMAGE图片
Public目录中含有CSS、JS、IMG目录

如果在CSS文件中引用IMG图片:

background:url("../IMG/image.png");

如果在JS文件中引用IMG图片:
不可以直接使用../,只能通过调用模板替换变量等方式获取路径

$('#image').attr('src',__Public__/IMG/image.png);

Crop裁剪方法的BUG

```
$image = new Image();
$image->open($url);
*$image->crop($w,$h,$x,$y)->save($url);*
$image->thumb(200,200)->save($bigPath);

在FileModel的crop方法中我使用该代码,一直提示File控制器/crop方法404错误,后来才知道在tp框架中crop方法与thumb方法结合(其它方法未知),会导致这样的错误发生,因此解决方法,将crop方法与Open连缀调用,如下:

$image->open($url)->crop($w,$h,$x,$y)->save($url);

Volist/empty等标签name属性 (BUG)

$list = array("a"=>"hello","b"=>"world");
$this->assign('list',$list);
<volist name="list">
{$list['a']}
</volist>

注意:不论传递过来的是对象还是数组,在这些标签中name属性没有$

模板中使用U函数并且get传递参数
当我想点击某段文字,跳转到另外一个页面时候

<a href="{:U('Space/index/id/{$id}')}">点击跳转space页面</a>

此时不能在U函数里面get传递参数id,解决方法如下:

<a href="{:U('Space/index',array('id'=>$id))}">点击跳转space页面</a>