
学习总结
一、tp框架的学习
1.路由的问题
配了虚拟机后的访问方式如:www.kk.com,其中的Apache中的Vhosts.config文件里所对应的域名是以public结尾的,所以在url地址栏中输入对应的域名即可访问。
但是,在使用url的时候会遇到跳转不了的问题,解决方法如下:
在public同级的目录下找到一个叫 .htaccess文件,其中内容替换成:
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) index.php?/1 [QSA,PT,L]
</IfModule>
然后在需要跳转的标签里写上 {:url(‘index/index/login’)}即可跳转,第一个index表示在哪个文件夹中,第二个index表示在哪个控制器中,最后一个login表示的是login方法,对应的控制器指向的是view中的login.html文件。
2.MVC的使用
在app文件夹下,创建前后台文件夹,分别为index和admin,其中index在框架中是自带的,文件夹名为小写。
然后在各自文件夹中创建controller、model、view文件夹,同样是小写。
接着在controller中创建Index.php,对应着在model中创建Person.php,都为大驼峰,而在view中先创建index的文件夹,为小写,然后在其中放入html文件。
其中控制器和模型之间的继承关系如下图所示:
3.登陆的实现
设计思路:使用Ajax将异步实现功能,提示信息。
问题:js和jquery的使用
要点:使用前要将ajax.php和jquery库引入
注意:在最后一个验证码输入的事件为输入框实时获取内容,这样在输完以后即可判断是否正确并解除登陆按钮。
4.css\js等样式引入的问题
在config.php配置文件中可以设置全局,如图
在其中可以写 ‘ADMIN’ => ‘../../’,
可以在全文替换。
5.点击图片实现上传的原理
Html中代码:
<input type="hidden" name="uid" value="{$uid}" id="hide_id">
<img class="avatar size-XL l" src="../../static/h-ui/images/ucnter/avatar-default.jpg" onclick="fileSelect()" title="点击更换头像" />
<form id="form_face" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload" onchange="fileSelected();" style="display:none;">
</form>
js中代码:
function fileSelect() {
document.getElementById("fileToUpload").click();
}
function fileSelected() {
//触发上传点击完图片后触发此函数
var file = $("#fileToUpload").val();
var hide_id = $("#hide_id").val();
console.log(file);
console.log(hide_id);
ajax.request({
url:"{:url('admin/user/upload')}?"+"hide_id="+hide_id+ "&&" +"file="+file,
type:'get',
jsonp:'callback',
callback:function(data){
var obj = JSON.parse(data);
if(obj.state == 1){
console.log('success');
} else {
console.log('error');
}
}
});
}
此处的ajax代码尚不能实现上传,原因是在TP框架中的图片上传类需要接受的file是对象格式,而这里的ajax传过去的file是字符串。
所以此处仅说明点击图片实现上传图片的逻辑而已。
6.登陆中所运用到的js代码
- js判断中,如果是错误的,则写的 return false; 来终止下面代码的执行。
- 几个触发事件:Focus
$(document).ready(function(){
$("#password").focus(function(){
$("#yzm").val("");
var name = $("#username").val();
if(!name) {
$(".error-box").text('请先填写用户名!');
return false;
}
});
});
离开输入框事件 blur:
$(document).ready(function(){
$("#password").blur(function(){
$("#yzm").val("");
var name = $("#username").val();
if(!name) {
$(".error-box").text('请先填写用户名!');
return false;
}
});
});
输入框实时监控事件 bind:
$("#yzm").bind('input propertychange', function(){
//计算输入的个数:直接在变量后面加上 .length,即可
});
jquery刷新验证码图片
$("#yzm-img").attr("src","{:captcha_src()}?flag="+Math.random());
清空值: 1)Text中可以是 $(“#id”).empty()、$(“#id”).val(“”)、$(“#id”).text(“”) 2)input中是 $(“#id”).val(“”)
7.弹窗的绑定数据
根据Ajax将数据传过去后,用 Session 将数据接受,在传过去显示的方法中接受后再清除Session Session::clear()
8.二维数组添加数据
在控制器中查出一个二维数组数据,要操作其中的某个字段,并将其压入原数组中,再通过模板渲染可以对应的输出到页面。具体所用到的是引用传参技术,代码截图如下:
[需求:将2018-06-16 13:10:20中的16拿出来,将2018-06换成2018/06。]:
9.jq中的ajax上传图片的实现
-
图片上传:使用jq 的图片上传,在view中的js代码如下图:
Formadd是form中的id,点击添加后将form中的文件一并提交,var form 和 var formdata的操作是将数据整理成对象,下面的$.ajax是jq中的ajax方法。其中type是提交数据的方法类型,不写默认为”GET”,data为所传的数据,后面删除图片中会讲到这个data中数据传输注意的东西。在控制器中返回的json数据状态可以进行反馈操作,这里成功的时候要执行一下刷新当前页面的操作,不然不能够实现更新效果。
-
接着我们来看控制器中的代码怎么处理:
在控制器上面要use一下think\File和think\Request类。首先先在public中建一个空的文件夹uploads,用于存放上传的图片本地缓存。上面的代码中会看到有两个操作,一个是上传图片,另一个是关联表的插入,获取到上传图片的表插入数据的最新id,然后将其作为外键插入到关联表中。具体处理代码中已给出。
-
最后我们来看一下删除图片的操作
这里的type没有写是默认的get传输方式,而需要注意的是data数据的传输使用{id:id}的方式,多个数据中间用逗号,隔开
ajax传输的数据如图:
二、知识汇总
1.关系型数据库的三范式
简单理解:
- 每一列只有一个值,字段具有原子性
- 每一行都能区分,设置有主键或者关键字作为唯一标识
-
每一个表都不包含其他表中已包含的非主关键字信息,如帖子表中有发帖人ID,就不能存在发帖人的姓名,这样会导致数据冗余。
研究中顺便研究了一下数据库的四大特性,这里主要记录其中的两个特性的关系,首先四大特性分别为:
- 原子性
- 一致性
- 隔离性
-
持久性
这里主要说一下原子性和一致性。原子性的意思是事务要么一起执行成功,要么一起失败后全部回滚。而一致性的意思是一个事务执行之前和之后都必须处于一致的状态。咋一看两个都差不多,但下面一个例子就可以说明两个是不同的:
原子性:A向B账户中转100,那么A账户要减去100,同时B账户要增加100,如果中间断了,则要进行事务回滚,A不减,B不加。
一致性:A向B账户转100,C也向B账户中转100,正常情况下的一致性是B账户多了200,而同时操作的话后面的事务会覆盖掉前面的,所以结果是B只多了100,但A和C账户都少了100。这个的解决办法就涉及到了第三大特性,隔离性。
以下内容为粘贴网上回答:
原则上无非是两种类型的锁:悲观锁和乐观锁。
2.git研究总结
关于git 的版本控制工具的使用,首先本地需要下载安装git ,安装的目录指向的是php.exe,在本地的php地址,也就是说本地使用的是哪个版本的php,则git就安装在对应的php.exe中,这与环境变量是对应关系的,使用phpstudy则会安装完git的同时自动设置git的对应环境变量。
下面总结使用:首先需要在git管理平台申请一个仓库,如www.coding.net,然后在仓库中建立项目,如tp5。本地中的git安装完成后即可使用,在项目的文件夹上右击,选择git Bush here,然后执行下面的命令即可。这里主要说一下分支的东西。
我们要清楚本地和线上的git管理平台的区别:线上的git仓库中,默认有master分支,可以设置默认分支是哪个,不需要手动新建分支,因为我们接下来在本地的操作可以实现新建,线上的分支合并可以找到对应的按钮,然后选择对比,申请合并,需要注意的地方是,一定要看清楚哪个合并到哪个上面,目标文件为将要合并成的文件,而源文件是现有的文件,如果反了,将空的文件合并到源文件上,则会变成空文件的。
接下来我们来说本地的git使用,我们第一次初始化后,只有一个master分支,本地的分支也是可以合并的,命令在下面。我们要建立一个分支dev,这样我们将本地的分支dev push 到线上的时候,线上会多出个dev 分支,这样,线上会有master 和dev 两个分支,在确认没有冲突后可以将两个分支合并,其实我们可以一直使用dev分支,master分支的意义是备份,本地如果文件丢失的可以从master分支上再克隆下来。所以,本地建立一个dev分支,在第一次建立分支的时候,他的文件是和master文件是一样的,那么我们在dev分支上操作,增删改后,将文件push上去,则即可更新线上dev分支代码。
基本操作命令:
git init
git clone 地址 或者使用pull : git pull 地址
git branch -----查看有哪些分支
git branch dev ----新建dev分支
git checkout dev ----切换到dev分支
Git touch 1.text -----新建一个文件
Git rm 1.text ----删除一个文件
Git --help ---查看命令
Git add . ----将本地文件放入缓存区
Git commit -m “...” -----提交到暂缓区
Git status ------查看状态
Git push https://coding.net/u/ykk0214/p/tp5/git dev -----将dev分支推到线上
三、小程序
1.代码逻辑
小程序最外层的app.json 文件是配置全局的配置文件,在最上面的pages 是指向文件的路劲,第一行的位置是打开小程序的第一个页面,一般设置为首页,app.js可以配置tabBar底部,也可以设置全局对象,如登陆的个人信息可以设置一个userinfo:
appData: {
userinfo: none
}
pages页面中可以建立其他页面,注意的是.json文件中必须要有 {},即使是空的。在各个页中的js中可以输入page来设置基本的函数方法等。js文件中是关键的数据传输文件和事件处理文件,最上面的data文件就是相当于php中的模板渲染,其中定义的数据是输出到页面中的。
Set.Data({ username: this.data.username }),将数据绑定起来赋值给上面定义的对象
2.跳转问题的总结
- 在app.json中定义的页面为tabBar页,这种页面的跳转使用的是 wx.switchTab({ url: “ ”})
- 非tabBar页的跳转使用 wx.navigateTo({ url: “ ”}) 和 wx.redirectTo({ url: “ ”}),这两个的区别是,navigateTo是有返回页的,redirectTo是没有返回页的
3.标签
绑定数据的标签—–冒泡事件:bindtap=””,非冒泡事件,只触发子字节的:catchtap=” ”