tp5.1学习

1.如果某个方法设置了路由器,那么访问这个方法的时候,就只能通过路由的形式访问了,不能再模块/控制器/方法这样的形式访问了2.第三种,资源路由::资源第一个参数的英文定义路由的规则第二个参数的英文这个路由规则去找的控制器名称,别忘前面了模块名资源路由会根据资源路由的定义方式,生成每个方法对应的请求方式及路由地址,设置后会自动注册7个路由规则,如下:请求类型生成路由规则对应操作方法获取博客 - >索引GET博客/创建 - >创建POST博客保存GET博客/:id读取GET博客/ :id /编辑编辑PUT博客/:id更新删除博客/:id删除3.调用模板在方法中返回视图(),会调用索引模板下,查看文件夹下的索引目录下的相应的与操作名相同的的.html文件0.4。


$ table-> addColumn('username','string',['default'=>'houdunren','comment'=>'用户名']);
$表 - > addColumn('密码','字符串',['评论'=>'密码']);

添加之后,$ table-> create();表示创建表。最后命令行里面php think migrate:run便可在数据库里面创建表了。当要改变的时候,就调用migrate的回滚方法,撤销上次的操作,php认为迁移:回滚,这时候再修改迁移文件,再php认为迁移:运行便可完成修改5.创建填充文件(就是往数据库里填入的数据文件)php think seed:创建用户(创建一个往用户表里填充的数据文件),这个文件和迁移文件是在同一文件加下(数据库)“ //使用db()方法,定义往那个表里填充数据,//使用insert()方法,设置插入的数据db(“user”) - > insert([‘username’=>“后盾人”,’密码’=> MD5(“admin888”),’缺口’=>’人人“]); db(“user”) - > insert([‘username’=>

6加载公共模板文件,比方说页面头部尾部信息,{extend name ='。/ common / father'/},注意路径,这个路径是基于模板文件的父级文件夹的位置,也就是索引文件夹的位置来判断的,因为模板文件再索引平级的公共下的father.html所以路径值是-当前目录下的普通文件夹下的father.html,注意这边用延伸来继承的时候,不用谢后缀0.7。“来告诉子类我这里有个区块可以用来填充,并且指明区块名。在子模块中,可根据父模块的块的名字,来填充区块内容。{ b lock name =“head”}中间写html代码来填充{/ b lock}。注意这里的名字要一样才可以填充,要制定我要填充的区块名.8。类似于assign()函数的功能实现:把数据网模板上传递首先,页面展示模板就是用图()方法(相当于显示()方法),这个方法的第一个参数是要加载模板的名称,一般都是默认加载模块目录下点的文件下的与控制器同名目录下的和操作同名的HTML文件。第二个参数是要往模板页面中分配的数据,但是这里要用紧凑(“{数据变量名}”)函数把数据变量处理一下在传到页面当中去。这里的参数是变量名,不加美元符号的0.9。在TP5框架中,在页面上插入的PHP逻辑使用的是{},估计用了智者的,循环也是{foreach 数 据 为 k => $ v}中间对数据进行操作{/ foreach},但是可能会和js中的{}大括号冲突10.创建模型类(对每个不同表的操作类):在命令行里面用php think make:model {表的名字} 11.在使用模型类的时候,使用一下模型类的命名空间,否则他就不知道该去哪里找这个类,可能是因为这个模型类的放置位置不固定,所以要手动加载命名空间.use app \ common \ model \ User;

  1. halt()函数里面直接传入某个变量,halt($ user),不用写引号。和快学框架的halt方法一样的,也包含了
    die.13 。对数据库的数据操作增了改查: 1.使用模型类操作,$用户=用户::选择();0.2。使用Db的类的操作,要先指定操作的数据表,’ USER=DB::>;3使 U S E R = D B :: 表 ( ′ 数 据 表 名 ′ ) − > 选 择 ( ) ; ‘ 3 。 使 用 助 手 函 数 , ‘ user = db(“{数据表名}”) - > select();`
  2. tp框架会自动的把时间以int时间戳的形式添加到数据库里面去,字段名create_time, update_time.15。
    安装phpmailer扩展,就是邮件扩展,去packagist.org上下载phpmailer,代码为composer require phpmailer / phpmailer
    16.为邮件设置编码$ mail-> Charset =“utf-8”;
    17.在jquery里面的注释,有问题,注释前面一定要有空格或是tab不然就会报错
    18。在Jquery中,给按钮加点击事件的时候,“`

    $(“#{按钮id}”)。click(function(){ return false; //这里的return false作用是 //要是不加这个,在执行完jquery的事件之后,他还是会执行自己的提交功能,这里的假就是停止下来,不让他执行提交}) `

19 .. mt_rand(min,max):生成一个分钟到最大值之间的一个整数20.框架里的url不区分大小写:admin / index / index = admin / Index / index 21.网站域名:{ $ Request.domain}。网站Ip:{$ Request.domain}。端口:{$ Request.domain}22.助网函数URL(),传递参数.href =“{:URL(’管理员/分类/编辑’, [‘ID’=>’cateInfo.id'])}“,这样就把当前栏目列表的栏目ID通过获取方法传给edit()操作了。在那里面只要输入('get.id'),就可以把信息取下来了。别忘了在路由里面加上可选参数` :: rule('cateedit / [:id]','admin / cate / edit','get | 后'); ` 24.判断是否要用ajax:当需要加载新的页面的时候,直接在标签的href =“”里面加上{:URL()},因为他需要显示新的页面而当按钮的作用只是把数据发送给某个页面进行处理判断,不用显示新的页面(形式表单数据时),这时候用AJAX。会好一点。当在栏目列表删除行数据,用AJAX时,不能删除按钮起ID,因为这是个循环,有很多的按钮,要是起了ID,就表示这些按钮全都是一样的标识,不符合页面的ID唯一性的准备。可以加个班,反正只要让jquery的选择器找到这个元素就行。 26,软删除,就是在数据库里面加上个delete_time,当其为空时,表示这个数据没有被删除。反之,当期不为空时,就是表示这个数据被删掉了。用法:先在模型类里面`使用SoftDelete; `,然后当要删除某个栏目时,先 cateInfo.id'])}“,这样就把当前栏目列表的栏目ID通过获取方法传给edit()操作了。在那里面只要输入('get.id'),就可以把信息取下来了。别忘了在路由里面加上可选参数` :: rule('cateedit / [:id]','admin / cate / edit','get | 后'); ` 24.判断是否要用ajax:当需要加载新的页面的时候,直接在标签的href =“”里面加上{:URL()},因为他需要显示新的页面而当按钮的作用只是把数据发送给某个页面进行处理判断,不用显示新的页面(形式表单数据时),这时候用AJAX。会好一点。当在栏目列表删除行数据,用AJAX时,不能删除按钮起ID,因为这是个循环,有很多的按钮,要是起了ID,就表示这些按钮全都是一样的标识,不符合页面的ID唯一性的准备。可以加个班,反正只要让jquery的选择器找到这个元素就行。 26,软删除,就是在数据库里面加上个delete_time,当其为空时,表示这个数据没有被删除。反之,当期不为空时,就是表示这个数据被删掉了。用法:先在模型类里面`使用SoftDelete; `,然后当要删除某个栏目时,先 cateInfo = model(’Cate’) - >

$ cateInfo-> delete(),这时候的效果就是数据库里面的delete _ time字段被添加上删除的时间戳,表示这个数据被删掉了,而当在框架里调用选择()时,这个数却不会被查到0.27。页面里的网址助手函数跳转,流程估计是,先根据路由转化为路由名称,再根据路由名称由路由分配到实际的页面上去的。当发现跳转不正常的时候,别忘了检查一下啊路由配置,有没有出错28.PHP7里面三元运算符:输入(’post.is _ top)??空;两个问号表示要是为真就是它本生,要是不为真,那就是两个问号之后的那个值。 29.前台的表单的检查 b牛,当没有选择的时候,输入()里面是找不到提交的数据的,这时候,要对其进行判断.’is _ top’=>输入(’post.is _ top’)?? 0; 表示当没有传值过来的时候,就赋值为0,当传值过来的时候,检查 b ox本身的值为1.还有要注意,要给其加一个value =“1”,的属性,表示当选择时,表单传过去的数据值为1,不然传过去的值一直就是0。30 {如果vo.is_top $ == 1}已推荐{别的/}未推荐{/如果},在页面中包含逻辑代码,{if条件}操作{else if条件/}操作{/ if}

31.desc降序,大​​的在上小的在下.asc升序(默认),小的在上,大的在下.32。attr(
)方法设置或返回被选元素的属性值。可以在元素上加一个DATAID = “{$ vo.id}”,然后再jquery的里面就可以用’$(这).attr( ‘DATAID’)`获得该属性的值,用于AJAX传输数据
33。layer询问框:“`

layer.confirm({msg,{ title:“询问框标题”, 图标:3, },函数(索引){//回调函数 layer.close(index); //关闭窗口} )

` 34 .. json数据格式:{id:id,title:title} 35.表的关联,再文章表中通过表内字段cate_id查到所属的栏目信息,就是在显示文章的时候列表里面希望在页面显示文章所属栏目的信息

//先在文章模型里面定义栏目关联方法cate,belogs表示多对一,多个文章对应一个栏目,多对一是hasMany()公共功能美食(){ // belogsTo表示这个模型关联到Cate模型,关联的外键是cate_id,所关联的Cate表的主键是id

    return $ this-> belongsTo('Cate','cate_id','id');     } 然后再在文章的列表方法里面,在获取文章数据时加入('cate'),表示要使用这个关联方法,这样查出来的数据里面就包含了所有栏目的信息$ articles = model( 'article') - > with('cate') - > order(['is _ top'=>'desc','create _ time'=>'desc']) - > paginate(10); //最后在页面上显示的时候,在变量$ vo里面$ vo.cate就是所属栏目的信息了,这时候我要显示栏目的名字,就直接$ vo.cate.catename就好了{volist name = “articles”id =“vo”} < td > {$ vo.cate.catename}  //总的来说,就是先在模型里面建立关联方法。在控制器渲染模板的时候,在数据里面加上与( “{模型里面的关联方法名}”)。最后在页面上的时候$ VO。{关联方法名}。

36.关联删除,当删除某个导航的时候,应该把导航之下的文章也删除掉

先在栏目模型里面定义多对一的关联文章() //栏目表关联文章表,当栏目被删掉的时候,属于这个栏目下的文章信息也被删除 // hasMany()表示一对多 //栏目表一对多关联文章表外键是文章表的cate _ id,主键是栏目表的id,就是文章的外键cate _ id字段,关联栏目主键id字段 //通过文章表的外键cate_id可以找到栏目,栏目的唯一标识主键就是id,所以关联上它 //这里的hasMany函数,表示我栏目被文章所关联,文章表的的外键关联到我这里的主键 //所以外键是cate_id(文章表的),主键是id(栏目表的) public function article(){ return 这个- >的hasMany( '项目', 'cate_id', 'ID');     } 然后再在删除操作的查数据时,把所关联的文章一并查找进来与( '物品')(因为要先查找后删除运用软删除高级特性)并在删除的时候绑定在一起删除一起('article') 这个- >的hasMany( '项目', 'cate_id', 'ID');     } 然后再在删除操作的查数据时,把所关联的文章一并查找进来与( '物品')(因为要先查找后删除运用软删除高级特性)并在删除的时候绑定在一起删除一起('article') cateInfo = model(’Cate’) - > with(’article’) - >

    $结果= $ cateInfo->一起( '项目') - >删除(); 

“`37.当表单里的数据只允许看,不允许修改,就给他加一个禁用属性,当要需改用户信息时,因为用户名和邮箱是不允许修改的。再修改页面给这个输入加上禁成属性,使之无法操作。然后再成员的模型里面把用户名,电子邮件设置为只读字段,protected $ readonly = [‘username’,’email’]; 38. < u >注意数据库中的enum格式的数据,比方说里面有(1,0),更新的时候,要记得传入的数据要是字符型,就是加上引号的,才能够被更新,要是只传入数字1,0无法更新。,好像只是在sql语句里面会这样.39。对文章,用户等的编辑,先在列表页面的编辑一个标签上加上网址()具体的链接(还要带上所传参数),此时不是阿贾克斯传值,而是真正的页面GET传值(因为要加载一个新的eidt页面)此时编辑控制器输入( ‘ID’) ,得到要修改的ID,然后模型(’{}’) - >查找(ID),找出信息,再把信息渲染到模板上这时候修改页面的数据框里面就会显示出要修改的东西的原来属性了此时再提交,就是AJAX提交,编辑控制器里面如果(请求() - > isAjax()),取得数据,传入模型,模型中先查出来信息,再修改,再保存(),实现信息更新0.40.TP有数据库 动写入时间戳,和把时间字段取出后的默认时间格式,它会自动地把时间戳转化成实际的时间格式

41.关联载入,在渲染前台显示文章模板的时候,查找的信息里面关联上文章模型里面的评论评论,以及每个评论所属的用户,都一并查找出来42. {volist name =“articleInfo。标签| strToArray“id =”vo“}把渲染页面的文章数据articleInfo.tags里面的标签(因为文章多个标签之间使用| 分割),调用自定义函数strToArray把他转化成数组,在进行循环43对模型(”) - >查找()数据库里查找出来的数据使用 - > setInc(’{字段名}’),就会使的这个字段的值加一,多用于文章的点击量0.44。在显示文章内容的时候,因为文章的编辑使用富文本编辑器编辑的,里面的内容有各种各样的标签,此时我们要把这些标签转化成实体,就要用到raw函数{$ articleInfo.content | raw} 45.验证码: 46.在用户注册中,要在检验场景里面加上用户名要在会员表面面不重复的规则:$ this-> only([检检的字段]) - >追加(“ 在用户登陆场景中,要给用户名字段移除不重复规则。注意此时就直接写unique便可,后面不用加表名 $ this-> only() - > remove(’username’,’unique’

在模板页面上使用助手函数,{}大括号里面一定要加上:=“{:助手函数},否则就不生效。{:会话(’mem b er.nickname’)},显示以登录用户的昵称.49 。在JS里面要是用到助手函数会话()等,要用引号括起来,location.href =“{:URL()}”

你可能感兴趣的:(php,tp5.1)