thinkphp 项目分组 -开发随笔1
php中变量的声明, 和变量的初始化 是结合在一起的, 要声明变量, 就是通过初始化变量来实现的.
感觉页面版式的布局, 还是:
先大致规划出布局, 如两栏 三栏, 一览的左右上下结合, 搭配.
然后,再考虑放值内容. 在设计版式的时候, 不必考虑内容.
ps只是做一些图片大小尺寸等方面的剪切, 一般不自己做图
网站的颜色开始不用过于管, 随意就行, 后来再协商改.
是上标, 是下标.
图片的title和alt属性的区别?
title是标题, 鼠标指向时会出现 "工具栏提示"的就是title.
alt是指当图片因为某些原因不能显示时, 出现在 图片叉叉上的文字.
要在 v3.1.3中实现分组, 只需在配置文件中加上
'APP_GROUP_LIST' => 'Index,Admin',
'DEFAULT_GROUP' => 'Index',
thinkphp 区分前台和后台的公共文件夹Public?
前台的Public文件夹, 就放在根目录下的Public中.
后台的Public文件夹, 为了区分, 就放在Tpl/Admin/Public中,
但是要在后台的配置文件 Conf/Admin/config.php中配置:
return array(
'TMPL_PARSE_STRING' => array(
'__PUBLIC__' => __ROOT__.'/'. APP_NAME.'/Tpl/Admin/Public',
)
);
在3.1.3之前的版本, App(分组的)和ThinkPHP的目录基本上是一样的:
都包括: Common, Conf, Lang, Lib, Runtime 和Tpl.
插入数据库中的数据, 可以用:
insert into user values(....);
或者用:
insert into user set username='admin', passwd=md5('admin'), logintime=unix_timestamp(now())...;
在创建表的时候, 最后的存储引擎和字符集可以用等号也可以不用等号:
create table user(....)engine=myisam default charset=utf8
或者:
cretae table user(...) engine myisam default charset utf8
thinkphp中的地址, 统一的用{:U('Admin/login/verify')}方法来生成...
验证码的引用:
import('ORG/Util/Image');
Image::buildImageVerify(4, 5, 'png') 5: 表示字母和数字的随机组合.
用foreach ..>来循环输出一维数组的时候, item本身就是 数组元素的value了, 所以不能再对item进行取元素操作了,
也不能直接输出文字,
可以用 $key 就表示元素的 "关联"下标 的名称了.
<foreach name="1d_array" item="val">
{$key}: {$val}
</foreach>
foreach 和 volist中 的name 就是变量, 就是 "带$ 的变量" , 如name="key" ,就是 name=$key, name="value",就是name="$val"
<foreach name="data" item="val">
{$key}:{$val}
<eq name="key" value="login"> // 这里的key就是 上面的数组变量 $key, $val, 表示数组的关联 下标和 元素的值.
<eq name="val" value ="1">
状态: 已登录
<else/>
状态: 没登录
</eq>
</eq>
<br>
</foreach>
输出:
id:1
name:admin
passwd:root123
login:1 状态: 已登录
M或D函数的create方法?
M和D方法都是Common文件夹下的common.php文件中的函数:
/**
- D函数用于实例化Model 格式 项目://分组/模块 ,要求有实际的 XXXModel类
- @param string $name Model资源地址
- @param string $layer 业务层名称
- @return Model
*/
function D($name='',$layer='') {
if(empty($name)) return new Model;
static $_model = array();
..... .... 返回的是一个$Model类的对象!!
return $model;
}
/**
- M函数用于实例化一个没有模型文件的Model , 是实例化没有模型文件的Model类对象, 即是最基本的Model类对象. 不需要有另外的xxxModel类.
- @param string $name Model名称 支持指定基础模型 例如 MongoModel:User
- @param string $tablePrefix 表前缀
- @param mixed $connection 数据库连接信息
- @return Model 返回的也是一个Model类对象.
*/
create是Model类的一个方法: 不管是M还是D都可以使用create方法. 只是D方法可以在类中创建$_validate.
/**
* 创建数据对象 但不保存到数据库
* @access public
* @param mixed $data 创建数据
* @param string $type 状态
* @return mixed
*/
public function create($data='',$type='') {
// 如果没有传值默认取POST数据 , (也就说, M方法和D方法都可以获得表单中的数据来创建 数据对象 , 存入数据表中).
if(empty($data)) {
$data = $_POST;
...............................................
// 数据自动验证
if(!$this->autoValidation($data,$type)) return false;
// 表单令牌验证
if(!$this->autoCheckToken($data)) {
$this->error = L('_TOKEN_ERROR_');
return false;
}
// 验证完成生成数据对象
if($this->autoCheckFields) { // 开启字段检测 则过滤非法字段数据 (也就是说, 如果不是表中的字段, 表单提交过来会被过滤掉!)
$fields = $this->getDbFields();
foreach ($data as $key=>$val){
if(!in_array($key,$fields)) {
unset($data[$key]);
}elseif(MAGIC_QUOTES_GPC && is_string($val)){
$data[$key] = stripslashes($val);
}
}
}
$this->data = $data;
// 返回创建的数据以供其他调用
return $data;
}
-------------------: 返回值 通常是一个数组, 但是如果错误,(表单中的字段和 数据库表中的字段 不相对应的话! ) 则返回的是false, 在数组表现上则为空.
在写表单数据入库操作的时候:
- 一定要在对应的模块 的 配置文件中, 写上对应的 "数据库" 连接配置, 主要是DB_NAME=>'...', 因为默认的thinkphp的convention.php中的数据库名称是空的: DB_NMAE=''! 否则, 你是无论如何都得不到$data的! 无论如何都无法写入数据到数据库中去的, 因为 无法连接数据库!
- 一定要写上数据库的表前缀, 表示区分数据表
- 那么在创建表的 时候 一定要加上表的前缀!! 如你配置的前缀是: DB_PREFIX => 'ly', 那么你创建的表的名称就一定是'ly_user'.
- 其他都没有什么. 只是在遍历select结果的时候, 非标签 模板变量中一定要$ : {$vo.username}....
- **** 在windows中, mysql的数据表名 不分大小写, 同样在M()和D()方法中,也就不区分 数据表模式名称的大小写!! M('User')=== M('user')但是php中的变量是严格区分大小写的, 即:$user != $User的
thinkphp中的App目录中 的runtime中的cache是一些 由随机数字组成的php文件, 这些文件的内容就是之前曾经访问过的文件的内容,
而且基本上每次修改那些文件的时候 , 主要是index.php/Index/index等等文件, 也会同步修改cache中的文件相应内容.
我们在项目中, 要设置一些系统的/ 项目的配置变量, 如果记不清, 或者不知道, 可以去参考 THINK_PATH."/Conf/convention.php"中的内容
看这个里面的 配置项的写法就可以了
如: 要配置跳转 配置项: 'TMPL_ACTION_SUCCESS' => THINK_PATH.'Tpl/dispatch_jump.tpl', 'TMPL_ACTION_ERROR'=> THINK_PATH.'Tpl/dispatch_jump.tpl' 两个都是跳转到一个相同的模板中的.
注意, 这两个跳转模板页面,实际上, 也是根据 Action->success/ error()方法调用display()来显示的, 其中模板文件中的 模板变量, 如$message, $error, $waitSecond, $jumpUrl等都是通过success和error方法通过assign方法传递过来的模板变量参数. 因此可以在success方法中去修改传递的参数变量.
**** 自己去看Action中的success方法, 里面写得清清楚楚 的!
首先是 sucess(){ 调用了方法: dispatchJump($message, 1, $jumpUrl, $ajax).. }
error() { 调用了 dispatchJump($message, 0, $jumpUrl, $ajax)...}
这两个方法中, $message后的0,1 ,表示的是状态$status.成功为1, 失败为0.
然后, 在dispatchJump(){ 方法中做了以下工作:
里面就写了, $this->assign('message', $message) -> assign('waitSecond', 3)等等,
最后 $this->display( C('TMPL_ACTION_SUCCESS')) 在这里调用了模板文件....
常量 THINK_PATH?
顾名思义, think_path就是thinkphp的路径, 就是项目中, thinkphp这个目录 本身 所在的路径, 一般用THINK_PHP来表示,
那么thinkphp下面的目录, 如Common, Conf (完整包才有的Extend ), Lang, Lib, Tpl等等.
thinkphp的Tpl模板中包含的模板文件有:
default_index.tpl, dispatch_jump.tpl, think_exception.tpl, page_trace.tpl四个模板文件!
几个近似函数的区别?
halt函数, _404, throw_exception 都是Common/functions.php文件中的函数.
- halt 只有一个参数$error
function halt($error) {...}
halt的处理逻辑:
首先确定 "异常变量" $e的内容, 然后不管是app_debug为真还是为假, 都将$e 分配到 "include C('TMPL_EXCEPTION_FILE');"异常模板页面进行输出.
在调试模式下, 异常变量$e的值有: $e['file'], $e['line'], $e['message'], $e['trace']等信息.
在部署模式下, 就只有 $e['message'] 元素值.
在非调试下, 定向到错误页面: 第一, 首先判断 if(!C['ERROR_PAGE']) 是否为空, 如果不为空,就直接重定向到错误页面: redirect($error_page), 如果错误页面没有设置, 就输出错误信息: 第二, 看是否允许输出自定义错误信息: if(C['SHOW_ERROR_PAGE']), 如果要输出自定义错误信息, 就让$e['message'] = $error显示这个自定义错误参数, 否则就显示系统定义的错误信息: $e['message']=C['ERROR_MESSAGE']
((( convention.php默认的错误页面为空: 'ERROR_PAGE' => '',如果要重定向错误页面, 就要自己去定义))
最后就是包含: include(C('TMPL_EXCEPTION_FILE')) 异常模板页面: think_exception.tpl,
如果if(isset($e['file/line/trace']) 等变量, 就输出 这些异常调试信息, 否则, 就只输出上面的$e['message']等信息输出到异常模板...
最后是exit.
也就说, halt会exit脚本, 后面的代码都不会执行!
- _404($msg, $url)
/**
* 404处理
* 1. 调试模式会抛异常
* 2. 部署模式下面传入url参数可以指定跳转页面,否则发送404信息
* @param string $msg 提示信息
* @param string $url 跳转URL地址
* @return void
*/
function _404($msg='',$url='') {
APP_DEBUG && throw_exception($msg); // 调试模式下抛出异常
........
if($url) {
redirect($url);
}else{
send_http_status(404); // send(404)可能没有任何反应和输出, 只是空白页面!
exit;
}
}
- 跳转函数: redirect, success, error.
thinkphp中的控制器类 名字不叫 Controller, 而是叫 Action: 是一个** 抽象的基类**, abstract class Action...
?: 三元运算符, 是要返回变量的值的, 所以, 只有对/ 凡是对 变量的 if...else样式的 "赋值"操作, 就用这个, 但是如果不是赋值操作, 而是逻辑操作 的if..else就不能使用这个三元操作符!!
strip_tags和htmlspecailchars的区别?
从字面上的含义都可以区分开来:
strip_tags将剥离所有的php和html标签, 任意的, 所有的标签为html实体, 其js或html标签的含义将消失;
htmlspecailchars: 指的是特殊字符, 就那么几个,5个, 不是所有的: 分别是: 单双引号, 大鱼小鱼, 和 "&".
thinkphp 项目分组 -开发随笔1的更多相关文章
- 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组
真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...
- ThinkPHP第七天(F函数使用,项目分组配置,项目分组模板文件放置规则配置)
1.F(文件名称,写入数据,写入地址),用于将数据写入至磁盘文件中,如F('Data',$arr,'./Data/'),作用是将$arr写入至网站根目录的Data文件夹中的Data.php中. 2.读 ...
- 【日记】thinkphp项目阿里云ECS服务器部署
项目本地开发告一段落.准备上传到服务器上测试 技术组成 thinkphp+mysql+阿里ECS 代码管理方式git 一.阿里ECS服务器配置 1.因为线上已经有几个站点了.所以要配置ngnix多站 ...
- 用thinkphp进行微信开发的整体设计思考
用thinkphp进行微信开发的整体设计思考 http://www.2cto.com/weixin/201504/388423.html 2015-04-09 0个评论 作者:明 ...
- ThinkPHP使用分组详细介绍(十七)
原文:ThinkPHP使用分组详细介绍(十七) 使用分组(模块分组) *就是将多个项目合并到一个项目/应用去(就是Home.Admin) ---分组不分组看自己的建立项目习惯,个人习惯用根目录配置生成 ...
- Eclipse项目分组管理
对于eclipse相信对于一个java开发人员,一定不陌生.eclipse可以通过工作空间(Workspace)将不同的项目进行分开管理,相信这一点大家一定很熟悉,用过idea的小伙伴,一定发现了,i ...
- ThinkPHP - 3 - IDE选择以及Eclipse PDT打开ThinkPHP项目
ThinkPHP框架已部署到SAE(新浪云),且代码已获取到本地.眼前面临的问题就是,对ThinkPHP项目选择哪种开发工具(IDE)? 经过简单的查找比较,以及电脑里已装有Eclipse的因素,遂决 ...
- ThinkPHP项目怎么运行?
1.下载ThinkPHP项目 2.安装核心框架framework 3.配置集成开发环境:wamp或者xampp或者phpStudy
- thinkphp项目阿里云ECS服务器部署
[日记]thinkphp项目阿里云ECS服务器部署 项目本地开发告一段落.准备上传到服务器上测试 技术组成 thinkphp+mysql+阿里ECS 代码管理方式git 一.阿里ECS服务器配置 ...
随机推荐
- SQL怎么输出前n个记录? n是中间计算得到的,不支持变量传递
需求: 表 people_crowed_test 按view_num排序后,输出该表的记录前30%的aid, buyer_id; 需求场景下的诸多限制: 1) 不支持变量赋值,也就是无法把中间结果保存 ...
- JVM学习笔记:虚拟机性能监控
JDK中除了包含与开发密切相关的jar包外,还包含了很多非常实用的工具.在%JAVA_HOME%\bin\目录下面除了命令行工具外,还包括了几个强大的可视化工具.这些工具可以辅助我们开发.调试应用程序 ...
- springMVC-HelloWorld
1.加入包 2.web.xml 3.利用spring-tool来新建一个springmvc的配置文件 关键步骤,选择创建一个Spring Bean Definition filer 然后next,然后 ...
- NOI2016模拟赛Zbox loves stack
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- 基于UDP协议的程序设计
使用UdpClient类进行编程 UdpClient类的使用方法 第一阶段 创建UdpClient实例 UdpClient udpClient = new UdpClient(); IPAddress ...
- PHP面向对象之朝花夕拾
虽然平时都在用面向对象的思维编程.但是都是基于框架,很多技术细节一段时间不用就会逐渐模糊.拾遗部分:面向对象的三大特称:继承多态封装. 构造方法.__construct() 构造方法.再new的时候 ...
- UVA1210Sum of Consecutive Prime Numbers(素数打表 + 连续和)
题目链接 题意:输入一个数n (2 <= n <= 10000) 有多少种方案可以把n写成若干个连续素数之和 打出10000之内的素数表,然后再打出每个可能得到的和的方案数的表 #incl ...
- 淘淘商城基于maven和svn的理解
首先了解下maven和svn是什么: Maven是一个项目的管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目的生命周期(Project Life ...
- EasyUi 方法传递多个参数值得方法
1.项目中需要传递多个参数值 function actionFtt(value, row, index) { //传递查询需要的参数 var customerId = row.customerId;/ ...
- python 读取 redis -安装redis-py
先下载 https://github.com/andymccurdy/redis-py 到本地 然后打开 Cmd.exe 进入当前目录 后执行 执行成功后,在python里检测 没有任何错误提示 就 ...