Think PHP(TP)框架基础知识
TP框架复习:
什么是框架?TP框架就是一个半成品,特点是易于扩展,有一套自身函数库(比如ThinkPHP),插件(多了之后编码繁琐);
三层架构:表现层:负责用户与系统的交互,不止是页面代码,也有逻辑代码,从表现层内容上有个MVC;
业务逻辑层:(维护业务逻辑、系统的核心部分);
数据访问层:和数据库交互的那部分代码,现今我们用PDO模式,TP中是DB操作类;
MVC:M(model)模型:页面需要操作的数据模式,用于封装数据,负责处理用户数据,实现业务逻辑;
V(view)视图:用于显示收集数据和用户打交道;负责将数据转交给控制器;
C(controller)控制器:。用于改变数据以及模型的状态。负责接收用户的请求和数据,做出判断将请求和数据交给哪个模型进行处理!
高内聚低耦合
四人帮总结23个金典模式,比如单例模式,
单例模式定义:一种常用的软件设计模式,在它的核心结构中包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类中一个类只有实例;
优缺点:实例控制、灵活性;不必要开销、可能的开发混淆、对象生存期;
在PHP中搭建TP框架的步骤:
①新建项目mytp
②拷入TP框架的文件夹ThinkPHP
③在mytp下新建文件夹diyi
④将压缩包解压后的index.php文件放入diyi文件夹
⑤运行localhost:8080/mytp/diyi/index,出现 “ :) 欢迎使用 ThinkPHP!”
⑥搭建成功。
⑦在运行之后会在diyi下面自动生成一个文件夹Application,如果不喜欢这个名字可以在第④步的时候在index.php中21行修改
⑧以后自己写的代码统一放在Application文件夹下的Home中放在标准位置
TP框架中的文件夹:
1、index.php:项目的入口文件,又叫单入口,后面加参数(路由)
2、application:存放项目的文件夹
3、public:存放公有的东西,如音乐、图片之类
4、thinkPHP:TP框架的核心文件夹,里面的东西尽量不要修改
1.common:核心函数库,用户自定义的函数可以存在这里面
2.conf:配置文件,主要在里面的convention.php
3.lang:语言包
4.library:存放TP核心类文件,里面的think存放类,我们使用的类基本都在
5.mode:模型文件夹
6.TPL:模板文件夹 可以自己定义项目存放文件:
7.thinkPHP.php:公共入口
5、自定义文件夹下
1.common:存放函数
2.Home文件夹:项目里的模块,开发时所有的代码写在home里(*重要),文件名称可以修改->ThinkPHP->conf->convention.php中修改
1.common:存放函数。
2.conf:配置文件里面的config.php就是配置文件
*3.controller:控制器,函数存放
*4.model:模型
*5.view:视图,页面代码存放的地方
3.Runtime:用于存放缓存文件
1.catch:存放缓存的文件
2.data:数据库缓存
如果要修改配置不要修改thinkPHP里的,修改home里的conf的config.php
Controller里的常用函数,Model里的常用函数要熟悉;
系统常量:PDF中->附录中的常量参考,常量特征:全部大写的。
TP中默认的函数及其意义:
A(): 用于实例化控制器 格式:[资源://][模块/]控制器
B(): 执行某个指定的行为操作
C():访问查看配置信息
D():D函数用于实例化模型类 实例化对象。 对数据库做改变,做验证。model就是做验证。D函数就需要做验证
M():M函数用于实例化一个没有模型文件的Model 安全性不高
E(): 抛出异常处理
L(): 获取和设置语言定义(不区分大小写)
I(): 获取输入参数 支持过滤和默认值
N(): 设置和获取统计数据
R(): 远程调用控制器的操作方法 URL 参数格式 [资源://][模块/]控制器/操作
S(): 缓存管理
F():快速文件数据读取和保存 针对简单类型数据 字符串、数组
U():生成url地址
index.php文件中开启调试模式, 建议开发阶段开启, 部署阶段注释或者设为false
一、项目模块规划
1、项目分为PC端、移动端、和PC管理端,分为对应目录为 /Application/Home,/Application/Mobile,/Application/Admin;
对应入口文件为 index.php, mobile.php,admin.php,入口文件中设定绑定模块;
![](/assets/blank.gif)
ThinkPHP配置>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>index.php // 应用入口文件 // 检测PHP环境 if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !'); // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false define('APP_DEBUG',true); // 定义应用目录 define('APP_PATH','./Application/'); // 绑定模块 index.php define('BIND_MODULE','Home'); // 引入ThinkPHP入口文件 require './ThinkPHP/ThinkPHP.php'; // 亲^_^ 后面不需要任何代码了 就是如此简单 //-------------------------------------------------- admin.php // 应用入口文件 // 检测PHP环境 if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !'); // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false define('APP_DEBUG',true); // 定义应用目录 define('APP_PATH','./Application/'); // 绑定模块 define('BIND_MODULE','Admin'); // 引入ThinkPHP入口文件 require './ThinkPHP/ThinkPHP.php'; // 亲^_^ 后面不需要任何代码了 就是如此简单 //-------------------------------------------------- mobile.php // 应用入口文件 // 检测PHP环境 if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !'); // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false define('APP_DEBUG',true); // 定义应用目录 define('APP_PATH','./Application/'); // 绑定模块 define('BIND_MODULE','Mobile'); // 引入ThinkPHP入口文件 require './ThinkPHP/ThinkPHP.php'; // 亲^_^ 后面不需要任何代码了 就是如此简单 //--------------------------------------------------
![](/assets/blank.gif)
2、访问的URL为 “域名+项目文件夹名+入口文件+控制器+方法”,如“localhost/myprj/index.php/Index/index”;
3、服务器配置域名绑定到项目文件夹,省略项目文件名,服务器上URL为“www.myprj.com/index.php/Index/index”;
![](/assets/blank.gif)
<VirtualHost *:80>ServerName myprj.comRedirectMatch permanent ^/(.*) http://www.myprj.com/$1 </VirtualHost><VirtualHost *:80>ServerName www.myprj.comDocumentRoot "/usr/local/apache/htdocs/myprj" </VirtualHost>
![](/assets/blank.gif)
4、对于三个模块的关系,我规划的是 PC端为父类,移动端和管理端均继承于PC端;
二、配置和目录规划
1、配置文件 /Application/Common/Conf/config.php为公共配置文件,用于配置数据库信息、模板后缀名、自动开启Session、URL模式等全项目公用的配置信息;
2、/Application/Home(或Mobile或Admin)/Conf/config.php为模块配置文件,一般用于配置CSS、JS、图片目录,如下
![](/assets/blank.gif)
<?php return array(//'配置项'=>'配置值''TMPL_PARSE_STRING'=>array('__CSS__' => __ROOT__.'/Public/home/css','__JS__' => __ROOT__.'/Public/home/js','__IMG__' => __ROOT__.'/Public/home/image','__PCSS__' => __ROOT__.'/Public/pub/css','__PJS__' => __ROOT__.'/Public/pub/js','__PIMG__' => __ROOT__.'/Public/pub/image', ) );
![](/assets/blank.gif)
备注1:在CSS中引用图片使用相对路径,如 body { background
: url("../image/bgimage.png") }
备注2:模板在包含文件时要使用<include file="..." />标签,使用<?php include '...'; ?>等原生PHP函数会导致包含文件中的__APP__、__JS__ 等预定义不被渲染;(框架BUG)
备注3:模板在包含公共模板文件时使用<include file="Index/header"/>,对应的公共模板文件路径为 /View/Index/header.php ,此方法不经过控制器,所以不需要定义对应的方法,如果是其它控制器也不需要定义相对应的控制器。
3、/Application/Common/Common/function.php为公共函数文件,用于保存公共函数,如 密码加密函数、表单过滤函数 等,这个文件会被自动调用不需要手动 require;
备注:为移植第三方接口(如微信支付、支付宝支付、OAuth登录)修改工作较少,我把这些第三方DEMO放到了 /Application/Common/Common 目录下,在function.php中编写函数调用相关的接口类和函数。
4、设定模板文件的后缀名为php,因为一些IDE对html后缀的文件不能智能优化显示其中的php代码,比如Dreamweaver和Notepad++。
5、建议配置URL伪静态后缀设为空(默认为html),以免在编程中生成带参数的URL时出现异常的情况。(框架BUG)
6、如果TP3.2.3,作数据库配置兼容处理(设计缺陷?)
//TP3.2.3兼容处理:列名返回时区分大小写,原默认配置是全部为小写 'DB_PARAMS'=>array(\PDO::ATTR_CASE => \PDO::CASE_NATURAL),
三、MVC划分
1、由于项目并不复杂,TP中提供了可不必定义的Model类,而如果定义Model类会在多模块的继承中增加复杂度,所以项目中均无定义Model类;可以看看一些开源项目中,不少Controller的方法只是对Model调用了一个方法然后ajax返回,非常冗余;
2、控制器分为两大类,一类是专门负责模板渲染(assign和display),这里称为模板控制器;另一类是负责数据库操作和处理,这里称为数据控制器;
3、为便于对于模板的统一控制,仅 Index 控制器为模板控制器;由于PC版有用户中心一系列的模板,所以 UserCenter也是模板控制器;
4、原则上所有的数据库操作不允许存在于模板控制器(如 Index控制器)中,应该写在相应对象的数据控制器中;
5、同理原则上模板赋值(assign)和模板渲染(display)不允许存在于数据控制器中
6、Ajax返回写在数据控制器中,对于同时支持被其它控制器和Ajax操作的方法,使用 $isReturn=FALSE 可选参数来决定输出数据还是函数返回数据;
四、编程规范
1、文件、类、方法、函数命名规范参考Thinkphp官方规范
2、HTML/CSS、JS(jQuery)和PHP规范参考 这个链接>>
3、MySQL设计规范参考 这个链接>>
五、Thinkphp框架专用命名规范--团队内部规范
1、类实例化成对象变量的命名
控制器命名的规则是 $+类名首字母小写+字母C(表示控制器),即使只使用其中的一个方法也不要使用类中的方法名作为对象的名称。
控制器命名的规则是 $+类名首字母小写+字母M(表示模型),特别的空模型使用 $m,因为变量应该小写字母开头 。
$usrC = A('Usr'); $productC = A('Product');$memberM = M('member'); $m = M(); 或者直接使用 M()->方法();
备注:实例化出来的类实例也是变量,变量名称就要以小写字母开头;
2、数据变量的命名
虽然PHP的变量类型有好多,但在数据显示方面,就基本上可以归纳为 字符串族 、一维数组族、多维数组族 这三种。
字符串族:整型、符点型、字符串,这一族可以直接使用 echo 或者类似Smarty的{$key} 等直接输出;
一维数组族:这种一般是查询数据库得出来的只有一行数据(通常需要类似 $userInfo = $userInfoArr[0] 的小处理一下),这种一般是 assign 到模板然后用类似 {$userInfo['name']} 这种方式输出;
多维数组族:这种一般是查询数据库得出来的多行数据,变量命名以Arr为后缀,如 $productArr = $productC->getIndexPro(); ,这种一般在模板用 foreach for 等循环遍历出来;
六、部署:Linux下目录权限设置及大小写BUG
1)缓存目录
项目/Application/Runtime/ 及其内目录设置 777 权限
chmod 777 -R ./Application/Runtime/
如果仍不能正常生成缓存文件,检查是否硬盘已满。若系统为centos7,则要关闭 selinux 防火墙。
2)上传目录
项目/upload/ 设置 777 权限,注意目录如果没有可执行权限会导致 上传时报类似“目录不存在”这样的错误。
chmod 777 ./upload/
上传目录内的所有文件都要设置成不可执行权限,这个似乎Linux没有相关的配置,是在Apache或者.htaccess里面配置成不可执行PHP的,下面是.htaccess方式
#禁止上传目录 upload 的PHP执行权限,包括大小写的PHP后缀 <FilesMatch "(?i:\.php)$">Deny from all </FilesMatch>
3)项目应用目录
所有的PHP访问应该都应该从入口文件进入,CSS/JS/图片等可以不必经过入口文件。那么就应该屏蔽整个代码项目的文件的直接访问,而不只是TP官方文档所说的只是保护模板文件,所以直接在 项目/Application/ 目录下放置一个 .htaccess 文件,写上下面的内容
#项目目录屏蔽所有没经过入口文件,直接URL访问的 <FilesMatch "(.*)">Deny from all </FilesMatch>
4)关闭调试模式
把服务器上的index.php、admin.php等入口文件注释掉 define('APP_DEBUG',true); 即关闭调试模式,注意不要再上传到SVN,本地开发仍然使用调试模式。关闭调试模式要在TP的配置文件 项目/Application/Common/Config/config.php 里加上(框架BUG)
'URL_CASE_INSENSITIVE' => FALSE, //调试时是false的//部署时是true会导致Linux下模板渲染文件名全部转换为小写字母而出错!!
5)缓存清理
关闭调试模式后,会生成配置缓存文件。每次更改配置文件都要删除 项目/Application/Runtime/common~runtime.php 文件才能使新配置生效;(文档BUG)
更改配置后页面显示不正常,要清理页面缓存,清空 项目/Application/Runtime/Cache 目录里面的文件;
注意不能把 项目/Application/Runtime 整个目录删除,它不会自动生成,会导致无法生成各种缓存而使程序无法正常执行;(框架BUG)
管理后台可以加入一个“清理缓存”的按钮
![](/assets/blank.gif)
七、URL优化和重写
服务器上部署还可以启用TP的“REWRITE模式”,同时apache配置相应的域名对相应的入口文件,如 www.prj.com 到 index.php ,m.prj.com 到 mobile.php ,admin.prj.com 到 admin.php ,URL进一步缩写省去入口文件,如“www.myprj.com/Index/index”。
1)Apache配置,不同的域名设置不同的首页文件
![](/assets/blank.gif)
<VirtualHost *:80>DocumentRoot "D:\wamp\www\batsing"ServerName www.batsing.com DirectoryIndex index.php </VirtualHost> <VirtualHost *:80> DocumentRoot "D:\wamp\www\batsing" ServerName m.batsing.com DirectoryIndex mobile.php </VirtualHost> <VirtualHost *:80> DocumentRoot "D:\wamp\www\batsing" ServerName admin.batsing.com DirectoryIndex admin.php </VirtualHost>
![](/assets/blank.gif)
2) .htaccess文件配置(Apache专用,先开启rewrite_module)
![](/assets/blank.gif)
<IfModule mod_rewrite.c>Options +FollowSymlinksRewriteEngine On#设置用户端的重写规则,入口文件index.php,隐藏index.phpRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{HTTP_HOST} ^www.batsing.com$ [NC]RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]#设置移动端的重写规则,入口文件mobile.php,隐藏mobile.phpRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{HTTP_HOST} ^m.batsing.com$ [NC]RewriteRule ^(.*)$ mobile.php?/$1 [QSA,PT,L] #设置管理端的重写规则,入口文件admin.php,隐藏admin.phpRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{HTTP_HOST} ^admin.batsing.com$ [NC]RewriteRule ^(.*)$ admin.php?/$1 [QSA,PT,L]#404页重定向,框架外ErrorDocument 404 /notfound.html#测试,指定浏览器 重定向URL (自动从www重定向到mobile) # RewriteCond %{HTTP_HOST} ^www.batsing.com$ [NC] # RewriteCond %{HTTP_USER_AGENT} "Mobile" [NC] #含Mobile字眼的浏览器(包括微信、UC移动、QQ移动、Safari移动、小米原生) # RewriteRule ^(.*)$ http://m.batsing.com/ [R=301,NC,L] #这一段放到httpd.conf去了,不用每次都读取.htaccess文件
#注意,如果apache 与 PHP 是以fast-cgi的方式运行, #那么 RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] 需要修改为 RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] #否则会出现 No input file specified. 的错误。 </IfModule>
![](/assets/blank.gif)
3) ThinkPHP的项目公共配置文件 /Application/Common/Config/config.php 增加一行开启URL访问模式为 2,默认为模式1
'URL_MODEL' => 2, // URL访问模式,可选参数0、1、2、3
注解:设置URL模式是为了让系统生成的链接(如__APP__,{:U('xxx')} 等)不再包含index.php这一串,即使不修改thinkphp的url模式,也可以通过不带index.php的方式访问网页。
4)本地测试办法,修改hosts文件,配置相关的域名到本地
127.0.0.1 www.batsing.com 127.0.0.1 m.batsing.com 127.0.0.1 admin.batsing.com
1+2.)Nginx的配置URL重写
![](/assets/blank.gif)
server {listen 80;server_name www.batsing.com ;root "D:\wamp\www\batsing";location / {index index.php; #域名对应的首页(对应Apache的DirectoryIndex)#autoindex on;if (!-e $request_filename){ #index.php 缩写,与上面apache的.htaccess的功能一样rewrite ^/(.*)$ /index.php?/$1;}}location ~ \.php(.*)$ { #开启了pathinfo的fastcgi模式的PHPfastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_param PATH_INFO $fastcgi_path_info;fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;include fastcgi_params;} }
![](/assets/blank.gif)
上面配置中的 if 和左括号间要有空格,否则报错无法启动nginx
!注意:开启了pathinfo功能的fastcgi模式的php存在文件类型错误解析漏洞 。注意上传目录和静态资源目录(css/js)的安全
八、服务器环境和本地环境不同配置
服务上关闭调试模式,本地开启调试模式。所以服务器上只会加载 config.php ,而本地还会加载 debug.php并替代config.php中的配置项。总结所写的配置如下:
![](/assets/blank.gif)
config.php <?php return array(//'配置项'=>'配置值''DB_TYPE'=>'mysqli', // 数据库类型'DB_HOST'=>'localhost', // 服务器地址'DB_NAME'=>'dbname', // 数据库名'DB_USER'=>'dbuser1', // 用户名'DB_PWD'=>'dbpwd1', // 密码'DB_PORT'=>3306, // 端口'DB_PREFIX'=>'', // 数据库表前缀'DB_CHARSET'=>'utf8', // 数据库字符集'TMPL_TEMPLATE_SUFFIX' => '.php', //模板后缀名为php'URL_HTML_SUFFIX' => '', //伪静态success、error、redirect、U()生成的URL后缀为空'URL_MODEL' => 2, // URL访问模式,可选参数0、1、2、3'URL_CASE_INSENSITIVE' => FALSE, //调试时是false的//部署时是true会导致Linux下模板渲染文件名全部转换为小写字母而出错!!//TP3.2.3兼容处理:列名返回时区分大小写,原默认配置是全部为小写'DB_PARAMS'=>array(\PDO::ATTR_CASE => \PDO::CASE_NATURAL), );debug.php <?php //数据库配置信息 return array(//'配置项'=>'配置值''DB_USER'=>'root', // 用户名'DB_PWD'=>'localdbpwd', // 密码'URL_MODEL' => 1, // URL访问模式,默认1,本地无配置域名'SHOW_PAGE_TRACE'=>true, //开启页面Trace );
![](/assets/blank.gif)
九、手机浏览器自动从PC版跳转到移动版
参考我的这篇博文 Apache配置必配基础>>
十、一些shell脚本
1)数据库自动备份脚本 >>
2)上传代码后设置目录的可读权限;
3)清空缓存目录;
4)所有非上传目录、缓存目录、日志目录 一键加锁不可写,以及一键解锁为可写;
十一、其它一些BUG
1)success、error方法跳转不正常,比如 UserController里面的 login方法成功后跳转到 IndexController里面的 center方法,使用 $this->success('登录成功', 'Index/center'); 是会生成 Index/center ,浏览器就识别跳转到了 /User/Index/center,导致404,而不是 /Index/center 的。解决方法是改成 $this->success('登录成功', U('Index/center'));
原因是这两个方法是直接在提示页面生成 <a href="Index/center">正在跳转</a> 这样的HTML,这样则会使跳转错误。而后面一种则是生成一个完整(但不含域名)的URL。
2)调用方法时页面渲染不符合预期,像下面,本来预期 do() 方法进入if条件调用 doA() 后会渲染 doA 页面,但结果却是渲染 do 页面(没有do页面则报错)。查看源码可以发现它的渲染规则是,渲染的页面默认是跟请求URL所对应的控制器和Action的。
![](/assets/blank.gif)
<?php class IndexController {function do(){if( ... ){$this->doA();return;}else{...}}function doA(){...$this->display(); //渲染 doA 页面 }}
![](/assets/blank.gif)
3)引入的CSS和JS不会经过模板渲染。所有在CSS、JS中都无法使用 __APP__、{:U('Ctrl/method')} 等方法。CSS引用图片建议使用相对路径,如 background: url("./img/xxx.jpg");
4)统一过滤的 I() 方法用的函数 htmlspecialchars 没有转义单引号 ' ,可能会造成 XSS 漏洞,最好自己定义一个更加强大、安全的过滤函数。如:
htmlspecialchars(trim($data), ENT_QUOTES)
5)GET或POST中的参数名为m、c、a 时,都会出现路由错误,其URL模式为普通模式时这是可以理解的,但是其它的URL模式都有这样的问题,而且连POST也会这样处理,只能说是BUG了。可以修改配置如下一般能达到避免效果
//修改URL中的获取变量的名字'VAR_MODULE' => '__m__', // 模块获取变量'VAR_CONTROLLER' => '__c__', // 控制器获取变量'VAR_ACTION' => '__a__', // 操作获取变量'VAR_PATHINFO' => '__s__', // 操作获取变量
∞、静态化
利用URL重写规则,判断静态文件是否存在,存在则直接显示,否则定向到TP框架中处理;
覆盖重写TP中的display()方法,让其除了生成页面外,还生成静态页面;
需要静态化的页面在显示如用户名等通用信息时使用ajax获取;
Think PHP(TP)框架基础知识相关推荐
- Spring框架基础知识
本人博客文章网址:https://www.peretang.com/basic-knowledge-of-spring-framework/ Spring框架简介 Spring , 一个开源的框架 , ...
- Django框架基础知识汇总(有项目版)
Web框架本质## web系统概念 1. Http,无状态,短连接 2. 浏览器(socket客户端).网站(socket服务端) web框架本质 import socket def handle_r ...
- php think框架,ThinkPHP框架基础知识
ThinkPHP是一个PHP开发框架,使用面向对象的开发结构和MVC模式,简称tp框架. 1.框架是一堆代码的集合,里边有变量.函数.类.常量,里边也有许多设计模式MVC.AR数据库.单例等等,框架的 ...
- 从零开始了解thinkphp框架,tp框架基础教程
工作很长时间没有用到thinkphp框架了,差不多都要忘干净了,今天就重温一下tp框架. 首先要下载thinkphp最新版本3.2.2版本,下载地址http://www.thinkphp.cn/don ...
- laravel框架基础知识总结
一.laravel简介 laravel是一套优雅简介的PHP开发框架,受欢迎程度非常之高,功能强大,工具齐全:以下是本人在学习过程中记录的laravel比较基础的资料,权当学习笔记,请大神们多多指教 ...
- 2022年Java应届生面试之Spring框架基础知识
前言:工作的原因,最近没有及时更新相关系列.很抱歉!在复习Spring框架的同时也别忘了j2ee的相关知识理论wo~ 大家好!我是JAVA 中的Spring框架,我是一个开源的容器性质的轻量级框架. ...
- 后端 学习 前端 Vue 框架基础知识
文章目录 一.Vue 基础语法学习 1.Vue 语法指令 2.Vue 实例属性 (1)el (2)data (3)methods (4)computed 3.事件修饰符 4.按键修饰符 5.Vue实例 ...
- Spring5框架基础知识小结
文章目录 1. 链接 2. Spring概述 2.1 Sprig框架概述 2.2 入门案例 3. IOC容器 3.1 IOC和DI 3.2IOC容器在Spring中的实现 3.3举例说明IOC为什么可 ...
- Hadoop框架--基础知识
如果有天堂,天堂应该是图书馆的模样. –博尔赫斯 (不那么冷就更好了) 主要内容:Hadoop.hive.HBASE.zookeeper.MySQL.sqoop.kafka(有时间补).日志 一.什么 ...
- ThinkPhp框架基础知识
ThinkPhp是一个采用MVC框架,免费开源.快捷简单的OOP轻量级PHP框架. MVC分三个部分: Model 模型层:模型层是应用程序的核心,可以是一个实体或一种业务逻辑,在应用程序中有更好的重 ...
最新文章
- 固态硬盘与QLC闪存
- JetBrains PyCharm 2018.2.5 x64永久激活教程
- MySQL性能调优 读写分离
- 通过超图在网页中加载3dmax模型
- 关于 XIB 和 NIB
- springCloud - 第8篇 - 配置文件管理中心 - 集群模式(负载匀衡)使用
- 本地计算机上的mysql服务怎么注册,本地计算机上的mysql服务启动后中止
- 开源ckplayer 网页播放器, 跨平台(html5, mobile),flv, f4v, mp4, rtmp协议. webm, ogg, m3u8 !...
- JavaScript模拟call和apply的实现
- Django项目:CRM(客户关系管理系统)--83--73PerfectCRM实现CRM模板统一
- vue多语言插件vue-i18n
- DotNetTextBox控件添加外挂插件功能的图文教程。
- html网页设计需求分析,网页设计需求分析方法
- jQuery实现滑动门效果
- 试用版:springboot集成pageoffice实现word在线预览可编辑
- ORL、Yale等人脸数据库百度云链接
- 16秋南开计算机应用答案,南开16秋学期《计算机应用基础》在线作业.doc
- (小米系统系列四)小米/红米手机获取root根目录权限
- nslookup参数说明
- Mysql Json格式
热门文章
- 正则表达式匹配html标签
- 通过smtplib和email发送验证码到电子邮箱(Python3.7.X)
- java+switch语句+枚举,Java枚举类型在switch语句中的正确用法
- OpenGL二维纹理映射(2D textures)
- CentOS遇到Qt编译问题的解决方案(error: cannot find -lGL)
- 快速上手数据挖掘之Solr5搜索引擎高级教程
- 互联网晚报 | 7月15日 星期五 | 苹果开始试产iPhone 14;银保监会回应“停贷”事件;抖音否认屏蔽词语致谐音梗大流行...
- 「离散数学」是一门什么样的学科
- GPON介绍及华为OLT网关注册配置流程
- cobaltstrike之创建监听器与生成后门