扩展ThinkPHP课堂笔记
----------------------------------------
类库扩展:
1. TP内置自动加载机制扩展:
(1)在ThinkPHP/Library/Think目录或Org目录下,编写自定义类;只要定义好合适的命名空间,即可实现自动加载。
(2)在ThinkPHP/Library/Vendor目录下,编写自定义类;需要在使用类之前使用 vendor ( ) 函数引入自定义类,才可以使用。
(3)在Application目录下创建的自定义类,只要定义好合适的命名空间,也可以自动加载。
2. Composer自动加载机制:
(1)在index.php入口文件中,引入Composer自动加载文件(vendor/autoload.php);注意在ThinkPHP代码之前引入;
(2)使用Composer下载所需要使用的扩展库;
(3)使用Composer类时,直接使用含命名空间的类全名即可。
-----------------------------------------
Session扩展:
1. 设置session驱动为数据库:
(1)在配置文件中修改配置项:SESSION_TYPE ,其值修改为 “Mysqli”(注意:不要修改为Db,Db类仍然使用传统的mysql_***相关函数,在php7.0以上版本不可用)。
(2)在数据库中添加think_session表:
session_id varchar(255) NOT NULL,
session_expire int(11) NOT NULL,
session_data blob,
UNIQUE KEY `session_id` (`session_id`)
);
2. 设置session过期时间:
(1)设置session配置参数:
'SESSION_OPTIONS' => array(
'expire' => 3600, // 1个小时
)
(2)设置cookie配置参数:'COOKIE_EXPIRE' => 0, // Cookie有效期,为0表示永不过期
----------------------------------------------
模板引擎扩展:
1. 模板引擎扩展的基本方法:
(1)使用Composer下载待使用的模板引擎,如 jenssegers/blade ;
(2)在 Think\Template\Driver 目录下,编写引擎使用类,该类中只有一个方法 fetch( ),表示获取模板的内容;
(3)修改配置文件配置项:'TMPL_ENGINE_TYPE'=>'自定义模板引擎类名', 即上一步所定义的类名称。
2. 在TP中使用Smarty模板:
(1)配置文件中添加以下配置项:
-
'TMPL_ENGINE_TYPE'=>'Smarty',
-
'TMPL_ENGINE_CONFIG'=>array(
-
'plugins_dir'=>'./Application/Smarty/Plugins/',
-
),
(2)在模板中使用Smarty模板即可,控制器方法同TP模板引擎的方法。
---------------------------------------------
分页类扩展:
1. 在模板视图文件中引入Bootstrap类库;
2. 在Application/目录下,新建Library目录;在Library目录,新建 Page.class.php类文件,该类继承自 Think\Page 类;
3. 在Page类中修改 show( ) 方法,实现分页链接的Bootstrap样式效果;
4. 在控制器中使用自定义的Page类即可。
1、
2、
3、
Web功能支持课堂笔记
---------------------------------------
Session支持:
1. Session基础知识:
(1)Session作用:服务器端文件,记录客户端的一些信息,方便在不同HTTP请求之间共享数据。
(2)Session使用流程:
a. 开启会话:session_start( )
b. 设置session:$_SESSION['name'] = '***';
c. 判断session是否存在:
if (isset($_SESSION['name']) && !empty($_SESSION['name'])) { // session信息存在 }d. 销毁session:$_SESSION['name'] = null; session_destroy();
(3)Session的存在 机制:
a. session默认存储在服务器端文件中,通过客户端cookie值(session_id)标识该文件
b. 很多种情况下,需要把session信息存储在数据库中(如购物车信息、用户设置信息等)
2. ThinkPHP中使用Session:
(1)session初始化设置:session( array( 设置参数 ) );
a. id参数:session_id的值
b. name:session_name的值
c. path:session_save_path的值
d. expire:session.gc_maxlifetime设置值(session过期时间)
e. type:session存储方式,支持驱动扩展,默认为服务器端文件存储
(2)session赋值:session('name', 'value');
(3)获取session值:
a. 获取单个session值:$value = session('name');
b. 获取所有session数组:$values = session( );
(4)删除session:
a. 删除单个session:session('name', null);
b. session(null);
(5)session判断是否存在:session('?name')
----------------------------------------------------------------------------
数据分页的支持:
1. 数据分页工作原理:
(1)SQL查询语句:select * from news limit 0, 10;
(2)转化:
a. 第1页:limit 0, 10
b. 第2页:limit 10, 10
c. 第3页:limit 20, 10
d. ……
n. 第p页:limit (p-1)*10, 10
(3)PHP代码实现:
a. 当前分页码:$page = $_GET['page'];
b. 每一页显示的个数:$pageSize = 10;
c. i当前页记录的开始下标:$offset = ($page - 1) * $pageSize;
c. SQL语句:$sql = "select * from news limit {$offset}, {$pageSize}";
2. ThinkPHP中分页查询的实现:
(1)使用Page类和limit方法实现:
// 1. 创建数据表操作对象(以news数据表为例) $db = M('news'); // 2. 获取当前表中记录总数 $count = $db->count( ); // 3. 定义每一页显示的记录个数 $pageSize = 10; // 4. 创建分页类对象 $Page = new \Think\Page($count, $pageSize); // 5. 设置分页链接样式 $Page->setConfig( ); // 6. 获取分页链接 $show = $Page->show( ); // 7. 获取当前页数据 $list = $db->limit( $Page->firstRow . ', ' . $Page->listRows ) -> select( ); // 8. 把结果赋值给视图模板 $this->assign( 'pages', $show); $this->assign('list', $lisg);
(2)分页样式的定制:通过分页类对象的 setConfig( ) 方法定义分页样式。
---------------------------------------------------------------------------
验证码的支持:
1. 验证码使用流程:
(1)在控制器类中定义生成验证码的方法
a. 该方法必须是 public 方法(需要外部访问)
b. 该方法只能输出验证码图片,不能包含其它任何内容(不能有layout视图,不能有文字信息等)
(2)在HTML表使用<img src="验证码图片地址" /> 显示验证码(验证码图片地址,即为上一步所定义的控制器方法)
(3)表单数据提交后,校验验证码的有效性
2. 生成验证码:
(1)配置验证码参数:$config = array ( 参数列表 );
(2)创建验证码类对象:$Verify = new \Think\Verify( $config );
(3)生成验证码:$Verify->entry( $id );
a. 该行代码即为生成验证码图片,其后不允许再有任何代码
b. 生成验证码时建议传入 $id 参数(字符串参数),以区分不同的验证码
3. 验证码校验:
(1)创建验证码对象:$Verify = new \Think\Verify( );
(2)校验验证码的有效性:$Verify->check( 表单传递的验证码值, $id )
a. $id即为生成验证码图片时传递的字符串参数
b. 若校验成功,返回true;否则返回false
----------------------------------------------------------------
文件上传:
1. 文件上传基础知识:
(1)HTML表单基础:
a. method = "post"
b. enctype="multipart/form-data"
(2)限制文件的上传大小:
a. php.ini配置文件中限定:upload_max_filesize 和 memory_limit
b. 表单的隐藏域限定:<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
(3)文件上传后的处理:
a. 可以使用 $_FILES[ ] 获取上传的文件的基本信息
b. 可以使用move_uploaded_file( )移动文件(从临时文件目录,移动到自定义目录)
2. ThinkPHP中上传文件的支持:
(1)定义文件上传参数:$config = array( 参数列表 );
a. maxSize:文件上传的最大文件大小(以字节为单位,0表示不限大小)
b. rootPath:文件上传保存的根路径
c. savePath:(相对于根路径)文件的保存路径
d. saveName:文件上传后的保存名称,若设置为空字符串,则使用原始文件名称
e. exts:允许上传的文件后缀,若为空字符串,表示不限制后缀
(2)创建文件上传类:$upload = new \Think\Upload($config);
(3)处理文件上传:$info = $upload->upload( );
a. 若文件上传成功,$info为二维数组形式;若文件上传失败,$info为false
b. $info中每一个元素为一关联数组,记录了文件上传后的基本信息:
b.1. key:文件的原始表单名称(name属性值)
b.2. savepath: 文件的保存路径
b.3. savename: 文件的保存名称
给 #ThinkPHP框架开发# 指派了新任务。
task6:Web功能支持
1. 已知有以下HTML表单,接收用户上传的数据并插入到数据表中(数据表字段名即为表单控件的name属性值),请编写/admin/news/store方法核心代码。
<form action="/admin/news/store" method="po...
给 #ThinkPHP框架开发# 指派了新任务。
task5:视图模板的基本使用
1. 已知控制器从数据库中获取的新闻记录数据是二维数组形式,通过$this->assign( 'newss', 二维数组); 赋值给视图变量,请编写视图核心代码循环输出该二维数组到表格中,表格表头信息如下图所示。其中:“序号”为从1开始的编号(注意,不是id值)...
视图模板部分课堂笔记
-----------------------------------------------------
视图文件与控制器动作:
1. 视图文件路径:当前模块/view/控制器名/动作名.html
2. 视图文件配置选项:
(1)'TMPL_TEMPLATE_SUFFIX' => '.html', // 默认模板文件后缀
(2)'TMPL_L_DELIM' => '{', // 模板引擎普通标签开始标记
'TMPL_R_DELIM' => '}', // 模板引擎普通标签结束标记
(3)'TMPL_LAYOUT_ITEM' => '{__CONTENT__}', // 布局模板的内容替换标识
'LAYOUT_ON' => true, // 是否启用布局
'LAYOUT_NAME' => 'layout', // 当前布局名称 默认为layout
3. 控制器中显示视图文件的方法:
(1)$this->display( ):加载默认视图文件
(2)$this->show( ):输出文本字符串
(3)$this->fetch( ):获取并返回模板的内容(不输出)
4. T()函数:返回模板的地址
(1)模块/控制器/动作 语法规则:T('模块@控制器/动作)
(2)使用T()函数:$this->display( T('admin@index/view') ); ,显示Admin模块Index控制器Index动作所对应的视图文件
-----------------------------------------------------------
视图基本使用方法:
1. 控制器中为视图文件赋值:
(1)$this->assign( )方法:
a. 普通变量:$this->assign('name', '张三');
b. 数组变量:$this->assign('user', array('name' => '张三', 'age' => 18));
c. 二维数组变量:$this->assign('users', array( array(), array() );
(2)魔术方法形式:$this->name = '张三';
2. 视图文件中输出变量值:
(1)输出普通变量:name: {$name}
(2)输出数组元素:name: {$user.name} 或 name: {$user['name']}
3. 输出系统变量和常量:
(1)输出系统变量:
a. session变量:{$Think.session.name}
b. get参数:{$Think.get.id}
(2)输出系统常量:
a. 当前模块名称:{$Think.MODULE_NAME}
b. 当前控制器名称:{$Think.CONTROLLER_NAME}
c. 当前动作名称:{$Think.ACTION_NAME}
(3)输出配置文件中的配置项:{$Think.config.DB_HOST}
(4)输出语言变量:{$Think.lang.previous}
4. 指定默认值输出:{$name|default="默认值"}
5. 输出变量时使用函数过滤:
(1)无参函数:{$pswd|md5}
(2)有参函数:
a. 当前变量为第1个参数:同无参函数的使用,或使用 ### 表示当前变量;{$pswd|md5}、{$pswd|md5=###}、{title|substr=###, 0, 3}
b. 当前变量不是第1个参数:{addtime|date='Y-m-d', ###}
(3)同时使用多个函数:
a. 基本形式:{$pswd|md5|ucfirst},相当于 ucfirst(md5($pswd))
b. 改写形式:{:ucfirst(md5($pswd))}
6. 几个目录路径:
(1)__ROOT__: 会替换成当前网站的地址(不含域名)
(2) __APP__: 会替换成当前应用的URL地址 (不含域名)
(3)__MODULE__:会替换成当前模块的URL地址 (不含域名)
(4)__CONTROLLER__(__或者__URL__ 兼容考虑): 会替换成当前控制器的URL地址(不含域名)
(5)__ACTION__:会替换成当前操作的URL地址 (不含域名)
(6)__SELF__: 会替换成当前的页面URL
(7)__PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/
------------------------------------------------------------------------------------------------------------------
Layout二步视图:
1. 工作原理:首先解析Layout文件,当遇到 占们符(__CONTENT__)时,自动替换为当前动作所对应的视图文件
2. 配置项:
'TMPL_LAYOUT_ITEM' => '{__CONTENT__}', // 布局模板的内容替换标识
'LAYOUT_ON' => true, // 是否启用布局
'LAYOUT_NAME' => 'layout', // 当前布局名称 默认为layout
数据库基本操作部分课堂笔记
----------------------------------------------------------------
数据库操作基本流程:
1. 在配置文件中配置数据库连接信息
(1)一般只需要在 Application/Common/Conf/config.php 文件中进行数据库配置
(2)模块目录下的配置文件,一般不需要包含内容,除非有特殊需要(例如,当前模块要连接其它数据库,这种情况才需要在当前模块配置文件下写入内容)
2. 在控制器动作方法中,创建数据库操作对象
(1)直接使用内置Model类:$db = new Think\Model( );
(2)使用M()辅助函数:$db = M( );
(3)在创建数据库操作对象时,可以传入参数。若传入参数(数据表名),表示该数据库操作仅对当前数据表有效;若不传入参数,则在使用ORM方式操作数据库时,需要显式调用 table( )方法,指明待操作的数据表名称。
3. 操作数据库:
(1)原生SQL查询:query( )方法执行select查询语句,返回结果集的二维数组形式;excute( )方法执行insert、update、delete语句,返回SQL语句的执行状态(若操作成功,返回主键字段值或影响的结果集个数;若操作失败,返回false)。
(2)ORM方式执行CURD操作
(3)查询最后一条SQL语句:getLastSql( )方法,返回上一条SQL语句,用于查找SQL错误。
---------------------------------------------------------------
ORM方式执行CURD操作:
1. 查询操作:
(1)select( )方法:返回(指定条件)结果集的二维数组形式
a. 若不传入参数:返回当前数据表中的所有记录
b. 若传入字符串(id值组成):表示获取当前id值对应的所有记录
c. 可以在select( )获取记录之前,给出查询条件(具体查询条件查看后续内容)
(2)find( )方法:返回(指定条件)结果集的关联数组形式(一条记录)
a. 若不传入参数:返回当前表中的第1条记录
b. 若传入数字参数:表示返回当前主键id对应的记录信息
c. 可以在find( )获取记录之前,给出查询条件
(3)getField( )方法:获取某个(些)字段的值
(4)动态查询:通过数据表中的字段名查询记录,返回结果为二维数组形式
a. 通过主键id查询:$db->getById( )
b. 通过字段name查询:$db->getByName( )
2. 创建并插入数据:
(1)获得POST表单数据:$data = I('post.')
(2)使用create( )创建待插入数据:$data = $db->create( ); ,默认会从 POST 表单中获取数据
(3)直接创建数据:$data = array( );
(4)写入数据到数据库中:$db->add($data);,若插入操作成功,返回新插入记录的主键id值;若插入失败,返回false
(5)插入多条数据:$db->addAll( 二维数组记录 );
3. 修改数据:
(1)准备待更新的数据记录:$data = I('post.');,待更新的数据需要提供主键id字段,可以借助表单的隐藏域传递参数
(2)更新数据:$db->save( $data );,此形式需要$data数组包含数据表主键id字段,否则更新失败
(3)可以在更新数据save之前,给出更新条件where
4. 删除数据:
(1)按照主键字段删除数据:$db->delete( 主键值 );
(2)指定条件删除数据:$db->where( 删除条件 )->delete( )
(3)删除所有记录:$db->where(1)->delete();
5. 构造条件(查询、更新、删除):
(1) 原生SQL条件:$db->where(' id > 3')
(2)构造ORM方式条件:$condition = array( );
a. 相同关系:$condition['name'] = '张三';
b. 其它比较关系:
$condition['name'] = array('neq', '张三');
$condition['id'] = array('gt', 3);
$condition['id'] = array('betwwen', '1, 8');
$condition['name'] = array('like', '%PHP%');
c. 不同字段之间的逻辑关系(并且、或者):$condition['_login'] = "and";
6. 链式查询:
(1)limit:限制查询个数,$db->where( )->limit(3)->select( );
(2)order:限制查询结果集的排序方式,$db->where( )->order('time desc, name asc')->select( );
(3)其它条件:查看参考手册
给 #ThinkPHP框架开发# 指派了新任务。
task4:数据库基本操作
1. 在news表基础上,使用内置模型类(Think\Model)给出下列查询的核心代码截图:
(1)查找author_id = 1,或者 cat_id = 2的新闻记录;
(2)查找id > 3 并且 id < 10的记录,要求按...
给 #ThinkPHP框架开发# 指派了新任务。
task3:控制器和动作
1. 建立task3应用程序,要求该应用程序为单模块应用程序,同时设置默认模块为Home模块,默认控制器为 Default控制器,默认动作为 index。请给出配置文件核心代码截图。
2. 定义新闻数据表 news,其中id为主键,新闻包括(标题title...
模块、控制器和动作:
1. 模块包括控制器、 视图和模型等部分组成。
2. 控制器的定义:
(1)控制器类文件:控制器名.class.php,位于当前模块的 Controller 目录下。
(2)控制器类:
a. 类名: 控制器名 + Controller
b. 控制器类可以继承 Think\Controller 类
c. 命名空间: namespace 模块名\Controller;
(3)动作方法:一般定义为public类型,非public类型不能被URL访问
3. 模块、控制器和动作相关配置项:自行查看参考手册
-------------------------------------------------
控制器基本操作:
1. 初始化动作:_initialize( ),在控制类中定义 _initialize( )方法,控制器其他动作被调用时,将会初始化该_initialize( )方法;可以在该初始化方法中执行用户校验、数据过滤、权限认证等功能,控制器的每个动作方法都会首先执行初始化方法。
2. 前置和后置动作:(以index动作为例)
(1)前置动作:_before_index(),执行index( )方法之前会首先执行该方法
(2)后置动作:_after_index(),执行index()方法之后会继续执行该方法
3. 获取请求参数:
(1)可以使用 $_GET、$_POST、$_PUT等超全局数组获取请求参数
(2)使用 I()辅助函数获取请求参数
a. I('get.id'):获取GET参数id的值
b. I(‘post.name', 'lisa'):获取POST参数name的值,若无该值,则使用默认值 lisac. I('post.pswd', '', 'md5'):获取POST参数pswd的值,已经使用md5函数加密处理过
d. I('id'):获取id的值,无论是GET请求或POST请求
e. I('get.'):获取$_GET[ ] 超全局数组的值,返回关联数组形式
4. 转发、重定向和跳转
(1)转发和重定向的区别:
a. 转发(forward):浏览器发送请求给服务器(请求test1.php页面),服务器解析请求,发现需要“转发”给test.php页面,服务器直接转发该请求到test2.php页面;浏览器地址栏不变,将加载test2.php页面内容。
b. 重定向(redirect):浏览器发送请求给服务器(请求test1.php页面),服务器要求浏览器重定向该请求到test2.php页面;浏览器再次发送请求到test2.php页面,故浏览器地址栏改变。
c. 区别:转发只发送一次请求,地址栏不变;重定向会发送两次请求,地址栏发生改变。
(2)ThinkPHP中不存在转发机制,所有跳转或重定向操作均属于理论上的“重定向”。
(3)TP中跳转(jump)的实现:借助JavaScript跳转或回退实现
a. $this->success(提示文本, 跳转地址, 跳转倒计时 ):跳转到下一个路由URL地址。
b. $this->error(提示文本):返回到上一页面。
(4)TP中重定向(redirect)的实现:借助PHP内置header( )函数实现
a. $this->redirect(重定向路由地址, 传递的参数, 重定向倒计时, 提示文本):重定向路由地址,需要遵循 URL路由规则定义给出。
b. redirect(重定向URL, 重定向倒计时, 提示文本):重定向URL,即为URL形式(模块/控制器/动作)。
(5)TP中跳转和重定向的区别:跳转会产生倒计时效果,而重定向没有。
5. 显示视图:
(1)显示当前动作所对应的视图文件:$this->display( );
a. 当前动作对应的视图文件路径:当前模块/View/当前控制器/当前动作 . html 。
b. 视图文件的扩展名,可以通过配置项 'TMPL_TEMPLATE_SUFFIX' 来设置(默认为 .html)。
(2)显示其它视图文件:
a. 当前控制器下其它视图:$this->display('add');,当前模块下,当前控制器,add动作所对应的默认视图。
b. 其它控制器下的视图:$this->display('home/view');,当前模块下,Home模块下,view动作所对应的默认视图。
c. 其它模块下视图:$this->display('admin@home/view');,Admin模块下,Home模块下,view动作所对应的默认视图。
(3)为视图变量赋值:
a. $this->assign( 键, 值):设置视图
b. $this->键 = 值
6. 请求类型的判断:
(1)IS_GET、IS_POST、IS_PUT、IS_DELETE、IS_AJAX:判断当前请求类型是否为GET/POST/PUT/DELETE或Ajax请求;若成立,即返回true。
(2)REQUEST_METHOD:获取当前提交的请求类型。
7. Ajax返回:$this->ajaxReturn( )方法,支持JSON、JSONP、XML和EVAL四种方式给客户端传输数据。
8. 伪静态支持:在URL后添加 .html 后缀,通过配置项 'URL_HTML_SUFFIX' 设置后缀名。
9. 路由函数:U(),生成的URL自动包含 伪静态后缀。
给 #ThinkPHP框架开发# 指派了新任务。
task2:ThinkPHP的基本使用
1. 建立应用程序task2,包括两个模块(Index模块和Admin模块),每个模块下分别有一个控制器类IndexController,给出项目目录结构截图(只需要Application目录截图即可)。
2. 在应用程序task2的基础上,使用Compo...
TP默认路由解析规则:
把URL拆分成 模块、控制器和动作三部分,动作之后的URL部分,将会被当作 URL GET参数(查询字符串)
----------------------------------------
URL Rewrite模式的支持:
1. 使用PHP内置服务器,在应用程序根目录下,打开命令行工具,执行 php -S 127.0.0.1:88 (88为端口号,任意指定即可),即可在浏览器通过 http://127.0.0.1:88 访问当前应用程序
2. 配置虚拟主机:
(1)开启Apache服务器URL重写功能支持
(2)制定URL重写规则(TP框架已经提供)
(3)配置虚拟主机:
a. 设置监听端口号
b. 设置虚拟目录
-----------------------------------------
URL相关配置:
1. URL四种模式:普通模式、PathInfo模式、Rewrite模式 和 兼容模式,通过 URL_MODEL 配置项配置即可
2. 在应用程序中读取配置项使用 C('配置项名称')方式
3. 配置文件分为三类:
(1)TP框架默认配置文件:convention.php
(2)应用程序配置文件:Application/common/conf/config.php
(3)各个模块的配置文件:Application/模块名/conf/config.php
4. TP配置文件加载顺序:优先加载当前模块的配置项;若当前模块无指定配置项,则加载Application配置项;若Application无指定配置项,则加载TP默认配置项
--------------------------------------
创建新模块的方法:
1. 在Application目录中新建一个子目录(如Admin)
2. 在Admin目录中,创建 Common目录、Conf目录、Controller目录、Model目录和View目录(注意首字母大写)
3. 创建控制器文件时,注意给控制器类指定命名空间(Admin\Controller),模型类类似
-----------------------------------
自定义路由规则:
1. 开启路由规则:URL_ROUTE_ON,设置为true
2. 制定路由规则:在 URL_ROUTE_RULES 属性中进行定义
3. 注意问题:
(1)路由URL名称,不要以 '/'开头,如 'msg/list' 而不是 '/msg/list'
(2)路由URL对应的处理方式可以是 控制器动作,可以是 闭包函数
(3)控制器动作 定义方式 ' 模块/控制器/动作 '
4. 动态路由:动态路由参数可以直接绑定在闭包函数的参数列表中,可以绑定在控制器动作方法的参数列表中;也可以使用 $_GET[ ] 获取GET参数
http://10.7.1.98/201407lantianxu/php2/task/
http://10.7.1.98/201407lantianxu/php2/task1b/
http://10.7.1.98/201407lantianxu/php2/task1c/
Composer创建应用程序的命令:
composer create-project 程序包名 程序目录名
----------------------------------------------------------------
Composer更新自动加载文件命令:(当 config.json 的自动加载有变化时,需要更新该文件)
composer dump-autoload
-----------------------------------------------------------
ThinkPHP目录结构剖析:
1. Application目录:应用程序目录,用户自定义的模块、控制器、模型、视图文件目录
------ Common目录:所有模块都适用的配置文件目录和公有函数目录
------ Home目录:Home模块目录
------ Common目录:当前模块可用的辅助函数目录
------ Conf目录:当前模块可用的配置文件目录
------ Controller目录:控制器目录
------ Model目录:模型目录
------ View目录:视图文件目录
------ Runtime目录:运行时目录(运行时生成的缓存文件、临时文件、日志文件等)
2. ThinkPHP目录:TP源代码文件目录
3. Public目录:前端文件存储目录(图片目录,CSS目录,JavaScript目录)
4. vendor目录:Composer依赖库目录
5. index.php文件:应用程序入口文件
6. composer.json文件:Composer配置文件(依赖管理,自动加载)
7. .htaccess文件:Apache目录级别配置文件(不需要重启Apache服务器,配置即刻生效;配置URL重写规则)
给 #ThinkPHP框架开发# 指派了新任务。
task1:Composer的基本使用
1. 已知有下图所示项目目录结构,现在要使用Composer自动加载机制,自动加载 ThinkPHP目录和Application目录下的类,请使用 psr-4 自动加载方式,给出composer.json文件的核心内容。(Application目录下类文件基准命名空间...
Composer的主要作用:
1. PHP的依赖管理工具
2. PHP类自动加载机制的支持。
-----------------------------------------
Composer安装及使用:
1. 安装时,注意PHP要打开 openssl 扩展
2. 安装时,要选择正确的php.exe路径(当前运行的php.exe)
3. 配置中国镜像方法:在命令行中输入命令“ composer config -g repo.packagist composer https://packagist.phpcomposer.com” 即可。
4. Composer全局配置项:composer config -l -g
-------------------------------------------------------
MVC、MVP和MVVM区别:
1. MVC是客户端的前端设计模式,Web应用程序没有真正意义上的 MVC框架。
2. MVP 中 视图和模型没有直接关系,由 Presenter 连接。
3. MVVM一般使用在前端JS框架中(数据双向绑定机制)。
-----------------------------------------------------------------------
命名空间:
1. 作用:防止命名冲突
2. 类完整名称:命名空间名 + 类名(用 \ 连接)
---------------------------------------------------------------------
类的自动加载机制:
1. 使用require或include加载类文件。
2. 使用 __autoload( ) 函数加载类。
3. 使用 spl_autoload_register( ) 自动加载类。
4. 使用 Composer 自动加载机制。
--------------------------------------------------------------------
Composer类自动加载机制:
1. psr-4加载方式:把基命名空间和某个目录相关联,子命名空间和子目录结构相关联。
2. classmap方法:给定目录下的类,将会自动加载。
3. files方法:给定文件中的类,将会自动加载。
------------------------------------------------------------------
路由(前端控制器):
1. 作用:分解HTTP请求URL,分派给特定的控制器动作或闭包函数处理。
2. 路由库:bramus/router
-------------------------------------------------------------