这是我之前学习ThinkPHP框架记录的一些笔记,在此做个保存也做个分享!
一、ThinkPHP下MVC结构和配置
1.MVC开发模式
1)M:model类
2)V:view前台模板
3)C:control控制器
2.URL模式
1)普通模式(0模式)
http://localhost/项目文件地址/index.php?m=Index&a=index
2)PATHINFO模式(1模式)
http://localhost/项目文件地址/index.php/Index/index
3)REWRITE模式(2模式)
http://localhost/项目文件地址/Index/index/id/5
4)兼容模式(3模式)
http://localhost/项目文件地址/index.php?s=/Index/index
*********1)入口文件 2)Index模板类文件 IndexAction.class.php 3)index类方法
3.配置:
1)全局配置文件:www\testWebsite\ThinkPHP\Conf\convention.php
/* 数据库设置 */
'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => 'localhost', // 服务器地址
'DB_NAME' => '', // 数据库名
'DB_USER' => 'root', // 用户名
'DB_PWD' => '', // 密码
'DB_PORT' => '', // 端口s
'DB_PREFIX' => 'think_', // 数据库表前缀
2)局部配置文件:www\testWebsite\Home\Conf\config.php
'DB_NAME' => 'mytp2', // 数据库名
4.获取配置文件中的选项
用echo C('DB_NAME');公共函数C(); (实例化模型:M())
5.加载公共资源文件下的内容(比如js,css)的路径:
1)直接写绝对路径没有问题,能正常访问,但是相对路径的话TP会干预的
2)模板替换,用TP自定义的“__PUBLIC__”:实际情况下“__PUBLIC__”会被替换成当前网站的公共目录,通常是 /Public/,例如:href="__PUBLIC__/CSS/login.css"
二、ThinkPHP中函数和类库(控制器)
1.函数 (在一个大文件中快速寻找函数和方法:sublime中快捷键ctrl+r)
1)全局函数文件:ThinkPHP\Common\common.php
2)应用函数文件:Home\Common\common.php
2.控制器:跨模块调用
1)A()
A方法还支持跨分组或者跨项目调用,默认情况下是调用当前项目下面的模块。
跨项目调用的格式是:
A('[项目名://][分组名/]模块名')
例如:
A('User') //表示调用当前项目的User模块
A('Admin://User') //表示调用Admin项目的User模块
A('Admin/User') //表示调用Admin分组的User模块
A('Admin://Tool/User') //表示调用Admin项目Tool分组的User模块
2) R()
R方法表示调用一个模块的某个操作方法,调用格式是:
R('[项目名://][分组名/]模块名/操作名',array('参数1','参数2'…))
例如:
R('User/info') //表示调用当前项目的User模块的info操作方法
R('Admin/User/info') //表示调用Admin分组的User模块的info操作方法
R('Admin://Tool/User/info') //表示调用Admin项目Tool分组的User模块的info操作方法
三、ThinkPHP路由和重写
1.URL重写
通常的URL里面含有index.php,为了达到更好的SEO效果可能需要去掉URL里面的index.php ,通过URL重写的方式可以达到这种效果,通常需要服务器开启URL_REWRITE模块才能支持。
下面是Apache的配置过程,可以参考下:
1)、httpd.conf配置文件中加载了mod_rewrite.so模块
2)、AllowOverride None 将None改为 All
3)、确保URL_MODEL设置为2(不重要)
4)、把下面的内容保存为.htaccess文件放到入口文件的同级目录下
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
5).重启Apache:
原来的 http://serverName/index.php/Blog/read/id/1
就可以通过访问 http://serverName/Blog/read/id/1
简化了URL地址
2.路由
ThinkPHP支持URL路由功能,要启用路由功能,需要设置URL_ROUTER_ON 参数为true。开启路由功能后,并且配置URL_ROUTE_RULES参数后,系统会自动进行路由检测,如果在路由定义里面找到和当前URL匹配的路由名称,就会进行路由解析和重定向。
'URL_ROUTER_ON' => true, //开启路由
'URL_ROUTE_RULES' => array(
//定义路由规则
'news/:year/:month/:day' => array('News/archive', 'status=1'),
'news/:id' => 'Index/index',
),
3.URL生成
使用U()方法,生成统一的url路径便于后期维护和管理
1)U('index') ;假设当前模块是UserAction
/项目文件名/index.php/User/index
2)U('Shop/index');
/项目文件名/index.php/Shop/index
3)U('Shop/delete','id=5&name=user1');
/项目文件名/index.php/Shop/delete/id/5/name/user1
4)U('Shop/edit',array('id'=>'5','name'=>'user1'));
/项目文件名/index.php/Shop/edit/id/5/name/user1
*******
配合convention.php文件使用:
'URL_MODEL' => 1,
'URL_HTML_SUFFIX' => '', // URL伪静态后缀设置
四、ThinkPHP页面跳转和重定向
1.页面跳转
$this->success('新增成功', 'User/list');
2.重定向
$this->redirect('New/category', array('cate_id' => 2), 5, '页面跳转中...');
五、ThinkPHP模板替换和Ajax数据交互
1.模板替换内容
1)__ROOT__:会替换成当前网站的地址(不含域名)
/testWebsite
2)__APP__:会替换成当前项目的URL地址 (不含域名)
/testWebsite/index.php
3)__URL__:会替换成当前模块的URL地址(不含域名)
/testWebsite/index.php/Index
4)__ACTION__:会替换成当前操作的URL地址 (不含域名)
/testWebsite/index.php/Index/index
5)__SELF__:会替换成当前的页面URL
/testWebsite/index.php/Index/index/id/5
6)__PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/
/testWebsite/Public
7)../Public:会被替换成当前项目的公共模板目录
通常是 /项目目录/Tpl/当前主题/Public/
/testWebsite/Home/Tpl/
2.Ajax数据交互
1)如何在php中将多个数据带给js?
php:可以用json_encode()方法将数组类型转化为json字符串;
js:利用get方法的第四个参数接收json对象,
$.get('',{},function(){},'json');
2)如何得到一个大页面内容
首先js发起ajax;
php中的方法将数据分配给自己的模板;
方法和模板将混编结果给js