扩展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表:


 CREATE TABLE think_session (
       session_id varchar(255) NOT NULL,
       session_expire int(11) NOT NULL,
       session_data blob,
       UNIQUE KEY `session_id` (`session_id`)
     );
(3)在配置文件中指明数据表名称:SESSION_TABLE,其值为“think_session”,即上一步创建的session数据表。


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)配置文件中添加以下配置项:


  1. 'TMPL_ENGINE_TYPE'=>'Smarty',
  2. 'TMPL_ENGINE_CONFIG'=>array(
  3. 'plugins_dir'=>'./Application/Smarty/Plugins/',
  4. ),


(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的值,若无该值,则使用默认值 lisa

    c. 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

-------------------------------------------------------------



课程学员
3班-王占健
3班-马星
3班-周钰凯
7班-霍赛赛
8班-申佳媚
201407王振儒
4班-王天雷
8班-李晓莹
8班-刘远