<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>模型 &#8211; 个人随笔</title>
	<atom:link href="/label/%E6%A8%A1%E5%9E%8B/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description></description>
	<lastBuildDate>Sat, 09 Jun 2018 01:14:00 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.1</generator>

<image>
	<url>/wp-content/uploads/2022/01/cropped-截屏2022-01-01-18.57.09-32x32.png</url>
	<title>模型 &#8211; 个人随笔</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>CI框架 安装、路由、模型、视图、控制器、实现用户CURD、跳转函数封装、分页插件、源码分析</title>
		<link>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6501.html</link>
					<comments>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6501.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 17:29:40 +0000</pubDate>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[后台框架]]></category>
		<category><![CDATA[分页插件]]></category>
		<category><![CDATA[安装]]></category>
		<category><![CDATA[实现用户CURD]]></category>
		<category><![CDATA[控制器]]></category>
		<category><![CDATA[模型]]></category>
		<category><![CDATA[源码分析]]></category>
		<category><![CDATA[视图]]></category>
		<category><![CDATA[路由]]></category>
		<category><![CDATA[跳转函数封装]]></category>
		<guid isPermaLink="false">/?p=6501</guid>

					<description><![CDATA[CI框架 angularJs框架（运行一些设计模式、依赖注入）、laravel（依赖注入）。学习思想上的东西。 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>CI框架</h1>
<p>angularJs框架（运行一些设计模式、依赖注入）、laravel（依赖注入）。学习思想上的东西。</p>
<p>今天CI框架会带大家看源码（前题声明难度有点大）。</p>
<h2>①-框架简介</h2>
<p>CI框架，是一个非常小巧和轻量级的框架，也是最容易入门的框架（里面有一个按需加载的概念，CI框架很多东西都不会自动的载入，当你需要的时候，需要自己去手工的载入，所以它的性能在众多框架中算是比较快的一个（php框架），至少比laravel快了很多。在众多框架中laravel应该是算得上是最慢的。</p>
<p>目前比较流行的框架有CI、laravel；同时还有一些性能为主的C语言框架，例如yaf（c语言框架、使用C语言为php编写了一个扩展windows php_yaf.dll文件 mbstring.dll Linux php_yaf.so&#8212;php.ini）、phaclon（这个框架是国外开发的，性能完全不必yaf差，普及度不及国人开发的yaf）等。</p>
<p>框架就是php自带的，直接可以使用，yaf框架是不提供模型的。</p>
<p>class UserController extends Yaf_Controller{</p>
<p>}</p>
<p><img fetchpriority="high" decoding="async" width="819" height="290" class="wp-image-6746" src="/wp-content/uploads/2018/05/word-image-6150.png" srcset="/wp-content/uploads/2018/05/word-image-6150.png 819w, /wp-content/uploads/2018/05/word-image-6150-300x106.png 300w, /wp-content/uploads/2018/05/word-image-6150-768x272.png 768w" sizes="(max-width: 819px) 100vw, 819px" /></p>
<p>面对过程、面向对象、面向切面？</p>
<p>答：这三种思想没有哪一个是最好，只有合适自己的业务就是最优的。</p>
<p>问题：为什么laravel这么慢，还有那么多企业在使用？</p>
<p>答：谈一下个人的理解。</p>
<ol>
<li>属于跟风比较多。（很多企业压根就不了解这个框架，只是看到市场现状很多人在使用，那么觉得也要跟上潮流、不得不使用）鸭子现象（从众）</li>
<li>这个框架应用了很多的设计模式，便于开发和维护（并且还要知道laravel产品就是syfomy框架的儿子）</li>
<li>非常明显的一个特点，重路由设计。每一个控制器的方法的访问都必须要设计一个URL地址（路由规则）。index.php/user/add &#8212;&#8212;-&gt; goods/lst 设置在laravel里面可以不存在控制器、也可以不存在模型，视图也可以不存在，但是路由必须存在（可以把所有的业务逻辑放在路由里面完成）。主要是现在web项目相关的项目更倾向于前后端相分离（API接口&#8212;》URL地址&#8212;》路由规则）。</li>
<li>目前框架使用composer的管理工具，可以把互联网上所有php好的工具类库全部整合在一起。（composer理解成node的npm或者Linux的yum工具、前端的bower） composer install upload</li>
<li>并且laravel框架是完全的面向对象的框架，并且只有面向对象的编程思想才可以更好的和现实社会形成联系。（面向对象里面的思想可以和一物一世界完全对应）（面向过程、面向对象、面向切面【钩子函数的思想】&#8230;..）</li>
</ol>
<p>TP里面钩子函数：只需要用户定义在特定的位置，不需要手工的执行，框架会在特定的时间执行这个钩子函数，对数据进行处理。（AOP就是面向切面编程的缩写）</p>
<h2>②-CI框架简介</h2>
<ol>
<li>什么CI框架？</li>
</ol>
<p>答：是一个外国人开发的小巧的框架。目前存在两个主流分支版本，一个是3.x系列，一个是2.x系列。本次课程学习是2.x系列，企业基本都是选择这个版本。（LTS:长时间维护，3年左右的维护期）</p>
<p><img decoding="async" width="1188" height="337" class="wp-image-6747" src="/wp-content/uploads/2018/05/word-image-6151.png" srcset="/wp-content/uploads/2018/05/word-image-6151.png 1188w, /wp-content/uploads/2018/05/word-image-6151-300x85.png 300w, /wp-content/uploads/2018/05/word-image-6151-768x218.png 768w, /wp-content/uploads/2018/05/word-image-6151-1024x290.png 1024w" sizes="(max-width: 1188px) 100vw, 1188px" /></p>
<h2>③-CI框架入门使用</h2>
<p>框架资料</p>
<p><img decoding="async" width="849" height="591" class="wp-image-6748" src="/wp-content/uploads/2018/05/word-image-6152.png" srcset="/wp-content/uploads/2018/05/word-image-6152.png 849w, /wp-content/uploads/2018/05/word-image-6152-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6152-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<ol>
<li>在虚拟主机目录解压对应的框架</li>
</ol>
<p>整体目录结构</p>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6749" src="/wp-content/uploads/2018/05/word-image-6153.png" srcset="/wp-content/uploads/2018/05/word-image-6153.png 849w, /wp-content/uploads/2018/05/word-image-6153-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6153-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<p>分析核心代码目录</p>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6750" src="/wp-content/uploads/2018/05/word-image-6154.png" srcset="/wp-content/uploads/2018/05/word-image-6154.png 849w, /wp-content/uploads/2018/05/word-image-6154-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6154-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /> <img loading="lazy" decoding="async" width="311" height="223" class="wp-image-6751" src="/wp-content/uploads/2018/05/word-image-6155.png" srcset="/wp-content/uploads/2018/05/word-image-6155.png 311w, /wp-content/uploads/2018/05/word-image-6155-300x215.png 300w" sizes="(max-width: 311px) 100vw, 311px" /> <img loading="lazy" decoding="async" width="362" height="321" class="wp-image-6752" src="/wp-content/uploads/2018/05/word-image-6156.png" srcset="/wp-content/uploads/2018/05/word-image-6156.png 362w, /wp-content/uploads/2018/05/word-image-6156-300x266.png 300w" sizes="(max-width: 362px) 100vw, 362px" /></p>
<p>application目录</p>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6753" src="/wp-content/uploads/2018/05/word-image-6157.png" srcset="/wp-content/uploads/2018/05/word-image-6157.png 849w, /wp-content/uploads/2018/05/word-image-6157-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6157-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<p>例如：自己扩展CI的控制器类</p>
<p><img loading="lazy" decoding="async" width="626" height="217" class="wp-image-6754" src="/wp-content/uploads/2018/05/word-image-6158.png" srcset="/wp-content/uploads/2018/05/word-image-6158.png 626w, /wp-content/uploads/2018/05/word-image-6158-300x104.png 300w" sizes="(max-width: 626px) 100vw, 626px" /> <img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6755" src="/wp-content/uploads/2018/05/word-image-6159.png" srcset="/wp-content/uploads/2018/05/word-image-6159.png 1366w, /wp-content/uploads/2018/05/word-image-6159-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6159-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6159-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<ol>
<li>ci框架的访问</li>
</ol>
<p>两种访问方式，直接访问，全路径访问</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6756" src="/wp-content/uploads/2018/05/word-image-6160.png" srcset="/wp-content/uploads/2018/05/word-image-6160.png 1366w, /wp-content/uploads/2018/05/word-image-6160-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6160-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6160-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>全路径访问（默认控制器是welcome控制器、方法是index方法；URL访问模式叫做pathinfo）</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6758" src="/wp-content/uploads/2018/05/word-image-6161.png" srcset="/wp-content/uploads/2018/05/word-image-6161.png 1366w, /wp-content/uploads/2018/05/word-image-6161-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6161-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6161-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>index.php?m=Home&amp;c=Index&amp;a=index （普通模式）</p>
<p>index.php/Home/Index/index （pathinfo模式）</p>
<p>index.php?s=Home&amp;Index&amp;lst（兼容模式）</p>
<p>Index-lst-12.html &#8212;-&gt; index/Home/Index/lst/12 （重写模式）</p>
<h2>④-CI框架-控制器</h2>
<p>如何上手一个CI框架？</p>
<p>答：1. 学习控制器 2. 学习视图 3. 学习模型</p>
<p>具体：</p>
<p>一个控制器如何学习？</p>
<ol>
<li>学习控制器写在哪里？</li>
<li>控制器文件的命令如何命名？</li>
<li>文件里面的内容如何书写？有哪些注意事项？</li>
<li>控制器里面的方法如何书写？注意事项？</li>
<li>控制器方法里面如何载入视图？</li>
<li>如何给视图赋值变量？</li>
<li>视图里面如何显示变量信息？</li>
<li>最后如何在控制器里面实例化模型，从数据库获取数据？</li>
</ol>
<p>实操：</p>
<ol>
<li>控制器文件写在哪里？</li>
</ol>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6759" src="/wp-content/uploads/2018/05/word-image-6162.png" srcset="/wp-content/uploads/2018/05/word-image-6162.png 849w, /wp-content/uploads/2018/05/word-image-6162-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6162-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<ol>
<li>控制器文件如何命名？</li>
</ol>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6760" src="/wp-content/uploads/2018/05/word-image-6163.png" srcset="/wp-content/uploads/2018/05/word-image-6163.png 849w, /wp-content/uploads/2018/05/word-image-6163-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6163-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<ol>
<li>控制器里面的内容如何书写？</li>
</ol>
<p><img loading="lazy" decoding="async" width="1314" height="145" class="wp-image-6761" src="/wp-content/uploads/2018/05/word-image-6164.png" srcset="/wp-content/uploads/2018/05/word-image-6164.png 1314w, /wp-content/uploads/2018/05/word-image-6164-300x33.png 300w, /wp-content/uploads/2018/05/word-image-6164-768x85.png 768w, /wp-content/uploads/2018/05/word-image-6164-1024x113.png 1024w" sizes="(max-width: 1314px) 100vw, 1314px" /></p>
<p>确保所有的请求都是从单入口开始的。</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6762" src="/wp-content/uploads/2018/05/word-image-6165.png" srcset="/wp-content/uploads/2018/05/word-image-6165.png 1366w, /wp-content/uploads/2018/05/word-image-6165-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6165-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6165-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<ol>
<li>控制器里面的方法如何书写？</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6763" src="/wp-content/uploads/2018/05/word-image-6166.png" srcset="/wp-content/uploads/2018/05/word-image-6166.png 1366w, /wp-content/uploads/2018/05/word-image-6166-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6166-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6166-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>浏览器访问</p>
<p><img loading="lazy" decoding="async" width="631" height="192" class="wp-image-6764" src="/wp-content/uploads/2018/05/word-image-6167.png" srcset="/wp-content/uploads/2018/05/word-image-6167.png 631w, /wp-content/uploads/2018/05/word-image-6167-300x91.png 300w" sizes="(max-width: 631px) 100vw, 631px" /></p>
<p>注意：在CI框架里面，方法名称不能以_下划线开头，在浏览器是无法访问，但是不影响在类的方法内部被调用</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6765" src="/wp-content/uploads/2018/05/word-image-6168.png" srcset="/wp-content/uploads/2018/05/word-image-6168.png 1366w, /wp-content/uploads/2018/05/word-image-6168-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6168-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6168-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="602" height="220" class="wp-image-6766" src="/wp-content/uploads/2018/05/word-image-6169.png" srcset="/wp-content/uploads/2018/05/word-image-6169.png 602w, /wp-content/uploads/2018/05/word-image-6169-300x110.png 300w" sizes="(max-width: 602px) 100vw, 602px" /></p>
<p>注意：内部使用不受影响</p>
<p><img loading="lazy" decoding="async" width="842" height="482" class="wp-image-6767" src="/wp-content/uploads/2018/05/word-image-6170.png" srcset="/wp-content/uploads/2018/05/word-image-6170.png 842w, /wp-content/uploads/2018/05/word-image-6170-300x172.png 300w, /wp-content/uploads/2018/05/word-image-6170-768x440.png 768w" sizes="(max-width: 842px) 100vw, 842px" /></p>
<p>5. 注意：CI框架控制器里面有一个方法比较特殊，叫做_remap方法，该方法会在其他方法被调用之前，自动的调用</p>
<p><img loading="lazy" decoding="async" width="1160" height="371" class="wp-image-6768" src="/wp-content/uploads/2018/05/word-image-6171.png" srcset="/wp-content/uploads/2018/05/word-image-6171.png 1160w, /wp-content/uploads/2018/05/word-image-6171-300x96.png 300w, /wp-content/uploads/2018/05/word-image-6171-768x246.png 768w, /wp-content/uploads/2018/05/word-image-6171-1024x328.png 1024w" sizes="(max-width: 1160px) 100vw, 1160px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="852" height="216" class="wp-image-6769" src="/wp-content/uploads/2018/05/word-image-6172.png" srcset="/wp-content/uploads/2018/05/word-image-6172.png 852w, /wp-content/uploads/2018/05/word-image-6172-300x76.png 300w, /wp-content/uploads/2018/05/word-image-6172-768x195.png 768w" sizes="(max-width: 852px) 100vw, 852px" /></p>
<p>实际操作：可以做一个简单的前台权限的验证操作。</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6770" src="/wp-content/uploads/2018/05/word-image-6173.png" srcset="/wp-content/uploads/2018/05/word-image-6173.png 1366w, /wp-content/uploads/2018/05/word-image-6173-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6173-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6173-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>验证</p>
<p><img loading="lazy" decoding="async" width="1177" height="510" class="wp-image-6771" src="/wp-content/uploads/2018/05/word-image-6174.png" srcset="/wp-content/uploads/2018/05/word-image-6174.png 1177w, /wp-content/uploads/2018/05/word-image-6174-300x130.png 300w, /wp-content/uploads/2018/05/word-image-6174-768x333.png 768w, /wp-content/uploads/2018/05/word-image-6174-1024x444.png 1024w" sizes="(max-width: 1177px) 100vw, 1177px" /></p>
<p>6. 方法里面如何载入视图？</p>
<p><img loading="lazy" decoding="async" width="885" height="272" class="wp-image-6772" src="/wp-content/uploads/2018/05/word-image-6175.png" srcset="/wp-content/uploads/2018/05/word-image-6175.png 885w, /wp-content/uploads/2018/05/word-image-6175-300x92.png 300w, /wp-content/uploads/2018/05/word-image-6175-768x236.png 768w" sizes="(max-width: 885px) 100vw, 885px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="970" height="471" class="wp-image-6773" src="/wp-content/uploads/2018/05/word-image-6176.png" srcset="/wp-content/uploads/2018/05/word-image-6176.png 970w, /wp-content/uploads/2018/05/word-image-6176-300x146.png 300w, /wp-content/uploads/2018/05/word-image-6176-768x373.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></p>
<h2>⑤-CI框架-视图</h2>
<p>思考：</p>
<ol>
<li>视图写在哪里？</li>
<li>视图文件如何命名？</li>
<li>视图内容如何书写？</li>
<li>控制器如何调用视图，如何给视图赋值</li>
<li>视图里面如何显示变量（是否可以使用标签语法、或者原生写法）</li>
<li>视图可以分目录管理</li>
<li>控制器里面可以载入多个视图</li>
<li>视图可以分目录管理，那么控制器是否可以分目录管理？可以（分目录其实就是之前其他框架里面的分模块管理：前台、后台）</li>
</ol>
<p>实操</p>
<ol>
<li>写在哪里？</li>
</ol>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6774" src="/wp-content/uploads/2018/05/word-image-6177.png" srcset="/wp-content/uploads/2018/05/word-image-6177.png 849w, /wp-content/uploads/2018/05/word-image-6177-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6177-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<ol>
<li>视图文件如何命名？</li>
</ol>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6775" src="/wp-content/uploads/2018/05/word-image-6178.png" srcset="/wp-content/uploads/2018/05/word-image-6178.png 849w, /wp-content/uploads/2018/05/word-image-6178-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6178-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<ol>
<li>视图里面的内容如何书写？</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6776" src="/wp-content/uploads/2018/05/word-image-6179.png" srcset="/wp-content/uploads/2018/05/word-image-6179.png 1366w, /wp-content/uploads/2018/05/word-image-6179-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6179-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6179-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>4. 如何在控制器里面载入视图文件？</p>
<p><img loading="lazy" decoding="async" width="793" height="316" class="wp-image-6777" src="/wp-content/uploads/2018/05/word-image-6180.png" srcset="/wp-content/uploads/2018/05/word-image-6180.png 793w, /wp-content/uploads/2018/05/word-image-6180-300x120.png 300w, /wp-content/uploads/2018/05/word-image-6180-768x306.png 768w" sizes="(max-width: 793px) 100vw, 793px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="635" height="187" class="wp-image-6778" src="/wp-content/uploads/2018/05/word-image-6181.png" srcset="/wp-content/uploads/2018/05/word-image-6181.png 635w, /wp-content/uploads/2018/05/word-image-6181-300x88.png 300w" sizes="(max-width: 635px) 100vw, 635px" /></p>
<p>5. 如何在控制器里面给视图赋值变量，然后让变量在视图文件显示？</p>
<p>第一种方式赋值[使用少]</p>
<p><img loading="lazy" decoding="async" width="930" height="449" class="wp-image-6779" src="/wp-content/uploads/2018/05/word-image-6182.png" srcset="/wp-content/uploads/2018/05/word-image-6182.png 930w, /wp-content/uploads/2018/05/word-image-6182-300x145.png 300w, /wp-content/uploads/2018/05/word-image-6182-768x371.png 768w" sizes="(max-width: 930px) 100vw, 930px" /></p>
<p>视图代码</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6780" src="/wp-content/uploads/2018/05/word-image-6183.png" srcset="/wp-content/uploads/2018/05/word-image-6183.png 1366w, /wp-content/uploads/2018/05/word-image-6183-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6183-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6183-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="493" height="181" class="wp-image-6781" src="/wp-content/uploads/2018/05/word-image-6184.png" srcset="/wp-content/uploads/2018/05/word-image-6184.png 493w, /wp-content/uploads/2018/05/word-image-6184-300x110.png 300w" sizes="(max-width: 493px) 100vw, 493px" /></p>
<p>第二种方式[使用多]</p>
<p><img loading="lazy" decoding="async" width="1193" height="502" class="wp-image-6782" src="/wp-content/uploads/2018/05/word-image-6185.png" srcset="/wp-content/uploads/2018/05/word-image-6185.png 1193w, /wp-content/uploads/2018/05/word-image-6185-300x126.png 300w, /wp-content/uploads/2018/05/word-image-6185-768x323.png 768w, /wp-content/uploads/2018/05/word-image-6185-1024x431.png 1024w" sizes="(max-width: 1193px) 100vw, 1193px" /></p>
<p>视图代码</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6783" src="/wp-content/uploads/2018/05/word-image-6186.png" srcset="/wp-content/uploads/2018/05/word-image-6186.png 1366w, /wp-content/uploads/2018/05/word-image-6186-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6186-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6186-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="549" height="322" class="wp-image-6784" src="/wp-content/uploads/2018/05/word-image-6187.png" srcset="/wp-content/uploads/2018/05/word-image-6187.png 549w, /wp-content/uploads/2018/05/word-image-6187-300x176.png 300w" sizes="(max-width: 549px) 100vw, 549px" /></p>
<p>6. 注意：CI框架里面的控制器和视图是否可以分目录保存？</p>
<p>控制器分目录，书写位置：</p>
<p><img loading="lazy" decoding="async" width="647" height="192" class="wp-image-6785" src="/wp-content/uploads/2018/05/word-image-6188.png" srcset="/wp-content/uploads/2018/05/word-image-6188.png 647w, /wp-content/uploads/2018/05/word-image-6188-300x89.png 300w" sizes="(max-width: 647px) 100vw, 647px" /></p>
<p>控制器代码：</p>
<p><img loading="lazy" decoding="async" width="1025" height="376" class="wp-image-6786" src="/wp-content/uploads/2018/05/word-image-6189.png" srcset="/wp-content/uploads/2018/05/word-image-6189.png 1025w, /wp-content/uploads/2018/05/word-image-6189-300x110.png 300w, /wp-content/uploads/2018/05/word-image-6189-768x282.png 768w, /wp-content/uploads/2018/05/word-image-6189-1024x376.png 1024w" sizes="(max-width: 1025px) 100vw, 1025px" /></p>
<p>访问：</p>
<p><img loading="lazy" decoding="async" width="801" height="189" class="wp-image-6787" src="/wp-content/uploads/2018/05/word-image-6190.png" srcset="/wp-content/uploads/2018/05/word-image-6190.png 801w, /wp-content/uploads/2018/05/word-image-6190-300x71.png 300w, /wp-content/uploads/2018/05/word-image-6190-768x181.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></p>
<p>视图分目录，书写位置：</p>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6790" src="/wp-content/uploads/2018/05/word-image-6191.png" srcset="/wp-content/uploads/2018/05/word-image-6191.png 849w, /wp-content/uploads/2018/05/word-image-6191-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6191-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<p>控制器代码</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6792" src="/wp-content/uploads/2018/05/word-image-6192.png" srcset="/wp-content/uploads/2018/05/word-image-6192.png 1366w, /wp-content/uploads/2018/05/word-image-6192-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6192-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6192-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6793" src="/wp-content/uploads/2018/05/word-image-6193.png" srcset="/wp-content/uploads/2018/05/word-image-6193.png 1366w, /wp-content/uploads/2018/05/word-image-6193-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6193-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6193-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>注意：CI框架里面的控制器里面可以载入多个视图</p>
<p>视图文件位置：</p>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6794" src="/wp-content/uploads/2018/05/word-image-6194.png" srcset="/wp-content/uploads/2018/05/word-image-6194.png 849w, /wp-content/uploads/2018/05/word-image-6194-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6194-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<p>控制器代码：</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6795" src="/wp-content/uploads/2018/05/word-image-6195.png" srcset="/wp-content/uploads/2018/05/word-image-6195.png 1366w, /wp-content/uploads/2018/05/word-image-6195-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6195-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6195-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6796" src="/wp-content/uploads/2018/05/word-image-6196.png" srcset="/wp-content/uploads/2018/05/word-image-6196.png 1366w, /wp-content/uploads/2018/05/word-image-6196-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6196-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6196-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<h2>⑥-数据库操作</h2>
<p>思考：</p>
<ol>
<li>在CI如何书写配置信息？</li>
<li>在CI里面如何从数据库里面获取数据？</li>
</ol>
<p>实操：</p>
<ol>
<li>建一个用户表</li>
</ol>
<p><img loading="lazy" decoding="async" width="770" height="298" class="wp-image-6797" src="/wp-content/uploads/2018/05/word-image-6197.png" srcset="/wp-content/uploads/2018/05/word-image-6197.png 770w, /wp-content/uploads/2018/05/word-image-6197-300x116.png 300w, /wp-content/uploads/2018/05/word-image-6197-768x297.png 768w" sizes="(max-width: 770px) 100vw, 770px" /></p>
<ol>
<li>先配置数据库的信息</li>
</ol>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6798" src="/wp-content/uploads/2018/05/word-image-6198.png" srcset="/wp-content/uploads/2018/05/word-image-6198.png 849w, /wp-content/uploads/2018/05/word-image-6198-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6198-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<p>配置</p>
<p><img loading="lazy" decoding="async" width="565" height="291" class="wp-image-6799" src="/wp-content/uploads/2018/05/word-image-6199.png" srcset="/wp-content/uploads/2018/05/word-image-6199.png 565w, /wp-content/uploads/2018/05/word-image-6199-300x155.png 300w" sizes="(max-width: 565px) 100vw, 565px" /></p>
<ol>
<li>在控制器里面获取数据库的数据</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6800" src="/wp-content/uploads/2018/05/word-image-6200.png" srcset="/wp-content/uploads/2018/05/word-image-6200.png 1366w, /wp-content/uploads/2018/05/word-image-6200-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6200-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6200-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<ol>
<li>在视图里面显示</li>
</ol>
<p>视图</p>
<p><img loading="lazy" decoding="async" width="730" height="373" class="wp-image-6803" src="/wp-content/uploads/2018/05/word-image-6203.png" srcset="/wp-content/uploads/2018/05/word-image-6203.png 730w, /wp-content/uploads/2018/05/word-image-6203-300x153.png 300w" sizes="(max-width: 730px) 100vw, 730px" /> <img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6807" src="/wp-content/uploads/2018/05/word-image-6207.png" srcset="/wp-content/uploads/2018/05/word-image-6207.png 1366w, /wp-content/uploads/2018/05/word-image-6207-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6207-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6207-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6812" src="/wp-content/uploads/2018/05/word-image-6212.png" srcset="/wp-content/uploads/2018/05/word-image-6212.png 1366w, /wp-content/uploads/2018/05/word-image-6212-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6212-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6212-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>注意事项：在获取数据操作的时候，必须连接数据[$this-&gt;load-&gt;datebase()], 但是有的时候容易忘记，所以可以自动载入</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6816" src="/wp-content/uploads/2018/05/word-image-6216.png" srcset="/wp-content/uploads/2018/05/word-image-6216.png 1366w, /wp-content/uploads/2018/05/word-image-6216-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6216-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6216-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>在控制器里面就不需要在手工的连接</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6820" src="/wp-content/uploads/2018/05/word-image-6220.png" srcset="/wp-content/uploads/2018/05/word-image-6220.png 1366w, /wp-content/uploads/2018/05/word-image-6220-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6220-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6220-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>这个也被称为CI里面的按需加载。【要连接数据库，才使用$this-&gt;load-&gt;database()连接】</p>
<h2>⑦-CI框架-模型</h2>
<p>思考：</p>
<ol>
<li>模型文件写哪里？</li>
<li>模型文件如何命名？</li>
<li>模型文件里面的内容如何书写？</li>
<li>在控制器里面如何调用模型？</li>
</ol>
<p>实操：</p>
<ol>
<li>模型文件写哪里？</li>
</ol>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6824" src="/wp-content/uploads/2018/05/word-image-6224.png" srcset="/wp-content/uploads/2018/05/word-image-6224.png 849w, /wp-content/uploads/2018/05/word-image-6224-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6224-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<ol>
<li>模型文件如何命名的问题？</li>
</ol>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6828" src="/wp-content/uploads/2018/05/word-image-6228.png" srcset="/wp-content/uploads/2018/05/word-image-6228.png 849w, /wp-content/uploads/2018/05/word-image-6228-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6228-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<ol>
<li>模型里面的内容书写</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6832" src="/wp-content/uploads/2018/05/word-image-6232.png" srcset="/wp-content/uploads/2018/05/word-image-6232.png 1366w, /wp-content/uploads/2018/05/word-image-6232-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6232-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6232-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>书写一个get_user方法获取数据</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6837" src="/wp-content/uploads/2018/05/word-image-6237.png" srcset="/wp-content/uploads/2018/05/word-image-6237.png 1366w, /wp-content/uploads/2018/05/word-image-6237-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6237-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6237-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>在控制器里面调用</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6841" src="/wp-content/uploads/2018/05/word-image-6241.png" srcset="/wp-content/uploads/2018/05/word-image-6241.png 1366w, /wp-content/uploads/2018/05/word-image-6241-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6241-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6241-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>视图显示数据</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6845" src="/wp-content/uploads/2018/05/word-image-6245.png" srcset="/wp-content/uploads/2018/05/word-image-6245.png 1366w, /wp-content/uploads/2018/05/word-image-6245-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6245-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6245-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<h1>简单的实现一套用户的curd</h1>
<p>使用CI框架实现一套完整的增删改查。</p>
<h2>①-用户增加</h2>
<ol>
<li>在user.php控制器文件增加一个add_user方法</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6848" src="/wp-content/uploads/2018/05/word-image-6248.png" srcset="/wp-content/uploads/2018/05/word-image-6248.png 1366w, /wp-content/uploads/2018/05/word-image-6248-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6248-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6248-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<ol>
<li>增加一个add_user.php视图文件</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6851" src="/wp-content/uploads/2018/05/word-image-6251.png" srcset="/wp-content/uploads/2018/05/word-image-6251.png 1366w, /wp-content/uploads/2018/05/word-image-6251-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6251-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6251-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p><strong>备注：在form表单提交的actione里面使用site_url函数之前，需要在自动载入里面进行配置。</strong></p>
<p><img loading="lazy" decoding="async" width="839" height="247" class="wp-image-6854" src="/wp-content/uploads/2018/05/word-image-6254.png" srcset="/wp-content/uploads/2018/05/word-image-6254.png 839w, /wp-content/uploads/2018/05/word-image-6254-300x88.png 300w, /wp-content/uploads/2018/05/word-image-6254-768x226.png 768w" sizes="(max-width: 839px) 100vw, 839px" /></p>
<ol>
<li>在user_model.php文件里面增加一个add_user方法，入库数据</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6856" src="/wp-content/uploads/2018/05/word-image-6256.png" srcset="/wp-content/uploads/2018/05/word-image-6256.png 1366w, /wp-content/uploads/2018/05/word-image-6256-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6256-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6256-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<h2>②-用户展示</h2>
<p>1. 在user_model.php模型文件增加一个get_user方法</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6859" src="/wp-content/uploads/2018/05/word-image-6259.png" srcset="/wp-content/uploads/2018/05/word-image-6259.png 1366w, /wp-content/uploads/2018/05/word-image-6259-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6259-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6259-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<ol>
<li>在user.php控制器里面增加一个get_user方法</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6861" src="/wp-content/uploads/2018/05/word-image-6261.png" srcset="/wp-content/uploads/2018/05/word-image-6261.png 1366w, /wp-content/uploads/2018/05/word-image-6261-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6261-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6261-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>3. 在lst.php视图显示数据</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6863" src="/wp-content/uploads/2018/05/word-image-6263.png" srcset="/wp-content/uploads/2018/05/word-image-6263.png 1366w, /wp-content/uploads/2018/05/word-image-6263-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6263-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6263-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<h2>③-用户删除</h2>
<ol>
<li>修改lst.php视图文件，增加删除链接</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6865" src="/wp-content/uploads/2018/05/word-image-6265.png" srcset="/wp-content/uploads/2018/05/word-image-6265.png 1366w, /wp-content/uploads/2018/05/word-image-6265-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6265-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6265-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6867" src="/wp-content/uploads/2018/05/word-image-6267.png" srcset="/wp-content/uploads/2018/05/word-image-6267.png 1366w, /wp-content/uploads/2018/05/word-image-6267-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6267-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6267-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<ol>
<li>在user.php控制器里面定义del_user方法，完成删除操作</li>
</ol>
<p>注意：获取地址栏里的主键id，需要使用按段获取</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6869" src="/wp-content/uploads/2018/05/word-image-6269.png" srcset="/wp-content/uploads/2018/05/word-image-6269.png 1366w, /wp-content/uploads/2018/05/word-image-6269-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6269-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6269-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /> <img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6871" src="/wp-content/uploads/2018/05/word-image-6271.png" srcset="/wp-content/uploads/2018/05/word-image-6271.png 1366w, /wp-content/uploads/2018/05/word-image-6271-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6271-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6271-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>3. 在user_model.php模型里面定义一个del_user方法【特别注意：在CI里面做数据删除的时候，需要根据受影响的行来判断数据是否删除成功！】【$this-&gt;db-&gt;delete方法的返回值是sql语句是否成功运行】</p>
<p><img loading="lazy" decoding="async" width="1190" height="392" class="wp-image-6873" src="/wp-content/uploads/2018/05/word-image-6273.png" srcset="/wp-content/uploads/2018/05/word-image-6273.png 1190w, /wp-content/uploads/2018/05/word-image-6273-300x99.png 300w, /wp-content/uploads/2018/05/word-image-6273-768x253.png 768w, /wp-content/uploads/2018/05/word-image-6273-1024x337.png 1024w" sizes="(max-width: 1190px) 100vw, 1190px" /></p>
<p>调试技巧：获取上一次执行的sql语句。</p>
<p><img loading="lazy" decoding="async" width="1159" height="409" class="wp-image-6875" src="/wp-content/uploads/2018/05/word-image-6275.png" srcset="/wp-content/uploads/2018/05/word-image-6275.png 1159w, /wp-content/uploads/2018/05/word-image-6275-300x106.png 300w, /wp-content/uploads/2018/05/word-image-6275-768x271.png 768w, /wp-content/uploads/2018/05/word-image-6275-1024x361.png 1024w" sizes="(max-width: 1159px) 100vw, 1159px" /></p>
<h2>④-用户编辑</h2>
<ol>
<li>在lst.php视图里面增加一个编辑的链接</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6877" src="/wp-content/uploads/2018/05/word-image-6277.png" srcset="/wp-content/uploads/2018/05/word-image-6277.png 1366w, /wp-content/uploads/2018/05/word-image-6277-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6277-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6277-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6879" src="/wp-content/uploads/2018/05/word-image-6279.png" srcset="/wp-content/uploads/2018/05/word-image-6279.png 1366w, /wp-content/uploads/2018/05/word-image-6279-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6279-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6279-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<ol>
<li>在user.php控制器里面增加一个edt_user方法</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6881" src="/wp-content/uploads/2018/05/word-image-6281.png" srcset="/wp-content/uploads/2018/05/word-image-6281.png 1366w, /wp-content/uploads/2018/05/word-image-6281-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6281-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6281-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /> <img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6884" src="/wp-content/uploads/2018/05/word-image-6283.png" srcset="/wp-content/uploads/2018/05/word-image-6283.png 1366w, /wp-content/uploads/2018/05/word-image-6283-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6283-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6283-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<ol>
<li>在user_model.php模型文件增加两个方法find_one和edt_user方法</li>
</ol>
<p><img loading="lazy" decoding="async" width="1166" height="721" class="wp-image-6887" src="/wp-content/uploads/2018/05/word-image-6286.png" srcset="/wp-content/uploads/2018/05/word-image-6286.png 1166w, /wp-content/uploads/2018/05/word-image-6286-300x186.png 300w, /wp-content/uploads/2018/05/word-image-6286-768x475.png 768w, /wp-content/uploads/2018/05/word-image-6286-1024x633.png 1024w" sizes="(max-width: 1166px) 100vw, 1166px" /></p>
<ol>
<li>增加一个edt.php视图文件</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6889" src="/wp-content/uploads/2018/05/word-image-6288.png" srcset="/wp-content/uploads/2018/05/word-image-6288.png 1366w, /wp-content/uploads/2018/05/word-image-6288-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6288-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6288-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<h1>三、跳转函数封装</h1>
<p>由于CI框架里面的跳转函数是redirect函数，它不能实现跳转的时候带提示信息。</p>
<p>我们可以参照TP的实现，封装一个带提示的跳转函数。</p>
<ol>
<li>参照TP的实现，完成一个函数的封装，写到如下位置</li>
</ol>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6891" src="/wp-content/uploads/2018/05/word-image-6290.png" srcset="/wp-content/uploads/2018/05/word-image-6290.png 849w, /wp-content/uploads/2018/05/word-image-6290-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6290-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<ol>
<li>调用</li>
</ol>
<p>自动载入自己定义的函数</p>
<p><img loading="lazy" decoding="async" width="1057" height="355" class="wp-image-6893" src="/wp-content/uploads/2018/05/word-image-6292.png" srcset="/wp-content/uploads/2018/05/word-image-6292.png 1057w, /wp-content/uploads/2018/05/word-image-6292-300x101.png 300w, /wp-content/uploads/2018/05/word-image-6292-768x258.png 768w, /wp-content/uploads/2018/05/word-image-6292-1024x344.png 1024w" sizes="(max-width: 1057px) 100vw, 1057px" /></p>
<p>使用</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6895" src="/wp-content/uploads/2018/05/word-image-6294.png" srcset="/wp-content/uploads/2018/05/word-image-6294.png 1366w, /wp-content/uploads/2018/05/word-image-6294-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6294-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6294-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="587" height="348" class="wp-image-6897" src="/wp-content/uploads/2018/05/word-image-6296.png" srcset="/wp-content/uploads/2018/05/word-image-6296.png 587w, /wp-content/uploads/2018/05/word-image-6296-300x178.png 300w" sizes="(max-width: 587px) 100vw, 587px" /></p>
<h1>四、分页插件</h1>
<h2>①-Ajax分页</h2>
<p>在CI里面实现Ajax无刷新分页的效果，还使用一个pagination插件。</p>
<p>网站:http://www.zhangxinxu.com/jq/pagination_zh/</p>
<ol>
<li>在项目引入分页插件</li>
</ol>
<p><img loading="lazy" decoding="async" width="849" height="591" class="wp-image-6899" src="/wp-content/uploads/2018/05/word-image-6298.png" srcset="/wp-content/uploads/2018/05/word-image-6298.png 849w, /wp-content/uploads/2018/05/word-image-6298-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6298-768x535.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<ol>
<li>在页面调用分页插件css和js</li>
</ol>
<p><img loading="lazy" decoding="async" width="1085" height="301" class="wp-image-6901" src="/wp-content/uploads/2018/05/word-image-6300.png" srcset="/wp-content/uploads/2018/05/word-image-6300.png 1085w, /wp-content/uploads/2018/05/word-image-6300-300x83.png 300w, /wp-content/uploads/2018/05/word-image-6300-768x213.png 768w, /wp-content/uploads/2018/05/word-image-6300-1024x284.png 1024w" sizes="(max-width: 1085px) 100vw, 1085px" /> <img loading="lazy" decoding="async" width="1043" height="97" class="wp-image-6903" src="/wp-content/uploads/2018/05/word-image-6302.png" srcset="/wp-content/uploads/2018/05/word-image-6302.png 1043w, /wp-content/uploads/2018/05/word-image-6302-300x28.png 300w, /wp-content/uploads/2018/05/word-image-6302-768x71.png 768w, /wp-content/uploads/2018/05/word-image-6302-1024x95.png 1024w" sizes="(max-width: 1043px) 100vw, 1043px" /></p>
<p>注意：必须先引入jQuery</p>
<ol>
<li>定义数据显示容器和分页字符串</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6905" src="/wp-content/uploads/2018/05/word-image-6304.png" srcset="/wp-content/uploads/2018/05/word-image-6304.png 1366w, /wp-content/uploads/2018/05/word-image-6304-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6304-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6304-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<ol>
<li>在js里面调用</li>
</ol>
<p>在user.php控制器的get_user方法获取总记录</p>
<p><img loading="lazy" decoding="async" width="1003" height="326" class="wp-image-6908" src="/wp-content/uploads/2018/05/word-image-6307.png" srcset="/wp-content/uploads/2018/05/word-image-6307.png 1003w, /wp-content/uploads/2018/05/word-image-6307-300x98.png 300w, /wp-content/uploads/2018/05/word-image-6307-768x250.png 768w" sizes="(max-width: 1003px) 100vw, 1003px" /></p>
<p>在user_model.php文件定义一个方法获取总记录</p>
<p><img loading="lazy" decoding="async" width="687" height="294" class="wp-image-6910" src="/wp-content/uploads/2018/05/word-image-6309.png" srcset="/wp-content/uploads/2018/05/word-image-6309.png 687w, /wp-content/uploads/2018/05/word-image-6309-300x128.png 300w" sizes="(max-width: 687px) 100vw, 687px" /></p>
<p>分页插件调用</p>
<p><img loading="lazy" decoding="async" width="952" height="439" class="wp-image-6911" src="/wp-content/uploads/2018/05/word-image-6310.png" srcset="/wp-content/uploads/2018/05/word-image-6310.png 952w, /wp-content/uploads/2018/05/word-image-6310-300x138.png 300w, /wp-content/uploads/2018/05/word-image-6310-768x354.png 768w" sizes="(max-width: 952px) 100vw, 952px" /></p>
<p>分页页码点击回调，发送Ajax获取数据</p>
<p><img loading="lazy" decoding="async" width="960" height="731" class="wp-image-6912" src="/wp-content/uploads/2018/05/word-image-6311.png" srcset="/wp-content/uploads/2018/05/word-image-6311.png 960w, /wp-content/uploads/2018/05/word-image-6311-300x228.png 300w, /wp-content/uploads/2018/05/word-image-6311-768x585.png 768w" sizes="(max-width: 960px) 100vw, 960px" /></p>
<p>数据格式化函数</p>
<p><img loading="lazy" decoding="async" width="1155" height="385" class="wp-image-6913" src="/wp-content/uploads/2018/05/word-image-6312.png" srcset="/wp-content/uploads/2018/05/word-image-6312.png 1155w, /wp-content/uploads/2018/05/word-image-6312-300x100.png 300w, /wp-content/uploads/2018/05/word-image-6312-768x256.png 768w, /wp-content/uploads/2018/05/word-image-6312-1024x341.png 1024w" sizes="(max-width: 1155px) 100vw, 1155px" /></p>
<ol>
<li>user.php后台返回Ajax数据</li>
</ol>
<p><img loading="lazy" decoding="async" width="918" height="750" class="wp-image-6914" src="/wp-content/uploads/2018/05/word-image-6313.png" srcset="/wp-content/uploads/2018/05/word-image-6313.png 918w, /wp-content/uploads/2018/05/word-image-6313-300x245.png 300w, /wp-content/uploads/2018/05/word-image-6313-768x627.png 768w" sizes="(max-width: 918px) 100vw, 918px" /></p>
<h1>五、CI框架源码分析</h1>
<h2>①-分析入口文件</h2>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6915" src="/wp-content/uploads/2018/05/word-image-6314.png" srcset="/wp-content/uploads/2018/05/word-image-6314.png 1366w, /wp-content/uploads/2018/05/word-image-6314-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6314-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6314-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /> <img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6916" src="/wp-content/uploads/2018/05/word-image-6315.png" srcset="/wp-content/uploads/2018/05/word-image-6315.png 1366w, /wp-content/uploads/2018/05/word-image-6315-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6315-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6315-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /> <img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6917" src="/wp-content/uploads/2018/05/word-image-6316.png" srcset="/wp-content/uploads/2018/05/word-image-6316.png 1366w, /wp-content/uploads/2018/05/word-image-6316-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6316-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6316-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /> <img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6918" src="/wp-content/uploads/2018/05/word-image-6317.png" srcset="/wp-content/uploads/2018/05/word-image-6317.png 1366w, /wp-content/uploads/2018/05/word-image-6317-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6317-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6317-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<h2>②-CI的核心引导类</h2>
<p>注意：一般开源产品的common.php里面存放都是项目必须要使用的函数。</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6919" src="/wp-content/uploads/2018/05/word-image-6318.png" srcset="/wp-content/uploads/2018/05/word-image-6318.png 1366w, /wp-content/uploads/2018/05/word-image-6318-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6318-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6318-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>先分析一下common.php里面的函数【重点分析】</p>
<p>load_class函数</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6920" src="/wp-content/uploads/2018/05/word-image-6319.png" srcset="/wp-content/uploads/2018/05/word-image-6319.png 1366w, /wp-content/uploads/2018/05/word-image-6319-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6319-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6319-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>函数主要是配置load_class使用</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6921" src="/wp-content/uploads/2018/05/word-image-6320.png" srcset="/wp-content/uploads/2018/05/word-image-6320.png 1366w, /wp-content/uploads/2018/05/word-image-6320-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6320-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6320-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /> <img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6922" src="/wp-content/uploads/2018/05/word-image-6321.png" srcset="/wp-content/uploads/2018/05/word-image-6321.png 1366w, /wp-content/uploads/2018/05/word-image-6321-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6321-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6321-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /> <img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6923" src="/wp-content/uploads/2018/05/word-image-6322.png" srcset="/wp-content/uploads/2018/05/word-image-6322.png 1366w, /wp-content/uploads/2018/05/word-image-6322-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6322-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6322-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /> <img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6924" src="/wp-content/uploads/2018/05/word-image-6323.png" srcset="/wp-content/uploads/2018/05/word-image-6323.png 1366w, /wp-content/uploads/2018/05/word-image-6323-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6323-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6323-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<h2>③-CI里面的模型实例化1-装载器分析</h2>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6925" src="/wp-content/uploads/2018/05/word-image-6324.png" srcset="/wp-content/uploads/2018/05/word-image-6324.png 1366w, /wp-content/uploads/2018/05/word-image-6324-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6324-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6324-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>在上面user.php文件里面完成模型的实例化，底层原理是怎么样的？</p>
<p>思考：在控制器里面$this-&gt;load代表是什么？</p>
<p>答：$this-&gt;load 这个属性在用户自定义的控制器里面是不存在的，会去父类的控制器里面查询CI_Controller.php里面查找</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6926" src="/wp-content/uploads/2018/05/word-image-6325.png" srcset="/wp-content/uploads/2018/05/word-image-6325.png 1366w, /wp-content/uploads/2018/05/word-image-6325-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6325-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6325-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>通过查找发现父类里面的构造方法里面使用load_calss(‘Loader’,’core’)进行赋值操作。查看 load_class.php的源码，进行分析</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6927" src="/wp-content/uploads/2018/05/word-image-6326.png" srcset="/wp-content/uploads/2018/05/word-image-6326.png 1366w, /wp-content/uploads/2018/05/word-image-6326-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6326-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6326-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<table>
<tbody>
<tr>
<td>面试题：CI装载器是做什么的？主要是负责类的实例化操作，是system/core/loader.php的实例</td>
</tr>
</tbody>
</table>
<p>先记住：load_class功能：1. 载入类 2. 实例化类 3. 记录类</p>
<p>并且：整个CI框架没有类的自动载入机制，全部使用load_class完成。</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6928" src="/wp-content/uploads/2018/05/word-image-6327.png" srcset="/wp-content/uploads/2018/05/word-image-6327.png 1366w, /wp-content/uploads/2018/05/word-image-6327-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6327-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6327-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<h2>④-CI里面的模型实例化2-实例化模型</h2>
<p>$this-&gt;load-&gt;model(‘user_model’,’user’); === new CI_Loader()-&gt;model(‘user_model’,’user’)</p>
<p>底层原理：</p>
<p>$this-&gt;load本质就是CI_Loader的实例，所以我们需要分析一下Loader.php这个文件里面的内容，在分析一下里面model方法，这个方法是实例化模型的关键。</p>
<p><img loading="lazy" decoding="async" width="1067" height="367" class="wp-image-6929" src="/wp-content/uploads/2018/05/word-image-6328.png" srcset="/wp-content/uploads/2018/05/word-image-6328.png 1067w, /wp-content/uploads/2018/05/word-image-6328-300x103.png 300w, /wp-content/uploads/2018/05/word-image-6328-768x264.png 768w, /wp-content/uploads/2018/05/word-image-6328-1024x352.png 1024w" sizes="(max-width: 1067px) 100vw, 1067px" /></p>
<h2>⑤-CI模型里面的db属性是咋回事？</h2>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6930" src="/wp-content/uploads/2018/05/word-image-6329.png" srcset="/wp-content/uploads/2018/05/word-image-6329.png 1366w, /wp-content/uploads/2018/05/word-image-6329-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6329-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6329-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>之前：$this-&gt;db = new DB(); 这里的$this也是超级对象(get_instance()函数的返回值，或者就是CI_Controller::instance属性&#8212;$this)</p>
<ol>
<li>查找db属性，肯定是在自己的类里面查找，不存在则去父类里面查找</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6931" src="/wp-content/uploads/2018/05/word-image-6330.png" srcset="/wp-content/uploads/2018/05/word-image-6330.png 1366w, /wp-content/uploads/2018/05/word-image-6330-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6330-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6330-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<ol>
<li>查看超级对象下是否存在db属性</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6933" src="/wp-content/uploads/2018/05/word-image-6331.png" srcset="/wp-content/uploads/2018/05/word-image-6331.png 1366w, /wp-content/uploads/2018/05/word-image-6331-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6331-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6331-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>3. 查看系统的控制器</p>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6934" src="/wp-content/uploads/2018/05/word-image-6332.png" srcset="/wp-content/uploads/2018/05/word-image-6332.png 1366w, /wp-content/uploads/2018/05/word-image-6332-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6332-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6332-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<ol>
<li>查看装载器的方法</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6935" src="/wp-content/uploads/2018/05/word-image-6333.png" srcset="/wp-content/uploads/2018/05/word-image-6333.png 1366w, /wp-content/uploads/2018/05/word-image-6333-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6333-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6333-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<ol>
<li>分析装载器里面的_ci_autoloader方法</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6936" src="/wp-content/uploads/2018/05/word-image-6334.png" srcset="/wp-content/uploads/2018/05/word-image-6334.png 1366w, /wp-content/uploads/2018/05/word-image-6334-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6334-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6334-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /> <img loading="lazy" decoding="async" width="1114" height="553" class="wp-image-6937" src="/wp-content/uploads/2018/05/word-image-6335.png" srcset="/wp-content/uploads/2018/05/word-image-6335.png 1114w, /wp-content/uploads/2018/05/word-image-6335-300x149.png 300w, /wp-content/uploads/2018/05/word-image-6335-768x381.png 768w, /wp-content/uploads/2018/05/word-image-6335-1024x508.png 1024w" sizes="(max-width: 1114px) 100vw, 1114px" /></p>
<ol>
<li>查看装载器的$this-&gt;dabase()方法</li>
</ol>
<p><img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6938" src="/wp-content/uploads/2018/05/word-image-6336.png" srcset="/wp-content/uploads/2018/05/word-image-6336.png 1366w, /wp-content/uploads/2018/05/word-image-6336-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6336-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6336-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /> <img loading="lazy" decoding="async" width="1366" height="736" class="wp-image-6939" src="/wp-content/uploads/2018/05/word-image-6337.png" srcset="/wp-content/uploads/2018/05/word-image-6337.png 1366w, /wp-content/uploads/2018/05/word-image-6337-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6337-768x414.png 768w, /wp-content/uploads/2018/05/word-image-6337-1024x552.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6501.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Yaf框架 安装、PHP-ext引入、目录结构、路由、模型、视图、控制器</title>
		<link>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6500.html</link>
					<comments>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6500.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 17:29:32 +0000</pubDate>
				<category><![CDATA[Yaf]]></category>
		<category><![CDATA[后台框架]]></category>
		<category><![CDATA[PHP-ext引入]]></category>
		<category><![CDATA[Yaf安装]]></category>
		<category><![CDATA[控制器]]></category>
		<category><![CDATA[模型]]></category>
		<category><![CDATA[目录结构]]></category>
		<category><![CDATA[视图]]></category>
		<category><![CDATA[路由]]></category>
		<guid isPermaLink="false">/?p=6500</guid>

					<description><![CDATA[写在前面 鸟哥是谁？ 注意：也是PHP核心开发者之一（目前的最新的PHP7参与其中，并且很大部分的代码都是他贡 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>写在前面</h1>
<h2>鸟哥是谁？</h2>
<p><img loading="lazy" decoding="async" width="684" height="216" class="wp-image-6667" src="/wp-content/uploads/2018/05/word-image-6074.png" srcset="/wp-content/uploads/2018/05/word-image-6074.png 684w, /wp-content/uploads/2018/05/word-image-6074-300x95.png 300w" sizes="(max-width: 684px) 100vw, 684px" /></p>
<p>注意：也是PHP核心开发者之一（目前的最新的PHP7参与其中，并且很大部分的代码都是他贡献的）。和之前Linux私房菜鸟哥不是同一个人（这个鸟哥是台湾，主要是做Linux教程。）但我们yaf的鸟哥是惠新宸（风雪之隅）（之前是在百度工作的时候网名叫做雪候鸟，年龄相对大一点，所以被称为鸟哥。也在新浪微博工作。目前应该是在链家做架构师）</p>
<p><img loading="lazy" decoding="async" width="1046" height="474" class="wp-image-6669" src="/wp-content/uploads/2018/05/word-image-6076.png" srcset="/wp-content/uploads/2018/05/word-image-6076.png 1046w, /wp-content/uploads/2018/05/word-image-6076-300x136.png 300w, /wp-content/uploads/2018/05/word-image-6076-768x348.png 768w, /wp-content/uploads/2018/05/word-image-6076-1024x464.png 1024w" sizes="(max-width: 1046px) 100vw, 1046px" /></p>
<p>相关报道：</p>
<p><a href="http://www.infoq.com/cn/articles/weibo-architect-on-php-development">http://www.infoq.com/cn/articles/weibo-architect-on-php-development</a></p>
<h2>yaf是什么？</h2>
<p><img loading="lazy" decoding="async" width="1054" height="498" class="wp-image-6671" src="/wp-content/uploads/2018/05/word-image-6078.png" srcset="/wp-content/uploads/2018/05/word-image-6078.png 1054w, /wp-content/uploads/2018/05/word-image-6078-300x142.png 300w, /wp-content/uploads/2018/05/word-image-6078-768x363.png 768w, /wp-content/uploads/2018/05/word-image-6078-1024x484.png 1024w" sizes="(max-width: 1054px) 100vw, 1054px" /></p>
<p>注意：yaf框架是使用C语言进行编写的，编程之后编程成一个dll文件作为PHP的扩展进行出现，当PHP引入该扩展后，就在PHP里面内置很多的类库。然后我们就可以直接调用这些类库（等价PHP里面内置的一些功能，例如内置的函数、stdClass内置标准类），注意：同类型的框架还有国外的phalcon框架，也是做为PHP的出现，也是一个高性能的扩展，这类框架的性能折损非常少，性能仅次于原生的PHP。看一下官方的简介：</p>
<p><img loading="lazy" decoding="async" width="1601" height="771" class="wp-image-6673" src="/wp-content/uploads/2018/05/word-image-6080.png" srcset="/wp-content/uploads/2018/05/word-image-6080.png 1601w, /wp-content/uploads/2018/05/word-image-6080-300x144.png 300w, /wp-content/uploads/2018/05/word-image-6080-768x370.png 768w, /wp-content/uploads/2018/05/word-image-6080-1024x493.png 1024w" sizes="(max-width: 1601px) 100vw, 1601px" /></p>
<h2>相关资源</h2>
<p>yaf手册：<a href="http://yaf.laruence.com/">http://yaf.laruence.com/</a></p>
<p>github地址：https://github.com/laruence/yaf</p>
<p>作者博客：<a href="http://www.laruence.com/">http://www.laruence.com/</a></p>
<h1>yaf安装</h1>
<h2>dll扩展下载</h2>
<p>yaf框架是作为PHP的一个扩展存在的，所以我们需要去下载对应的扩展文件，然后在php.ini文件引入即可。</p>
<p>扩展下载地址：</p>
<p><a href="http://pecl.php.net/package/yaf">http://pecl.php.net/package/yaf</a></p>
<p><img loading="lazy" decoding="async" width="1554" height="853" class="wp-image-6675" src="/wp-content/uploads/2018/05/word-image-6082.png" srcset="/wp-content/uploads/2018/05/word-image-6082.png 1554w, /wp-content/uploads/2018/05/word-image-6082-300x165.png 300w, /wp-content/uploads/2018/05/word-image-6082-768x422.png 768w, /wp-content/uploads/2018/05/word-image-6082-1024x562.png 1024w" sizes="(max-width: 1554px) 100vw, 1554px" /></p>
<p>这里我们假设使用的朋友都是使用的windows操作系统，点击DLL下载即可，这里我们一2.3.5为例。接下来我们来到具体的下载页面：</p>
<p><img loading="lazy" decoding="async" width="1580" height="646" class="wp-image-6677" src="/wp-content/uploads/2018/05/word-image-6084.png" srcset="/wp-content/uploads/2018/05/word-image-6084.png 1580w, /wp-content/uploads/2018/05/word-image-6084-300x123.png 300w, /wp-content/uploads/2018/05/word-image-6084-768x314.png 768w, /wp-content/uploads/2018/05/word-image-6084-1024x419.png 1024w" sizes="(max-width: 1580px) 100vw, 1580px" /></p>
<p>版本新的的选择需要严格的依赖phpinfo函数给出的信息</p>
<h2>PHP-ext引入</h2>
<p>将下载后的php_yaf.dll文件复制到PHP的ext扩展目录即可</p>
<p><img loading="lazy" decoding="async" width="1000" height="389" class="wp-image-6680" src="/wp-content/uploads/2018/05/word-image-6087.png" srcset="/wp-content/uploads/2018/05/word-image-6087.png 1000w, /wp-content/uploads/2018/05/word-image-6087-300x117.png 300w, /wp-content/uploads/2018/05/word-image-6087-768x299.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<h2>php.ini配置文件</h2>
<p>最后在php.ini文件最后面中引入如下一段即可：</p>
<p>[yaf]</p>
<p>extension=php_yaf.dll</p>
<p>yaf.environ=product</p>
<p>重复apache后，使用phpinfo函数见到如下信息即代表扩展配置成功。</p>
<p><img loading="lazy" decoding="async" width="1349" height="580" class="wp-image-6682" src="/wp-content/uploads/2018/05/word-image-6089.png" srcset="/wp-content/uploads/2018/05/word-image-6089.png 1349w, /wp-content/uploads/2018/05/word-image-6089-300x129.png 300w, /wp-content/uploads/2018/05/word-image-6089-768x330.png 768w, /wp-content/uploads/2018/05/word-image-6089-1024x440.png 1024w" sizes="(max-width: 1349px) 100vw, 1349px" /></p>
<p>注意：当我们把PHP的yaf扩展引入后，PHP内部就会存在很多的yaf提供的类库，但是yaf官方并没有给出yaf框架的目录文件等信息，但是提供一个官方的建议：yaf框架的目录的组织结构应该如何实现。</p>
<p><img loading="lazy" decoding="async" width="763" height="519" class="wp-image-6685" src="/wp-content/uploads/2018/05/word-image-6091.png" srcset="/wp-content/uploads/2018/05/word-image-6091.png 763w, /wp-content/uploads/2018/05/word-image-6091-300x204.png 300w, /wp-content/uploads/2018/05/word-image-6091-220x150.png 220w" sizes="(max-width: 763px) 100vw, 763px" /></p>
<h1>yaf快速入门</h1>
<h2>项目目录结构</h2>
<p>在成功安装扩展后，我们就可以使用yaf进行开发，但是在开发之前，我们需要规划一个项目开发目录。</p>
<p>当让我们也可以使用官方提供的代码生成工具进行自动生成：</p>
<p><a href="http://www.laruence.com/manual/tutorial.last.html">http://www.laruence.com/manual/tutorial.last.html</a></p>
<p>官方的建议目录如下：</p>
<p>application</p>
<p>│ │ Bootstrap.php</p>
<p>│ ├─common</p>
<p>│ │ functions.php</p>
<p>│ ├─controllers</p>
<p>│ │ Index.php</p>
<p>│ ├─library</p>
<p>│ ├─models</p>
<p>│ │ │ User.php</p>
<p>│ │ │</p>
<p>│ │ └─Db</p>
<p>│ │ Medoo.php</p>
<p>│ ├─modules</p>
<p>│ │ └─Admin</p>
<p>│ │ ├─controllers</p>
<p>│ │ │ Back.php</p>
<p>│ │ └─views</p>
<p>│ ├─plugins</p>
<p>│ └─views</p>
<p>│ └─index</p>
<p>│ index.phtml</p>
<p>├─conf</p>
<p>│ application.ini</p>
<p>│</p>
<p>└─public</p>
<p>index.php</p>
<h2>虚拟主机配置</h2>
<p>需要注意的是，项目的入口文件是放在public目录下的，则我们建立的项目的虚拟主机的目录应该是指定到public目录。一个示例的虚拟主机的配置如下：</p>
<p>&lt;VirtualHost *:80&gt;</p>
<p>DocumentRoot &#8220;C:\phpStudy\WWW\yaf.dev\public&#8221;</p>
<p>ServerName yaf.dev</p>
<p>ServerAlias</p>
<p>&lt;Directory &#8220;C:\phpStudy\WWW\yaf.dev\public&#8221;&gt;</p>
<p>Options Indexes FollowSymLinks ExecCGI</p>
<p>AllowOverride All</p>
<p>Order allow,deny</p>
<p>Allow from all</p>
<p>Require all granted</p>
<p>&lt;/Directory&gt;</p>
<p>&lt;/VirtualHost&gt;</p>
<h2>入口文件编写</h2>
<p>在public目录的index.php文件的内容如下：</p>
<p>需要注意的是，只需要在该文件定义一个常量，然后实例化Yaf_application()，同时传递一个配置文件即可。</p>
<p>&lt;?php</p>
<p>define(&#8220;APPLICATION_PATH&#8221;, realpath(dirname(__FILE__) . &#8216;/../&#8217;));</p>
<p>define(&#8220;APPLICATION_COINFIG_FILE&#8221;,APPLICATION_PATH . &#8220;/conf/application.ini&#8221;);</p>
<p>date_default_timezone_set(&#8216;Asia/Shanghai&#8217;);</p>
<p>$app = new Yaf_Application(APPLICATION_COINFIG_FILE);</p>
<p>$app-&gt;bootstrap()-&gt;run();</p>
<h2>配置文件</h2>
<p>在config目录的application.ini文件里面只需要定义如下的配置内容即可。</p>
<p>[product]</p>
<p>;分号代表注释，支持直接写PHP中的已定义常量</p>
<p>application.directory=APPLICATION_PATH &#8220;/application/&#8221;</p>
<p>通过刚才的手工目录创建和yaf官方提供的代码生成器的创建，我们发现目录创建还是比较繁琐不适合入门的人去捯饬，那我们可以使用默认的目录结构来进行学习。</p>
<p><img loading="lazy" decoding="async" width="789" height="261" class="wp-image-6686" src="/wp-content/uploads/2018/05/word-image-6092.png" srcset="/wp-content/uploads/2018/05/word-image-6092.png 789w, /wp-content/uploads/2018/05/word-image-6092-300x99.png 300w, /wp-content/uploads/2018/05/word-image-6092-768x254.png 768w" sizes="(max-width: 789px) 100vw, 789px" /></p>
<h1>composer管理</h1>
<p>简介</p>
<p>网站：<a href="https://packagist.org/packages/gogery/yaf">https://packagist.org/packages/gogery/yaf</a></p>
<p><img loading="lazy" decoding="async" width="697" height="307" class="wp-image-6688" src="/wp-content/uploads/2018/05/word-image-6094.png" srcset="/wp-content/uploads/2018/05/word-image-6094.png 697w, /wp-content/uploads/2018/05/word-image-6094-300x132.png 300w" sizes="(max-width: 697px) 100vw, 697px" /></p>
<ol>
<li>使用命令创建本地项目 local.yaf.com</li>
</ol>
<p><img loading="lazy" decoding="async" width="1689" height="518" class="wp-image-6690" src="/wp-content/uploads/2018/05/word-image-6096.png" srcset="/wp-content/uploads/2018/05/word-image-6096.png 1689w, /wp-content/uploads/2018/05/word-image-6096-300x92.png 300w, /wp-content/uploads/2018/05/word-image-6096-768x236.png 768w, /wp-content/uploads/2018/05/word-image-6096-1024x314.png 1024w" sizes="(max-width: 1689px) 100vw, 1689px" /></p>
<p>&gt; composer create-project gogery/yaf local.yaf.com</p>
<ol>
<li>生成目录结构</li>
</ol>
<p><img loading="lazy" decoding="async" width="850" height="376" class="wp-image-6692" src="/wp-content/uploads/2018/05/word-image-6098.png" srcset="/wp-content/uploads/2018/05/word-image-6098.png 850w, /wp-content/uploads/2018/05/word-image-6098-300x133.png 300w, /wp-content/uploads/2018/05/word-image-6098-768x340.png 768w" sizes="(max-width: 850px) 100vw, 850px" /></p>
<ol>
<li>配置虚拟主机</li>
</ol>
<p>&lt;VirtualHost *:80&gt;</p>
<p>DocumentRoot &#8220;C:\phpStudy\WWW\local.yaf.com\public&#8221;</p>
<p>ServerName local.yaf.com</p>
<p>ServerAlias</p>
<p>&lt;Directory &#8220;C:\phpStudy\WWW\local.yaf.com\public&#8221;&gt;</p>
<p>Options FollowSymLinks ExecCGI</p>
<p>AllowOverride All</p>
<p>Order allow,deny</p>
<p>Allow from all</p>
<p>Require all granted</p>
<p>&lt;/Directory&gt;</p>
<p>&lt;/VirtualHost&gt;</p>
<ol>
<li>浏览器访问效果</li>
</ol>
<p><img loading="lazy" decoding="async" width="660" height="308" class="wp-image-6694" src="/wp-content/uploads/2018/05/word-image-6100.png" srcset="/wp-content/uploads/2018/05/word-image-6100.png 660w, /wp-content/uploads/2018/05/word-image-6100-300x140.png 300w" sizes="(max-width: 660px) 100vw, 660px" /></p>
<p>建议大家直接使用composer进行目录的管理。</p>
<h1>IDE配置</h1>
<p>注意：yaf框架扩展的引入，在使用的时候内置了很多的类文件，如果没有一个IDE进行代码的提示，我们是很难记得住到底存在哪些类，哪些方法，则我们可以为IDE配置一下代码提示。yaf代码提示的插件。</p>
<p>网站：<a href="https://github.com/elad-yosifon/php-yaf-doc">https://github.com/elad-yosifon/php-yaf-doc</a></p>
<ol>
<li>插件解压</li>
</ol>
<p><img loading="lazy" decoding="async" width="1020" height="415" class="wp-image-6696" src="/wp-content/uploads/2018/05/word-image-6102.png" srcset="/wp-content/uploads/2018/05/word-image-6102.png 1020w, /wp-content/uploads/2018/05/word-image-6102-300x122.png 300w, /wp-content/uploads/2018/05/word-image-6102-768x312.png 768w" sizes="(max-width: 1020px) 100vw, 1020px" /></p>
<ol>
<li>配置phpstorm的插件目录</li>
</ol>
<p><img loading="lazy" decoding="async" width="1869" height="524" class="wp-image-6698" src="/wp-content/uploads/2018/05/word-image-6104.png" srcset="/wp-content/uploads/2018/05/word-image-6104.png 1869w, /wp-content/uploads/2018/05/word-image-6104-300x84.png 300w, /wp-content/uploads/2018/05/word-image-6104-768x215.png 768w, /wp-content/uploads/2018/05/word-image-6104-1024x287.png 1024w" sizes="(max-width: 1869px) 100vw, 1869px" /></p>
<p>配置插件的目录</p>
<p><img loading="lazy" decoding="async" width="1857" height="520" class="wp-image-6700" src="/wp-content/uploads/2018/05/word-image-6106.png" srcset="/wp-content/uploads/2018/05/word-image-6106.png 1857w, /wp-content/uploads/2018/05/word-image-6106-300x84.png 300w, /wp-content/uploads/2018/05/word-image-6106-768x215.png 768w, /wp-content/uploads/2018/05/word-image-6106-1024x287.png 1024w" sizes="(max-width: 1857px) 100vw, 1857px" /></p>
<p>目录结构以及插件都安装完成后，则可以正式的学习yaf框架（yaf框架也是一个单一入口 + MVC架构）。</p>
<p>学习框架主要是从如下几个方面进行学习：（MVC CVM）</p>
<ol>
<li>学习控制器</li>
<li>学习视图</li>
<li>学习模型（但是需要注意的，yaf框架本身是没有提供模型，这个需要用户自己去完成，因为作者觉得pdo已经是一个很好的操作数据库的工具，没必要在写一个，我们会单独的学习一个第三方的模型类 Medoo）</li>
</ol>
<p><img loading="lazy" decoding="async" width="1270" height="424" class="wp-image-6703" src="/wp-content/uploads/2018/05/word-image-6109.png" srcset="/wp-content/uploads/2018/05/word-image-6109.png 1270w, /wp-content/uploads/2018/05/word-image-6109-300x100.png 300w, /wp-content/uploads/2018/05/word-image-6109-768x256.png 768w, /wp-content/uploads/2018/05/word-image-6109-1024x342.png 1024w" sizes="(max-width: 1270px) 100vw, 1270px" /></p>
<ol>
<li>配置文件</li>
<li>&#8230;..</li>
</ol>
<h1>控制器-constrollers</h1>
<p>经过上面的操作，基本的目录结构已经搭建完毕，接下来我们完成我们的第一个控制器的编写。在正式编写控制器之前，我们只要弄清楚如下几个问题，即可快速掌握控制器的使用。</p>
<ol>
<li>控制器写在哪里？</li>
<li>控制器的文件如何命名？</li>
<li>控制器里面的内容如何编写？</li>
<li>控制器里面的方法如何命名？</li>
<li>控制器里面如何载入视图？</li>
<li>控制器里面如何给视图赋值？</li>
<li>如何在视图里面显示控制器的赋值变量？</li>
</ol>
<p>实操：</p>
<ol>
<li>控制器写在哪里？（application/controllers目录）</li>
<li>控制器的文件如何命名？</li>
</ol>
<p><img loading="lazy" decoding="async" width="897" height="252" class="wp-image-6705" src="/wp-content/uploads/2018/05/word-image-6111.png" srcset="/wp-content/uploads/2018/05/word-image-6111.png 897w, /wp-content/uploads/2018/05/word-image-6111-300x84.png 300w, /wp-content/uploads/2018/05/word-image-6111-768x216.png 768w" sizes="(max-width: 897px) 100vw, 897px" /></p>
<ol>
<li>控制器里面的内容如何编写？</li>
</ol>
<p><img loading="lazy" decoding="async" width="1212" height="711" class="wp-image-6706" src="/wp-content/uploads/2018/05/word-image-6112.png" srcset="/wp-content/uploads/2018/05/word-image-6112.png 1212w, /wp-content/uploads/2018/05/word-image-6112-300x176.png 300w, /wp-content/uploads/2018/05/word-image-6112-768x451.png 768w, /wp-content/uploads/2018/05/word-image-6112-1024x601.png 1024w" sizes="(max-width: 1212px) 100vw, 1212px" /></p>
<ol>
<li>控制器里面的方法如何命名？</li>
</ol>
<p><img loading="lazy" decoding="async" width="1702" height="653" class="wp-image-6708" src="/wp-content/uploads/2018/05/word-image-6114.png" srcset="/wp-content/uploads/2018/05/word-image-6114.png 1702w, /wp-content/uploads/2018/05/word-image-6114-300x115.png 300w, /wp-content/uploads/2018/05/word-image-6114-768x295.png 768w, /wp-content/uploads/2018/05/word-image-6114-1024x393.png 1024w" sizes="(max-width: 1702px) 100vw, 1702px" /></p>
<ol>
<li>控制器里面如何载入视图？</li>
</ol>
<p><img loading="lazy" decoding="async" width="1265" height="522" class="wp-image-6710" src="/wp-content/uploads/2018/05/word-image-6116.png" srcset="/wp-content/uploads/2018/05/word-image-6116.png 1265w, /wp-content/uploads/2018/05/word-image-6116-300x124.png 300w, /wp-content/uploads/2018/05/word-image-6116-768x317.png 768w, /wp-content/uploads/2018/05/word-image-6116-1024x423.png 1024w" sizes="(max-width: 1265px) 100vw, 1265px" /></p>
<p>视图创建</p>
<p><img loading="lazy" decoding="async" width="1226" height="646" class="wp-image-6713" src="/wp-content/uploads/2018/05/word-image-6119.png" srcset="/wp-content/uploads/2018/05/word-image-6119.png 1226w, /wp-content/uploads/2018/05/word-image-6119-300x158.png 300w, /wp-content/uploads/2018/05/word-image-6119-768x405.png 768w, /wp-content/uploads/2018/05/word-image-6119-1024x540.png 1024w" sizes="(max-width: 1226px) 100vw, 1226px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="770" height="251" class="wp-image-6715" src="/wp-content/uploads/2018/05/word-image-6121.png" srcset="/wp-content/uploads/2018/05/word-image-6121.png 770w, /wp-content/uploads/2018/05/word-image-6121-300x98.png 300w, /wp-content/uploads/2018/05/word-image-6121-768x250.png 768w" sizes="(max-width: 770px) 100vw, 770px" /></p>
<ol>
<li>控制器里面如何给视图赋值？</li>
</ol>
<p><img loading="lazy" decoding="async" width="1838" height="987" class="wp-image-6717" src="/wp-content/uploads/2018/05/word-image-6123.png" srcset="/wp-content/uploads/2018/05/word-image-6123.png 1838w, /wp-content/uploads/2018/05/word-image-6123-300x161.png 300w, /wp-content/uploads/2018/05/word-image-6123-768x412.png 768w, /wp-content/uploads/2018/05/word-image-6123-1024x550.png 1024w" sizes="(max-width: 1838px) 100vw, 1838px" /></p>
<ol>
<li>如何在视图里面显示控制器的赋值变量？（直接使用原生的PHP输出、yaf内置的模板引擎只支持原生的PHP语法）</li>
</ol>
<p><img loading="lazy" decoding="async" width="1463" height="802" class="wp-image-6719" src="/wp-content/uploads/2018/05/word-image-6125.png" srcset="/wp-content/uploads/2018/05/word-image-6125.png 1463w, /wp-content/uploads/2018/05/word-image-6125-300x164.png 300w, /wp-content/uploads/2018/05/word-image-6125-768x421.png 768w, /wp-content/uploads/2018/05/word-image-6125-1024x561.png 1024w" sizes="(max-width: 1463px) 100vw, 1463px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="995" height="351" class="wp-image-6721" src="/wp-content/uploads/2018/05/word-image-6127.png" srcset="/wp-content/uploads/2018/05/word-image-6127.png 995w, /wp-content/uploads/2018/05/word-image-6127-300x106.png 300w, /wp-content/uploads/2018/05/word-image-6127-768x271.png 768w" sizes="(max-width: 995px) 100vw, 995px" /></p>
<h1>视图-views</h1>
<p>视图主要是用户来展示数据和收集用户的数据。</p>
<p><img loading="lazy" decoding="async" width="1110" height="814" class="wp-image-6722" src="/wp-content/uploads/2018/05/word-image-6128.png" srcset="/wp-content/uploads/2018/05/word-image-6128.png 1110w, /wp-content/uploads/2018/05/word-image-6128-300x220.png 300w, /wp-content/uploads/2018/05/word-image-6128-768x563.png 768w, /wp-content/uploads/2018/05/word-image-6128-1024x751.png 1024w" sizes="(max-width: 1110px) 100vw, 1110px" /></p>
<p>在正式学习视图之前，我们先思考如下几个问题：</p>
<p>1. 视图文件写在哪里？</p>
<p>2. 视图文件如何命名？</p>
<p>3. 如何在控制器里面调用视图，如何获取视图里面的内容？</p>
<p>4. 在控制器里面如何给视图赋值？</p>
<p>5. 如何在视图里面显示控制器的赋值变量？</p>
<p>实操：</p>
<ol>
<li>视图文件写在哪里？（注意：需要注意是存在模块，如果有模块，则写在模块的对应的views目录，没有则写在application/views/目录下）</li>
</ol>
<p><img loading="lazy" decoding="async" width="1499" height="580" class="wp-image-6723" src="/wp-content/uploads/2018/05/word-image-6129.png" srcset="/wp-content/uploads/2018/05/word-image-6129.png 1499w, /wp-content/uploads/2018/05/word-image-6129-300x116.png 300w, /wp-content/uploads/2018/05/word-image-6129-768x297.png 768w, /wp-content/uploads/2018/05/word-image-6129-1024x396.png 1024w" sizes="(max-width: 1499px) 100vw, 1499px" /></p>
<ol>
<li>视图文件如何命名？</li>
</ol>
<p>答：文件的命名满足和方法同名，并且后缀是 phtml</p>
<ol>
<li>如何在控制器里面调用视图，如何获取视图里面的内容？</li>
</ol>
<p>答：yaf框架默认会自动载入视图</p>
<p>如果终止return false 或者 Yaf_Dispatcher::getInstance()-&gt;disableView();</p>
<ol>
<li>在控制器里面如何给视图赋值？</li>
</ol>
<p>答：$this-&gt;getView()-&gt;assign(&#8216;视图调用名称&#8217;, $变量名称)</p>
<ol>
<li>如何在视图里面显示控制器的赋值变量？</li>
</ol>
<p>答：原生的PHP</p>
<p>注意：Yaf_View_Simple 常见方法使用：</p>
<p><img loading="lazy" decoding="async" width="1830" height="950" class="wp-image-6724" src="/wp-content/uploads/2018/05/word-image-6130.png" srcset="/wp-content/uploads/2018/05/word-image-6130.png 1830w, /wp-content/uploads/2018/05/word-image-6130-300x156.png 300w, /wp-content/uploads/2018/05/word-image-6130-768x399.png 768w, /wp-content/uploads/2018/05/word-image-6130-1024x532.png 1024w" sizes="(max-width: 1830px) 100vw, 1830px" /></p>
<h1>yaf模型-models</h1>
<h2>注意</h2>
<p>需要注意的是yaf框架并没有提供模型类，这个需要用户自己去实现，我们可以自己封装一个模型，也可以使用被人提供好的模型类文件，例如如下的一个模型类：</p>
<p>相关文档：<a href="http://medoo.lvtao.net/doc.php">http://medoo.lvtao.net/doc.php</a></p>
<h2>Medoo基本使用</h2>
<ol>
<li>下载</li>
<li>引入</li>
<li>实例化（进行数据库配置）</li>
</ol>
<p>实操：</p>
<p>具体代码参考</p>
<p><img loading="lazy" decoding="async" width="1188" height="695" class="wp-image-6725" src="/wp-content/uploads/2018/05/word-image-6131.png" srcset="/wp-content/uploads/2018/05/word-image-6131.png 1188w, /wp-content/uploads/2018/05/word-image-6131-300x176.png 300w, /wp-content/uploads/2018/05/word-image-6131-768x449.png 768w, /wp-content/uploads/2018/05/word-image-6131-1024x599.png 1024w" sizes="(max-width: 1188px) 100vw, 1188px" /></p>
<h2>模型命名</h2>
<p>注意：yaf框架并没有模型类，但是规定了模型的书写的规则以及加载的实现。</p>
<p>命名、实例化如何加载。</p>
<p>例如：我们打算在application/models/目录下创建一个Goods.php类文件，则类名应该如下：</p>
<p><img loading="lazy" decoding="async" width="1607" height="946" class="wp-image-6726" src="/wp-content/uploads/2018/05/word-image-6132.png" srcset="/wp-content/uploads/2018/05/word-image-6132.png 1607w, /wp-content/uploads/2018/05/word-image-6132-300x177.png 300w, /wp-content/uploads/2018/05/word-image-6132-768x452.png 768w, /wp-content/uploads/2018/05/word-image-6132-1024x603.png 1024w" sizes="(max-width: 1607px) 100vw, 1607px" /></p>
<p>通过上面的操作我们可以很方面的完成模型类的定义，当我们定义好了之后，直接在控制器里面进行实例化即可，yaf框架会自动进行类的载入。</p>
<p>问题：通过上面的操作定义的模型类是直接在application/models目录下定义的，如果现在我们需要在该目录下在建立子目录，然后在子目录里面定义模型，则模型的类名该如何定义？</p>
<p><img loading="lazy" decoding="async" width="1819" height="803" class="wp-image-6727" src="/wp-content/uploads/2018/05/word-image-6133.png" srcset="/wp-content/uploads/2018/05/word-image-6133.png 1819w, /wp-content/uploads/2018/05/word-image-6133-300x132.png 300w, /wp-content/uploads/2018/05/word-image-6133-768x339.png 768w, /wp-content/uploads/2018/05/word-image-6133-1024x452.png 1024w" sizes="(max-width: 1819px) 100vw, 1819px" /></p>
<p>总结：在yaf里面模型的命名是通过下划线来查找类的目录结构。</p>
<h1>yaf模块化-modules</h1>
<h2>配置</h2>
<p>注意：yaf框架默认的目录结构里面使用的Index模块，如果我们需要进行其他的模块的创建，例如配置后台Admin模块，Member模块。则我们需要在application.ini里面进行配置，然后在application/modules/目录创建对应的模块目录，模块目录下创建对应的controllers目录和views目录。</p>
<p>假如我们要新增加一个Member模块用来做后台管理（需要注意的是如果我们使用模块功能，则必须加上Index模块）。则我们需要在application.ini的某个节里面配置如下信息：</p>
<p>application.modules = &#8220;Index,Member&#8221;</p>
<p><img loading="lazy" decoding="async" width="1474" height="642" class="wp-image-6728" src="/wp-content/uploads/2018/05/word-image-6134.png" srcset="/wp-content/uploads/2018/05/word-image-6134.png 1474w, /wp-content/uploads/2018/05/word-image-6134-300x131.png 300w, /wp-content/uploads/2018/05/word-image-6134-768x335.png 768w, /wp-content/uploads/2018/05/word-image-6134-1024x446.png 1024w" sizes="(max-width: 1474px) 100vw, 1474px" /></p>
<h2>新建模块</h2>
<p>需要注意的是：其中Admin目录就和配置的模块名称一致，每个模块目录下都可以新建controllers和views目录用作控制器和视图，但是模块下的models内的文件不支持自动载入，所以在该模块下的一些业务方法只能放在application/models目录下。</p>
<p><img loading="lazy" decoding="async" width="1416" height="583" class="wp-image-6729" src="/wp-content/uploads/2018/05/word-image-6135.png" srcset="/wp-content/uploads/2018/05/word-image-6135.png 1416w, /wp-content/uploads/2018/05/word-image-6135-300x124.png 300w, /wp-content/uploads/2018/05/word-image-6135-768x316.png 768w, /wp-content/uploads/2018/05/word-image-6135-1024x422.png 1024w" sizes="(max-width: 1416px) 100vw, 1416px" /></p>
<p>模块里面的控制器和视图同上面的控制器的使用一致。</p>
<h2>访问</h2>
<p>小写URL访问：</p>
<p>域名/index.php/模块名称/控制器名称/方法名称</p>
<h1>yaf表单-Yaf_Request_Http</h1>
<h2>简介</h2>
<p>在前后台进行交互的过程中，后端程序不可避免的需要接收用户提交的数据，常见的数据有</p>
<ol>
<li>get提交数据</li>
<li>post提交数据</li>
<li>上传文件数据</li>
<li>get查询字符串</li>
<li>cookie数据等等</li>
</ol>
<h2>数据接收</h2>
<p>在控制器里面我们可以通过$this-&gt;getRequest()来进行数据的接收，该方法返回的是<strong><em>Yaf_Request_Http</em></strong>的实例。</p>
<h1>yaf之session-Yaf_Session</h1>
<h2>简介</h2>
<p>由于http请求是无状态的，则在页面交互的过程中，有的时候我们需要跨脚本共享数据，则我们可以使用cookie或者session进行处理，session相对来说更加的安全，yaf框架内置了一个session处理类，可以非常方便的帮助我们进行session的处理。</p>
<h2>使用</h2>
<p>Yaf_Session::getInstance()-&gt;get(&#8216;name&#8217;)</p>
<h1>yaf配置篇-Yaf_Config_Ini</h1>
<h2>简介</h2>
<p>配置文件基本可以说是每个项目都会有，在配置文件中我们通常会配置数据库访问地址、redis连接、url地址等等。</p>
<p>yaf对于配置文件的解析提供了节（section）的支持，并且还支持节之间的继承功能，将节的设置和yaf运行环境（yaf.environ）结合起来就可以达到很好的配置效果，且看如何实现。</p>
<h2>php.ini配置</h2>
<p>在配置php支持yaf的时候，可以设置一个参数yaf.environ：把本地开发设置成develop、测试环境配置成test、生产环境配置成product，如：</p>
<p><img loading="lazy" decoding="async" width="593" height="226" class="wp-image-6730" src="/wp-content/uploads/2018/05/word-image-6136.png" srcset="/wp-content/uploads/2018/05/word-image-6136.png 593w, /wp-content/uploads/2018/05/word-image-6136-300x114.png 300w" sizes="(max-width: 593px) 100vw, 593px" /></p>
<h2>application.ini文件配置</h2>
<p>yaf配置文件一般都放在项目的conf文件夹下。Yaf _Application实例化的时候需要传递一个配置文件路径，假设我们的配置文件叫application.ini，先看下application.ini的结构：</p>
<p>[common]</p>
<p>; 通用配置，数据库配置</p>
<p>resources.database.params.driver = &#8220;pdo_mysql&#8221;</p>
<p>resources.database.params.hostname = &#8220;127.0.0.1&#8221;</p>
<p>resources.database.params.port = 3306</p>
<p>resources.database.params.database = &#8220;database&#8221;</p>
<p>resources.database.params.username = &#8220;username&#8221;</p>
<p>resources.database.params.password = &#8220;password&#8221;</p>
<p>[product : common]</p>
<p>; 生产环境配置，这里的配置除了节之外，节和节之间还有继承关系。例如[product : common]就表示product的配置会继承common的配置。先配置一个数据库连接看看。</p>
<p>[test : common]</p>
<p>; 测试环境配置</p>
<p>[develop : common]</p>
<p>; 开发环境配置</p>
<p>resources.database.params.hostname = &#8220;127.0.0.1&#8221;</p>
<p>resources.database.params.database = &#8220;database&#8221;</p>
<p>resources.database.params.username = &#8220;username&#8221;</p>
<p>resources.database.params.password = &#8220;password&#8221;</p>
<p>这样当项目运行环境在develop下的时候，会优先读取[develop : common]内的配置，如果没有则会从[common]中获取。在项目中任何地方都可以通过如下的方法获取application.ini里面的配置信息：</p>
<p>Yaf_Application::app()-&gt;getConfig();</p>
<h2>额外的配置</h2>
<p>随着项目越来越庞大，配置也会越来越复杂，如果都放在项目默认的配置文件application.ini中，可能配置会有好几百行，这样就不容易维护了。</p>
<p>一般我们会考虑新建配置文件用来存储额外的配置。yaf中提供了Yaf_Config_Ini类来处理这些额外的配置文件。</p>
<p>$config = new Yaf_Config_Ini( APPLICATION_PATH . &#8216;/conf/url.ini&#8217;,  ini_get(&#8216;yaf.environ&#8217;) );</p>
<h1>类的自动载入机制-libraris</h1>
<h2>简介</h2>
<p>在yaf里面类库的默认目录是application下的library目录，比如我们要写一个Page.php类文件，那么我们需要建立这样的application/library/Page.php类文件。</p>
<p>但是需要注意的是，如果我们需要目录进行嵌套，则类的名称应该是使用下划线进行连接，并且路径的首字母应该大写。</p>
<p>例如：我们打算在application/library/目录下，建议一个Dao目录，然后在该目录下建议一个Mysql目录，并在Mysql目录下建立一个Query.php类文件，则类名应该如下：</p>
<p>class Dao_Mysql_Query{</p>
<p>}</p>
<p>通过这样定义的类，yaf框架则可以根据我们的类名来获取对于的路径，实现对应的自动加载机制。</p>
<h1>助手函数扩展-Yaf_Loader</h1>
<p>在Bootstrap.php文件定义一个加载助手函数的公共方法，使用Yaf_Loader进行助手函数文件导入。</p>
<p>public function _initCommonFunctions(){</p>
<p>// 加载定义助手函数</p>
<p>Yaf_Loader::import(APPLICATION_PATH . &#8216;/application/common/functions.php&#8217;);</p>
<p>}</p>
<h1>响应-Yaf_Response_Abstract</h1>
<p>有的时候我们需要进行URL的跳转，则可以使用该类进行响应处理</p>
<h1>路由-Yaf_Route-*</h1>
<h2>简介</h2>
<p>yaf框架支持如下五种路由：</p>
<ol>
<li>Yaf_Route_Simple</li>
</ol>
<p>例如：<a href="http://local.yaf.com/index.php?m=index&amp;c=index&amp;a=index">http://local.yaf.com/index.php?m=index&amp;c=index&amp;a=index</a> （普通路由）</p>
<ol>
<li>Yaf_Route_Supervar</li>
<li>Yaf_Route_Static</li>
<li>Yaf_Route_Rewrite</li>
<li>Yaf_Route_Regex</li>
</ol>
<p>例如：http://local.yaf.com/list-12.html</p>
<h2>简单路由使用-方式一</h2>
<p>创建路由规则的步骤：</p>
<ol>
<li>在Bootstrap.php文件创建一个路由器对象</li>
<li>设置路由规则</li>
<li>调用路由对象的addRoute方法添加路由规则</li>
</ol>
<p>public function _initDefineRouter()</p>
<p>{</p>
<p>$router = Yaf_Dispatcher::getInstance()-&gt;getRouter();</p>
<p>$mac = new Yaf_Route_Simple(&#8216;m&#8217;, &#8216;c&#8217;, &#8216;a&#8217;);</p>
<p>$router-&gt;addRoute(&#8216;mac&#8217;, $mac);</p>
<p>}</p>
<h2>简单路由使用-方式二</h2>
<ol>
<li>在application.ini定义路由段</li>
</ol>
<p>[route]</p>
<p>routes.simple.type=&#8221;simple&#8221;</p>
<p>routes.simple.module=md</p>
<p>routes.simple.controller=c</p>
<p>routes.simple.action=as</p>
<p>[product:route]</p>
<ol>
<li>在Bootstrap.php里面进行配置注册</li>
</ol>
<p>public function _initConfig()</p>
<p>{</p>
<p>$config = new Yaf_Config_Ini(APPLICATION_COINFIG_FILE);</p>
<p>Yaf_Registry::set(&#8220;config&#8221;, $config);</p>
<p>}</p>
<p>public function _initDefineRouter()</p>
<p>{</p>
<p>$router = Yaf_Dispatcher::getInstance()-&gt;getRouter();</p>
<p>$router-&gt;addConfig( Yaf_Registry::get(&#8216;config&#8217;)-&gt;route-&gt;routes );</p>
<p>}</p>
<h2>正则路由-方式一</h2>
<p>1. 直接使用正则类进行生成</p>
<p>$router = Yaf_Dispatcher::getInstance()-&gt;getRouter();</p>
<p>$route = new Yaf_Route_Regex(</p>
<p>&#8216;#^/product/([a-zA-Z-_0-9]+)$#&#8217;,</p>
<p>array(</p>
<p>&#8216;module&#8217; =&gt; &#8216;index&#8217;,</p>
<p>&#8216;controller&#8217; =&gt; &#8216;index&#8217;,</p>
<p>&#8216;action&#8217; =&gt; &#8216;index&#8217;</p>
<p>),</p>
<p>array(</p>
<p>//完成数字到字符变量的映射</p>
<p>1 =&gt; &#8216;ident&#8217;</p>
<p>)</p>
<p>);</p>
<p>$router-&gt;addRoute(&#8216;reg&#8217;, $route);</p>
<h2>正则路由-方式二</h2>
<ol>
<li>在application.ini定义正则路由段</li>
</ol>
<p>[route]</p>
<p>routes.regex.type=&#8221;regex&#8221;</p>
<p>routes.regex.match=&#8221;#^/list/([0-9])+\/([a-z0-9]+)$#&#8221;</p>
<p>routes.regex.route.module=Index</p>
<p>routes.regex.route.controller=Index</p>
<p>routes.regex.route.action=index</p>
<p>routes.regex.map.1=name</p>
<p>routes.regex.map.2=value</p>
<p>[product:route]</p>
<p>2. 在Bootstrap.php里面进行配置注册</p>
<h1>相关学习资料</h1>
<p><a href="http://wiki.phpboy.net/">http://wiki.phpboy.net/</a></p>
<p><a href="http://www.phpabc.cn/yaf-kuang-jia-zhi-phpstrom-dai-ma-zi-dong-bu-quan-yaf-ide-auto-complete-2.html">http://www.phpabc.cn/yaf-kuang-jia-zhi-phpstrom-dai-ma-zi-dong-bu-quan-yaf-ide-auto-complete-2.html</a></p>
<p><a href="http://www.01happy.com/">http://www.01happy.com/</a></p>
<p><a href="http://www.widuu.com/archives/category/yaf-framework-2">http://www.widuu.com/archives/category/yaf-framework-2</a></p>
<p><a href="https://www.mengzhidu.com/">https://www.mengzhidu.com/</a></p>
<p><a href="http://www.php1.cn/detail/php-wentis-c817f8fa3d.html">http://www.php1.cn/detail/php-wentis-c817f8fa3d.html</a></p>
<p><a href="https://segmentfault.com/a/1190000004016373">https://segmentfault.com/a/1190000004016373</a></p>
<p><a href="https://devhub.io/repos/xudianyang-yaf.app">https://devhub.io/repos/xudianyang-yaf.app</a></p>
<p><a href="http://www.oss.io/p/xudianyang/yaf.app">http://www.oss.io/p/xudianyang/yaf.app</a></p>
<h1>案例演示</h1>
<p>使用yaf完成一套curd操作，同时做用户的登录和退出，可以理解完成一个后台的用户模块</p>
<h2>用户展示</h2>
<ol>
<li>定义一个init方法，完成初始化操作</li>
</ol>
<p><img loading="lazy" decoding="async" width="1762" height="752" class="wp-image-6731" src="/wp-content/uploads/2018/05/word-image-6137.png" srcset="/wp-content/uploads/2018/05/word-image-6137.png 1762w, /wp-content/uploads/2018/05/word-image-6137-300x128.png 300w, /wp-content/uploads/2018/05/word-image-6137-768x328.png 768w, /wp-content/uploads/2018/05/word-image-6137-1024x437.png 1024w" sizes="(max-width: 1762px) 100vw, 1762px" /></p>
<ol>
<li>定义一个lst方法，完成数据展示</li>
</ol>
<p><img loading="lazy" decoding="async" width="1327" height="619" class="wp-image-6732" src="/wp-content/uploads/2018/05/word-image-6138.png" srcset="/wp-content/uploads/2018/05/word-image-6138.png 1327w, /wp-content/uploads/2018/05/word-image-6138-300x140.png 300w, /wp-content/uploads/2018/05/word-image-6138-768x358.png 768w, /wp-content/uploads/2018/05/word-image-6138-1024x478.png 1024w" sizes="(max-width: 1327px) 100vw, 1327px" /></p>
<ol>
<li>定义一个lst.phtml视图文件</li>
</ol>
<p><img loading="lazy" decoding="async" width="1857" height="941" class="wp-image-6733" src="/wp-content/uploads/2018/05/word-image-6139.png" srcset="/wp-content/uploads/2018/05/word-image-6139.png 1857w, /wp-content/uploads/2018/05/word-image-6139-300x152.png 300w, /wp-content/uploads/2018/05/word-image-6139-768x389.png 768w, /wp-content/uploads/2018/05/word-image-6139-1024x519.png 1024w" sizes="(max-width: 1857px) 100vw, 1857px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="1213" height="728" class="wp-image-6734" src="/wp-content/uploads/2018/05/word-image-6140.png" srcset="/wp-content/uploads/2018/05/word-image-6140.png 1213w, /wp-content/uploads/2018/05/word-image-6140-300x180.png 300w, /wp-content/uploads/2018/05/word-image-6140-768x461.png 768w, /wp-content/uploads/2018/05/word-image-6140-1024x615.png 1024w" sizes="(max-width: 1213px) 100vw, 1213px" /></p>
<h2>用户添加</h2>
<ol>
<li>定义一个add方法，完成用户添加</li>
</ol>
<p><img loading="lazy" decoding="async" width="1615" height="961" class="wp-image-6735" src="/wp-content/uploads/2018/05/word-image-6141.png" srcset="/wp-content/uploads/2018/05/word-image-6141.png 1615w, /wp-content/uploads/2018/05/word-image-6141-300x179.png 300w, /wp-content/uploads/2018/05/word-image-6141-768x457.png 768w, /wp-content/uploads/2018/05/word-image-6141-1024x609.png 1024w" sizes="(max-width: 1615px) 100vw, 1615px" /></p>
<ol>
<li>定义一个add.phtml视图文件，展示添加表单</li>
</ol>
<p><img loading="lazy" decoding="async" width="1862" height="962" class="wp-image-6736" src="/wp-content/uploads/2018/05/word-image-6142.png" srcset="/wp-content/uploads/2018/05/word-image-6142.png 1862w, /wp-content/uploads/2018/05/word-image-6142-300x155.png 300w, /wp-content/uploads/2018/05/word-image-6142-768x397.png 768w, /wp-content/uploads/2018/05/word-image-6142-1024x529.png 1024w" sizes="(max-width: 1862px) 100vw, 1862px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="926" height="730" class="wp-image-6737" src="/wp-content/uploads/2018/05/word-image-6143.png" srcset="/wp-content/uploads/2018/05/word-image-6143.png 926w, /wp-content/uploads/2018/05/word-image-6143-300x237.png 300w, /wp-content/uploads/2018/05/word-image-6143-768x605.png 768w" sizes="(max-width: 926px) 100vw, 926px" /></p>
<h2>用户删除</h2>
<ol>
<li>定义一个del方法，完成用户删除</li>
</ol>
<p><img loading="lazy" decoding="async" width="1453" height="766" class="wp-image-6738" src="/wp-content/uploads/2018/05/word-image-6144.png" srcset="/wp-content/uploads/2018/05/word-image-6144.png 1453w, /wp-content/uploads/2018/05/word-image-6144-300x158.png 300w, /wp-content/uploads/2018/05/word-image-6144-768x405.png 768w, /wp-content/uploads/2018/05/word-image-6144-1024x540.png 1024w" sizes="(max-width: 1453px) 100vw, 1453px" /></p>
<h2>用户编辑</h2>
<ol>
<li>定义一个edt方法，完成用户编辑</li>
</ol>
<p><img loading="lazy" decoding="async" width="1420" height="1002" class="wp-image-6739" src="/wp-content/uploads/2018/05/word-image-6145.png" srcset="/wp-content/uploads/2018/05/word-image-6145.png 1420w, /wp-content/uploads/2018/05/word-image-6145-300x212.png 300w, /wp-content/uploads/2018/05/word-image-6145-768x542.png 768w, /wp-content/uploads/2018/05/word-image-6145-1024x723.png 1024w" sizes="(max-width: 1420px) 100vw, 1420px" /></p>
<ol>
<li>定义一个edt.phtml视图页面，展示待编辑的数据</li>
</ol>
<p><img loading="lazy" decoding="async" width="1867" height="974" class="wp-image-6740" src="/wp-content/uploads/2018/05/word-image-6146.png" srcset="/wp-content/uploads/2018/05/word-image-6146.png 1867w, /wp-content/uploads/2018/05/word-image-6146-300x157.png 300w, /wp-content/uploads/2018/05/word-image-6146-768x401.png 768w, /wp-content/uploads/2018/05/word-image-6146-1024x534.png 1024w" sizes="(max-width: 1867px) 100vw, 1867px" /></p>
<p>效果</p>
<p><img loading="lazy" decoding="async" width="930" height="590" class="wp-image-6741" src="/wp-content/uploads/2018/05/word-image-6147.png" srcset="/wp-content/uploads/2018/05/word-image-6147.png 930w, /wp-content/uploads/2018/05/word-image-6147-300x190.png 300w, /wp-content/uploads/2018/05/word-image-6147-768x487.png 768w" sizes="(max-width: 930px) 100vw, 930px" /></p>
<h2>用户登录</h2>
<ol>
<li>定义一个login方法，完成用户的登录处理</li>
</ol>
<p><img loading="lazy" decoding="async" width="1640" height="888" class="wp-image-6742" src="/wp-content/uploads/2018/05/word-image-6148.png" srcset="/wp-content/uploads/2018/05/word-image-6148.png 1640w, /wp-content/uploads/2018/05/word-image-6148-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6148-768x416.png 768w, /wp-content/uploads/2018/05/word-image-6148-1024x554.png 1024w" sizes="(max-width: 1640px) 100vw, 1640px" /></p>
<h2>用户退出</h2>
<ol>
<li>定义一个logout方法，完成用户退出</li>
</ol>
<p><img loading="lazy" decoding="async" width="1898" height="922" class="wp-image-6743" src="/wp-content/uploads/2018/05/word-image-6149.png" srcset="/wp-content/uploads/2018/05/word-image-6149.png 1898w, /wp-content/uploads/2018/05/word-image-6149-300x146.png 300w, /wp-content/uploads/2018/05/word-image-6149-768x373.png 768w, /wp-content/uploads/2018/05/word-image-6149-1024x497.png 1024w" sizes="(max-width: 1898px) 100vw, 1898px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6500.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>yii2 框架 安装、目录介绍、路由、模型、视图、控制器、留言板案例</title>
		<link>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6297.html</link>
					<comments>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6297.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 17:28:10 +0000</pubDate>
				<category><![CDATA[Yii]]></category>
		<category><![CDATA[后台框架]]></category>
		<category><![CDATA[安装]]></category>
		<category><![CDATA[控制器]]></category>
		<category><![CDATA[模型]]></category>
		<category><![CDATA[留言板案例]]></category>
		<category><![CDATA[目录介绍]]></category>
		<category><![CDATA[视图]]></category>
		<category><![CDATA[路由]]></category>
		<guid isPermaLink="false">/?p=6297</guid>

					<description><![CDATA[Yii2框架 一、Yii2框架 1、什么是Yii2易框架 就是用PHP语言开发的框架 PHP框架区别和常见问题 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1><a id="post-6297-_Toc487903166"></a>Yii2框架</h1>
<h1><a id="post-6297-_Toc487990951"></a>一、Yii2框架</h1>
<h2>1、什么是Yii2易框架</h2>
<p>
  就是用PHP语言开发的框架
</p>
<h2>PHP框架区别和常见问题</h2>
<h3>1）常用PHP框架</h3>
<p><img loading="lazy" decoding="async" width="151" height="51" src="/wp-content/uploads/2018/05/word-image-5740.png" class="wp-image-6298" srcset="/wp-content/uploads/2018/05/word-image-5740.png 151w, /wp-content/uploads/2018/05/word-image-5740-150x51.png 150w" sizes="(max-width: 151px) 100vw, 151px" /><br />
<img loading="lazy" decoding="async" width="290" height="70" src="/wp-content/uploads/2018/05/word-image-5741.png" class="wp-image-6299" /><br />
<img loading="lazy" decoding="async" width="307" height="77" src="/wp-content/uploads/2018/05/word-image-5742.png" class="wp-image-6300" srcset="/wp-content/uploads/2018/05/word-image-5742.png 307w, /wp-content/uploads/2018/05/word-image-5742-300x75.png 300w" sizes="(max-width: 307px) 100vw, 307px" /><br />
<img loading="lazy" decoding="async" width="253" height="53" src="/wp-content/uploads/2018/05/word-image-5743.png" class="wp-image-6301" /><br />
<img loading="lazy" decoding="async" width="286" height="97" src="/wp-content/uploads/2018/05/word-image-5744.png" class="wp-image-6302" /></p>
<p>
  C语言开发
</p>
<p><img loading="lazy" decoding="async" width="187" height="60" src="/wp-content/uploads/2018/05/word-image-5745.png" class="wp-image-6303" /><br />
<img loading="lazy" decoding="async" width="101" height="66" src="/wp-content/uploads/2018/05/word-image-5746.png" class="wp-image-6304" /></p>
<h3>2）常见问题</h3>
<p>
  问：你觉得XXX框架是轻量级还是重量级？
</p>
<p>
  答：框架帮你做的事越多，框架越重。（其次：设计是否复杂？ 运行速度？ 更接近原生？）
</p>
<p>
  问：一般设计框架的时候都需要权衡？
</p>
<p>
  答：开发效率和运行效率（yaf、Phalcon）。
</p>
<h1>下载并安装</h1>
<h2>︴网址</h2>
<p>
  官网：<a href="/goto/w8q1" rel="nofollow">http://www.yiiframework.com/</a>
</p>
<p>
  中文：<a href="/goto/g3cr" rel="nofollow">http://www.yiichina.com/</a>
</p>
<h2>︴下载</h2>
<p><img loading="lazy" decoding="async" width="516" height="342" src="/wp-content/uploads/2018/05/word-image-5747.png" class="wp-image-6305" srcset="/wp-content/uploads/2018/05/word-image-5747.png 516w, /wp-content/uploads/2018/05/word-image-5747-300x199.png 300w" sizes="(max-width: 516px) 100vw, 516px" /><br />
<img loading="lazy" decoding="async" width="241" height="54" src="/wp-content/uploads/2018/05/word-image-5748.png" class="wp-image-6306" /></p>
<h2>︴使用</h2>
<ul>
<li>
    步骤1：解压到指定目录中
  </li>
<li>
    步骤2：初始化，通过命令【php init】
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="684" height="303" src="/wp-content/uploads/2018/05/word-image-5749.png" class="wp-image-6307" srcset="/wp-content/uploads/2018/05/word-image-5749.png 684w, /wp-content/uploads/2018/05/word-image-5749-300x133.png 300w" sizes="(max-width: 684px) 100vw, 684px" /></p>
<ul>
<li>
    步骤3：访问
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1058" height="594" src="/wp-content/uploads/2018/05/word-image-5750.png" class="wp-image-6308" srcset="/wp-content/uploads/2018/05/word-image-5750.png 1058w, /wp-content/uploads/2018/05/word-image-5750-300x168.png 300w, /wp-content/uploads/2018/05/word-image-5750-768x431.png 768w, /wp-content/uploads/2018/05/word-image-5750-1024x575.png 1024w" sizes="(max-width: 1058px) 100vw, 1058px" /></p>
<h1>三、目录介绍</h1>
<p><img loading="lazy" decoding="async" width="306" height="544" src="/wp-content/uploads/2018/05/word-image-5751.png" class="wp-image-6309" srcset="/wp-content/uploads/2018/05/word-image-5751.png 306w, /wp-content/uploads/2018/05/word-image-5751-169x300.png 169w" sizes="(max-width: 306px) 100vw, 306px" /></p>
<h1>四、控制器</h1>
<p><a href="/goto/7a3e" rel="nofollow">http://l.com/yii2/frontend/web/index.php?r=test/index</a>
</p>
<p><img loading="lazy" decoding="async" width="705" height="559" src="/wp-content/uploads/2018/05/word-image-5752.png" class="wp-image-6310" srcset="/wp-content/uploads/2018/05/word-image-5752.png 705w, /wp-content/uploads/2018/05/word-image-5752-300x238.png 300w" sizes="(max-width: 705px) 100vw, 705px" /></p>
<h1>路由</h1>
<h2>路由访问规则</h2>
<p>
  域名/index.php?r=控制器名/方法名
</p>
<p><img loading="lazy" decoding="async" width="840" height="599" src="/wp-content/uploads/2018/05/word-image-5753.png" class="wp-image-6311" srcset="/wp-content/uploads/2018/05/word-image-5753.png 840w, /wp-content/uploads/2018/05/word-image-5753-300x214.png 300w, /wp-content/uploads/2018/05/word-image-5753-768x548.png 768w" sizes="(max-width: 840px) 100vw, 840px" /></p>
<p>
  &lt;?php
</p>
<p>
  namespace frontend\controllers;
</p>
<p>
  use Yii;
</p>
<p>
  use yii\web\Controller;
</p>
<p>
  /**
</p>
<p>
   * 测试控制器
</p>
<p>
   */
</p>
<p>
  class TestController extends Controller
</p>
<p>
  {
</p>
<p>
      /**
</p>
<p>
       * Displays homepage.
</p>
<p>
       *
</p>
<p>
       * @return mixed
</p>
<p>
       */
</p>
<p>
      public function actionIndex()
</p>
<p>
      {
</p>
<p>
          echo 66666;die;
</p>
<p>
          return $this-&gt;render(&#8216;index&#8217;);
</p>
<p>
      }
</p>
<p>
      public function actionAdd()
</p>
<p>
      {
</p>
<p>
          echo 7777777777;die;
</p>
<p>
      }
</p>
<p>
  }
</p>
<p>
  脚下留心：方法前缀必须是action开头
</p>
<h2>美化路由（自定义路由）</h2>
<p><img loading="lazy" decoding="async" width="834" height="390" src="/wp-content/uploads/2018/05/word-image-5754.png" class="wp-image-6312" srcset="/wp-content/uploads/2018/05/word-image-5754.png 834w, /wp-content/uploads/2018/05/word-image-5754-300x140.png 300w, /wp-content/uploads/2018/05/word-image-5754-768x359.png 768w" sizes="(max-width: 834px) 100vw, 834px" /><br />
<img loading="lazy" decoding="async" width="981" height="662" src="/wp-content/uploads/2018/05/word-image-5755.png" class="wp-image-6313" srcset="/wp-content/uploads/2018/05/word-image-5755.png 981w, /wp-content/uploads/2018/05/word-image-5755-300x202.png 300w, /wp-content/uploads/2018/05/word-image-5755-768x518.png 768w" sizes="(max-width: 981px) 100vw, 981px" /></p>
<h1>六、视图</h1>
<h2>1、语法</h2>
<p>
  加载视图并传递数据（数组中的键后期在视图中直接当变量使用）
</p>
<p>
  return $this-&gt;render(&#8216;index&#8217;, [
</p>
<p>
      &#8216;test1&#8217; =&gt; 111,
</p>
<p>
      &#8216;test2&#8217; =&gt; &#8216;dsfsdfa&#8217;,
</p>
<p>
      &#8216;test3&#8217; =&gt; array(&#8216;name&#8217;, 666, &#8216;aaa&#8217;)
</p>
<p>
  ]);
</p>
<p>
  模板显示数据通过&lt;?= $变量名 ?&gt; （注：&lt;?=   相当于  &lt;?php echo ）
</p>
<h2>2、练习</h2>
<p><img loading="lazy" decoding="async" width="961" height="627" src="/wp-content/uploads/2018/05/word-image-5756.png" class="wp-image-6314" srcset="/wp-content/uploads/2018/05/word-image-5756.png 961w, /wp-content/uploads/2018/05/word-image-5756-300x196.png 300w, /wp-content/uploads/2018/05/word-image-5756-768x501.png 768w" sizes="(max-width: 961px) 100vw, 961px" /><br />
<img loading="lazy" decoding="async" width="783" height="575" src="/wp-content/uploads/2018/05/word-image-5757.png" class="wp-image-6315" srcset="/wp-content/uploads/2018/05/word-image-5757.png 783w, /wp-content/uploads/2018/05/word-image-5757-300x220.png 300w, /wp-content/uploads/2018/05/word-image-5757-768x564.png 768w" sizes="(max-width: 783px) 100vw, 783px" /></p>
<h1>七、模型</h1>
<h2>1、准备</h2>
<ul>
<li>
    模型使用手册：<a href="/goto/cbx3" rel="nofollow">http://blog.csdn.net/ww_smile7/article/details/53410166</a>
  </li>
<li>
    设置数据库配置文件
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1106" height="496" src="/wp-content/uploads/2018/05/word-image-5758.png" class="wp-image-6316" srcset="/wp-content/uploads/2018/05/word-image-5758.png 1106w, /wp-content/uploads/2018/05/word-image-5758-300x135.png 300w, /wp-content/uploads/2018/05/word-image-5758-768x344.png 768w, /wp-content/uploads/2018/05/word-image-5758-1024x459.png 1024w" sizes="(max-width: 1106px) 100vw, 1106px" /></p>
<ul>
<li>
    定义模型
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="809" height="419" src="/wp-content/uploads/2018/05/word-image-5759.png" class="wp-image-6317" srcset="/wp-content/uploads/2018/05/word-image-5759.png 809w, /wp-content/uploads/2018/05/word-image-5759-300x155.png 300w, /wp-content/uploads/2018/05/word-image-5759-768x398.png 768w" sizes="(max-width: 809px) 100vw, 809px" /></p>
<p>
  &lt;?php
</p>
<p>
  namespace common\models;
</p>
<p>
  use Yii;
</p>
<p>
  use yii\db\ActiveRecord;
</p>
<p>
  /**
</p>
<p>
   * Login form
</p>
<p>
   */
</p>
<p>
  class Php12 extends ActiveRecord
</p>
<p>
  {
</p>
</p>
<p>
  }
</p>
<h2>2、练习</h2>
<p>
  查询所有
</p>
<p><img loading="lazy" decoding="async" width="1069" height="666" src="/wp-content/uploads/2018/05/word-image-5760.png" class="wp-image-6318" srcset="/wp-content/uploads/2018/05/word-image-5760.png 1069w, /wp-content/uploads/2018/05/word-image-5760-300x187.png 300w, /wp-content/uploads/2018/05/word-image-5760-768x478.png 768w, /wp-content/uploads/2018/05/word-image-5760-1024x638.png 1024w" sizes="(max-width: 1069px) 100vw, 1069px" /></p>
<p>
  查询一条
</p>
<p><img loading="lazy" decoding="async" width="954" height="521" src="/wp-content/uploads/2018/05/word-image-5761.png" class="wp-image-6319" srcset="/wp-content/uploads/2018/05/word-image-5761.png 954w, /wp-content/uploads/2018/05/word-image-5761-300x164.png 300w, /wp-content/uploads/2018/05/word-image-5761-768x419.png 768w" sizes="(max-width: 954px) 100vw, 954px" /><br />
<img loading="lazy" decoding="async" width="1131" height="514" src="/wp-content/uploads/2018/05/word-image-5762.png" class="wp-image-6320" srcset="/wp-content/uploads/2018/05/word-image-5762.png 1131w, /wp-content/uploads/2018/05/word-image-5762-300x136.png 300w, /wp-content/uploads/2018/05/word-image-5762-768x349.png 768w, /wp-content/uploads/2018/05/word-image-5762-1024x465.png 1024w" sizes="(max-width: 1131px) 100vw, 1131px" /></p>
<p>
  插入
</p>
<p><img loading="lazy" decoding="async" width="1316" height="542" src="/wp-content/uploads/2018/05/word-image-5763.png" class="wp-image-6321" srcset="/wp-content/uploads/2018/05/word-image-5763.png 1316w, /wp-content/uploads/2018/05/word-image-5763-300x124.png 300w, /wp-content/uploads/2018/05/word-image-5763-768x316.png 768w, /wp-content/uploads/2018/05/word-image-5763-1024x422.png 1024w" sizes="(max-width: 1316px) 100vw, 1316px" /></p>
<h1>八、留言板案例</h1>
<h2>︴效果</h2>
<p><img loading="lazy" decoding="async" width="397" height="436" src="/wp-content/uploads/2018/05/word-image-5764.png" class="wp-image-6322" srcset="/wp-content/uploads/2018/05/word-image-5764.png 397w, /wp-content/uploads/2018/05/word-image-5764-273x300.png 273w" sizes="(max-width: 397px) 100vw, 397px" /><br />
<img loading="lazy" decoding="async" width="386" height="315" src="/wp-content/uploads/2018/05/word-image-5765.png" class="wp-image-6323" srcset="/wp-content/uploads/2018/05/word-image-5765.png 386w, /wp-content/uploads/2018/05/word-image-5765-300x245.png 300w" sizes="(max-width: 386px) 100vw, 386px" /></p>
<h2>︴代码</h2>
<h3>准备</h3>
<ul>
<li>
    创建表
  </li>
</ul>
<p>
  create table msg (
</p>
<p>
  id int primary key auto_increment comment &#8216;编号&#8217;,
</p>
<p>
  title varchar(60) not null comment &#8216;标题&#8217;,
</p>
<p>
  `desc` text comment &#8216;描述&#8217;,
</p>
<p>
  created_at int default 0 comment &#8216;创建于&#8217;,
</p>
<p>
  updated_at int default 0 comment &#8216;更新于&#8217;
</p>
<p>
  )engine=myisam charset=utf8;
</p>
<ul>
<li>
    创建模型
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="606" height="340" src="/wp-content/uploads/2018/05/word-image-5766.png" class="wp-image-6324" srcset="/wp-content/uploads/2018/05/word-image-5766.png 606w, /wp-content/uploads/2018/05/word-image-5766-300x168.png 300w" sizes="(max-width: 606px) 100vw, 606px" /></p>
<p>
  &lt;?php
</p>
<p>
  namespace common\models;
</p>
<p>
  use Yii;
</p>
<p>
  use yii\db\ActiveRecord;
</p>
<p>
  /**
</p>
<p>
   * Login form
</p>
<p>
   */
</p>
<p>
  class Msg extends ActiveRecord
</p>
<p>
  {
</p>
</p>
<p>
  }
</p>
<h3>列表功能</h3>
<ul>
<li>
    步骤1：定义路由
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="904" height="489" src="/wp-content/uploads/2018/05/word-image-5767.png" class="wp-image-6325" srcset="/wp-content/uploads/2018/05/word-image-5767.png 904w, /wp-content/uploads/2018/05/word-image-5767-300x162.png 300w, /wp-content/uploads/2018/05/word-image-5767-768x415.png 768w" sizes="(max-width: 904px) 100vw, 904px" /></p>
<ul>
<li>
    步骤2：创建控制器方法、查询所有留言数据并传递给视图
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="762" height="715" src="/wp-content/uploads/2018/05/word-image-5768.png" class="wp-image-6326" srcset="/wp-content/uploads/2018/05/word-image-5768.png 762w, /wp-content/uploads/2018/05/word-image-5768-300x281.png 300w" sizes="(max-width: 762px) 100vw, 762px" /></p>
<p>
  &lt;?php
</p>
<p>
  namespace frontend\controllers;
</p>
<p>
  use Yii;
</p>
<p>
  use common\models\Msg;
</p>
<p>
  use yii\web\Controller;
</p>
<p>
  /**
</p>
<p>
   * 测试控制器
</p>
<p>
   */
</p>
<p>
  class MsgController extends Controller
</p>
<p>
  {
</p>
<p>
      //说明laravel框架有layout模板机制
</p>
<p>
      //声明属性决定layout是否使用
</p>
<p>
      //当前控制器都生效
</p>
<p>
      public $layout = false;
</p>
<p>
      public function actionIndex()
</p>
<p>
      {
</p>
<p>
          //1.查询数据通过模型
</p>
<p>
          $msgs = Msg::find()-&gt;all();
</p>
<p>
          //2.加载视图并传递数据
</p>
<p>
          return $this-&gt;render(&#8216;index&#8217;, [
</p>
<p>
              &#8216;msgs&#8217; =&gt; $msgs
</p>
<p>
          ]);
</p>
<p>
      }
</p>
<p>
  }
</p>
<ul>
<li>
    步骤3：创建视图
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1180" height="697" src="/wp-content/uploads/2018/05/word-image-5769.png" class="wp-image-6328" srcset="/wp-content/uploads/2018/05/word-image-5769.png 1180w, /wp-content/uploads/2018/05/word-image-5769-300x177.png 300w, /wp-content/uploads/2018/05/word-image-5769-768x454.png 768w, /wp-content/uploads/2018/05/word-image-5769-1024x605.png 1024w" sizes="(max-width: 1180px) 100vw, 1180px" /></p>
<ul>
<li>
    步骤4：循环显示数据
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1098" height="496" src="/wp-content/uploads/2018/05/word-image-5770.png" class="wp-image-6329" srcset="/wp-content/uploads/2018/05/word-image-5770.png 1098w, /wp-content/uploads/2018/05/word-image-5770-300x136.png 300w, /wp-content/uploads/2018/05/word-image-5770-768x347.png 768w, /wp-content/uploads/2018/05/word-image-5770-1024x463.png 1024w" sizes="(max-width: 1098px) 100vw, 1098px" /></p>
<p>
  &lt;!DOCTYPE html&gt;
</p>
<p>
  &lt;html&gt;
</p>
<p>
  &lt;head&gt;
</p>
<p>
  	&lt;meta charset=&#8221;utf-8&#8243;&gt;
</p>
<p>
      &lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=utf-8&#8243; /&gt;
</p>
<p>
  	&lt;meta content=&#8221;telephone=no, address=no&#8221; name=&#8221;format-detection&#8221;&gt;
</p>
<p>
  	&lt;meta content=&#8221;width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no&#8221; name=&#8221;viewport&#8221;&gt;
</p>
<p>
      &lt;title&gt;微留言演示案例&lt;/title&gt;
</p>
<p>
      &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;./message/msg.css&#8221; media=&#8221;all&#8221; /&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body id=&#8221;message&#8221; onselectstart=&#8221;return true;&#8221; ondragstart=&#8221;return false;&#8221;&gt;
</p>
<p>
  	&lt;div class=&#8221;container&#8221;&gt;
</p>
<p>
  	  	&lt;div class=&#8221;qiandaobanner&#8221;&gt;
</p>
<p>
  		  	&lt;a href=&#8221;./message&#8221;&gt;
</p>
<p>
  		  		&lt;img src=&#8221;./message/wall.jpg&#8221; style=&#8221;width:100%;&#8221; /&gt;
</p>
<p>
  		  	&lt;/a&gt;
</p>
<p>
  	  	&lt;/div&gt;
</p>
<p>
  		&lt;div class=&#8221;cardexplain&#8221;&gt;
</p>
<p>
  			&lt;div class=&#8221;window&#8221; id=&#8221;windowcenter&#8221;&gt;
</p>
<p>
  				&lt;div id=&#8221;title&#8221; class=&#8221;wtitle&#8221;&gt;操作提示&lt;span class=&#8221;close&#8221; id=&#8221;alertclose&#8221;&gt;&lt;/span&gt;&lt;/div&gt;
</p>
<p>
  				&lt;div class=&#8221;content&#8221;&gt;
</p>
<p>
  					&lt;div id=&#8221;txt&#8221;&gt;&lt;/div&gt;
</p>
<p>
  				&lt;/div&gt;
</p>
<p>
  			&lt;/div&gt;
</p>
<p>
    			&lt;div class=&#8221;history&#8221;&gt;
</p>
<p>
  				&lt;div class=&#8221;history-date&#8221;&gt;
</p>
<p>
  					&lt;ul&gt;
</p>
<p>
  						&lt;?php foreach ($msgs as $msg) :  ?&gt;
</p>
<p>
  						&lt;li class=&#8221;green bounceInDown&#8221;&gt;
</p>
<p>
  							&lt;h3&gt;
</p>
<p>
  								&lt;img src=&#8221;./message/logo100x100.jpg&#8221;&gt;
</p>
<p>
  								&lt;?= $msg-&gt;title ?&gt;
</p>
<p>
  								&lt;span&gt;&lt;?= date(&#8216;Y-m-d&#8217;, $msg-&gt;created_at) ?&gt;&lt;/span&gt;
</p>
<p>
  								&lt;div class=&#8221;clr&#8221;&gt;&lt;/div&gt;
</p>
<p>
  							&lt;/h3&gt;
</p>
<p>
  							&lt;dl&gt;
</p>
<p>
  								&lt;dt class=&#8221;hfinfo&#8221;&gt;&lt;?= $msg-&gt;desc ?&gt;&lt;/dt&gt;
</p>
<p>
  							&lt;/dl&gt;
</p>
<p>
  						&lt;/li&gt;
</p>
<p>
  						&lt;?php  endforeach; ?&gt;
</p>
<p>
  						&lt;li class=&#8221;green bounceInDown nob ly2&#8243; style=&#8221;display:none;&#8221;&gt;
</p>
<p>
  							&lt;form action=&#8221;&#8221; method=&#8221;post&#8221; class=&#8221;form1&#8243;&gt;
</p>
<p>
  							&lt;dl&gt;
</p>
<p>
  								&lt;dt&gt;
</p>
<p>
  									&lt;input name=&#8221;uname&#8221; type=&#8221;text&#8221; class=&#8221;px&#8221; id=&#8221;uname&#8221; value=&#8221;&#8221; placeholder=&#8221;请输入您的昵称&#8221;&gt;
</p>
<p>
  									&lt;/dt&gt;
</p>
<p>
  								&lt;dt&gt;
</p>
<p>
  									&lt;textarea name=&#8221;content&#8221; class=&#8221;pxtextarea&#8221; style=&#8221; height:60px;&#8221; id=&#8221;content&#8221; placeholder=&#8221;请输入留言内容&#8221;&gt;&lt;/textarea&gt;
</p>
<p>
  								&lt;/dt&gt;
</p>
<p>
  								&lt;dt&gt;
</p>
<p>
  									&lt;a class=&#8221;submit&#8221; href=&#8221;javascript:void(0);&#8221;&gt;提交留言&lt;/a&gt;
</p>
<p>
  								&lt;/dt&gt;
</p>
<p>
  							&lt;/dl&gt;
</p>
<p>
  							&lt;/form&gt;
</p>
<p>
  						&lt;/li&gt;
</p>
<p>
  						&lt;a&gt;&lt;h2 class=&#8221;first first2&#8243; style=&#8221;position: relative;&#8221;&gt;点击留言&lt;/h2&gt;&lt;/a&gt;
</p>
<p>
  					&lt;/ul&gt;
</p>
<p>
  				&lt;/div&gt;
</p>
<p>
  			&lt;/div&gt;
</p>
<p>
  		&lt;/div&gt;
</p>
<p>
  	&lt;/div&gt;
</p>
<p>
  	&lt;script type=&#8221;text/javascript&#8221; src=&#8221;./message/jquery.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  	&lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  		$(function(){
</p>
<p>
  			//留言表单显示切换
</p>
<p>
  			$(&#8220;.first1&#8221;).click(function(){
</p>
<p>
  				$(&#8220;.ly1&#8221;).slideToggle();
</p>
<p>
  			});
</p>
<p>
  			$(&#8220;.first2&#8221;).click(function(){
</p>
<p>
  				$(&#8220;.ly2&#8221;).slideToggle();
</p>
<p>
  			});
</p>
<p>
  			//点击提交留言a标签，则提交表单
</p>
<p>
  			$(&#8216;.submit&#8217;).click(function(){
</p>
<p>
  				//判断用户名和密码不能为空
</p>
<p>
  				var uname = $(&#8216;#uname&#8217;).val();
</p>
<p>
  				var content = $(&#8216;#content&#8217;).val();
</p>
<p>
  				if (uname == &#8221; || content == &#8221;) {
</p>
<p>
  					alert(&#8216;请输入昵称或留言内容&#8217;);
</p>
<p>
  					return;
</p>
<p>
  				}
</p>
<p>
  				//提交表单
</p>
<p>
  				$(&#8216;.form1&#8217;).submit();
</p>
<p>
  			});
</p>
<p>
  		});
</p>
<p>
  	&lt;/script&gt;
</p>
<p>
  &lt;/body&gt;
</p>
<p>
  &lt;/html&gt;
</p>
<h3>添加功能</h3>
<ul>
<li>
    定义路由处理添加数据
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="756" height="472" src="/wp-content/uploads/2018/05/word-image-5771.png" class="wp-image-6330" srcset="/wp-content/uploads/2018/05/word-image-5771.png 756w, /wp-content/uploads/2018/05/word-image-5771-300x187.png 300w" sizes="(max-width: 756px) 100vw, 756px" /></p>
<ul>
<li>
    创建控制器方法处理数据
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="818" height="661" src="/wp-content/uploads/2018/05/word-image-5772.png" class="wp-image-6331" srcset="/wp-content/uploads/2018/05/word-image-5772.png 818w, /wp-content/uploads/2018/05/word-image-5772-300x242.png 300w, /wp-content/uploads/2018/05/word-image-5772-768x621.png 768w" sizes="(max-width: 818px) 100vw, 818px" /></p>
<p>
  &lt;?php
</p>
<p>
  namespace frontend\controllers;
</p>
<p>
  use Yii;
</p>
<p>
  use common\models\Msg;
</p>
<p>
  use yii\web\Controller;
</p>
<p>
  /**
</p>
<p>
   * 测试控制器
</p>
<p>
   */
</p>
<p>
  class MsgController extends Controller
</p>
<p>
  {
</p>
<p>
      //说明laravel框架有layout模板机制
</p>
<p>
      //声明属性决定layout是否使用
</p>
<p>
      //当前控制器都生效
</p>
<p>
      public $layout = false;
</p>
<p>
      //关闭cstf验证
</p>
<p>
      public $enableCsrfValidation = false;
</p>
<p>
      //添加
</p>
<p>
      public function actionCreate()
</p>
<p>
      {
</p>
<p>
          //1.判断是否post提交
</p>
<p>
          if (Yii::$app-&gt;request-&gt;isPost) {
</p>
<p>
              //2.接受数据
</p>
<p>
              $title = Yii::$app-&gt;request-&gt;post(&#8216;uname&#8217;);
</p>
<p>
              $desc = Yii::$app-&gt;request-&gt;post(&#8216;content&#8217;);
</p>
<p>
              //3.实例化对象并保存数据
</p>
<p>
              $msg = new Msg;
</p>
<p>
              $msg-&gt;title = $title;
</p>
<p>
              $msg-&gt;desc = $desc;
</p>
<p>
              $msg-&gt;created_at = time();
</p>
<p>
              $msg-&gt;updated_at = time();
</p>
<p>
              $rs = $msg-&gt;save();
</p>
<p>
              return $this-&gt;redirect([&#8216;/msg&#8217;]);
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
      //列表
</p>
<p>
      public function actionIndex()
</p>
<p>
      {
</p>
<p>
          //1.查询数据通过模型
</p>
<p>
          $msgs = Msg::find()-&gt;all();
</p>
<p>
          //2.加载视图并传递数据
</p>
<p>
          return $this-&gt;render(&#8216;index&#8217;, [
</p>
<p>
              &#8216;msgs&#8217; =&gt; $msgs
</p>
<p>
          ]);
</p>
<p>
      }
</p>
<p>
  }
</p>
<p><img loading="lazy" decoding="async" width="717" height="382" src="/wp-content/uploads/2018/05/word-image-5773.png" class="wp-image-6332" srcset="/wp-content/uploads/2018/05/word-image-5773.png 717w, /wp-content/uploads/2018/05/word-image-5773-300x160.png 300w" sizes="(max-width: 717px) 100vw, 717px" /><br />
<img loading="lazy" decoding="async" width="792" height="446" src="/wp-content/uploads/2018/05/word-image-5774.png" class="wp-image-6333" srcset="/wp-content/uploads/2018/05/word-image-5774.png 792w, /wp-content/uploads/2018/05/word-image-5774-300x169.png 300w, /wp-content/uploads/2018/05/word-image-5774-768x432.png 768w" sizes="(max-width: 792px) 100vw, 792px" /></p>
<p>
  多学一招：
</p>
<p>
  Yii::$app-&gt;request-&gt;isPost
</p>
<p>
  Yii::$app-&gt;request-&gt;post(键)</p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6297.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Laravel框架（一）安装、Composer、目录结构、路由、模型、视图、控制器</title>
		<link>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6202.html</link>
					<comments>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6202.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 16:19:00 +0000</pubDate>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[后台框架]]></category>
		<category><![CDATA[Composer]]></category>
		<category><![CDATA[安装]]></category>
		<category><![CDATA[控制器]]></category>
		<category><![CDATA[模型]]></category>
		<category><![CDATA[目录结构]]></category>
		<category><![CDATA[视图]]></category>
		<category><![CDATA[路由]]></category>
		<guid isPermaLink="false">/?p=6202</guid>

					<description><![CDATA[Laravel框架第1天 一、Laravel概述 1、Laravel框架简介 Laravel是一套简洁、优雅的 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>Laravel框架第1天</h1>
<h1>一、Laravel概述</h1>
<h2>1、Laravel框架简介</h2>
<ul>
<li>
    Laravel是一套简洁、优雅的PHP WEB开发框架（目前最流行的PHP框架，
  </li>
</ul>
<p>
  基于symfony开发）
</p>
<ul>
<li>
    具有富于表达性且简洁的语法。更加语意化
  </li>
<li>
    Laravel是易于理解且强大的，它提供了强大的工具用于开发大型、健壮的应用，如：
  </li>
</ul>
<p>
  验证、反向路由、会话技术、缓存、数据迁移、单元测试等等常用工具和功能
</p>
<h2>2、什么是Laravel</h2>
<p>
  就是用PHP写的框架
</p>
<h2>3、Laravel框架相对于其他框架优势</h2>
<p>
  强大路由（route）
</p>
<p>
  命令行工具（artisan）：加快项目开发（很多手动的工作都自动了）
</p>
<p>
  blade模版：可继承、渲染速度快、简化view开发和管理
</p>
<p>
  数据迁移（Migrations）: 管理数据库和版本控制
</p>
<p>
  单元测试（PHPUnit）：保证稳定性（便于发现问题，无论是需求更变还是代码本
</p>
<p>
  身的bug及代码重构）
</p>
<p>
  支持Composer：项目组件管理工具
</p>
<h1>二、Laravel的安装</h1>
<h2> 准备：PHP运行环境</h2>
<h3>a. 环境要求</h3>
<p><img loading="lazy" decoding="async" width="321" height="133" src="/wp-content/uploads/2018/05/word-image-5647.png" class="wp-image-6203" srcset="/wp-content/uploads/2018/05/word-image-5647.png 321w, /wp-content/uploads/2018/05/word-image-5647-300x124.png 300w" sizes="(max-width: 321px) 100vw, 321px" /></p>
<h3>b. 通过phpStudy搭建PHP运行环境</h3>
<p><img loading="lazy" decoding="async" width="557" height="339" src="/wp-content/uploads/2018/05/word-image-5648.png" class="wp-image-6204" srcset="/wp-content/uploads/2018/05/word-image-5648.png 557w, /wp-content/uploads/2018/05/word-image-5648-300x183.png 300w" sizes="(max-width: 557px) 100vw, 557px" /><br />
<img loading="lazy" decoding="async" width="290" height="125" src="/wp-content/uploads/2018/05/word-image-5649.png" class="wp-image-6205" /><br />
<img loading="lazy" decoding="async" width="395" height="346" src="/wp-content/uploads/2018/05/word-image-5650.png" class="wp-image-6206" srcset="/wp-content/uploads/2018/05/word-image-5650.png 395w, /wp-content/uploads/2018/05/word-image-5650-300x263.png 300w" sizes="(max-width: 395px) 100vw, 395px" /></p>
<h3>c. PHP相关配置（修改并保存）</h3>
<p><strong>1）切换PHP版本</strong>
</p>
<p><img loading="lazy" decoding="async" width="890" height="659" src="/wp-content/uploads/2018/05/word-image-5651.png" class="wp-image-6207" srcset="/wp-content/uploads/2018/05/word-image-5651.png 890w, /wp-content/uploads/2018/05/word-image-5651-300x222.png 300w, /wp-content/uploads/2018/05/word-image-5651-768x569.png 768w" sizes="(max-width: 890px) 100vw, 890px" /></p>
<p><strong>2）开启openssl、mbstring、pdo、fileinfo扩展</strong>
</p>
<p><img loading="lazy" decoding="async" width="1022" height="405" src="/wp-content/uploads/2018/05/word-image-5652.png" class="wp-image-6208" srcset="/wp-content/uploads/2018/05/word-image-5652.png 1022w, /wp-content/uploads/2018/05/word-image-5652-300x119.png 300w, /wp-content/uploads/2018/05/word-image-5652-768x304.png 768w" sizes="(max-width: 1022px) 100vw, 1022px" /><br />
<img loading="lazy" decoding="async" width="393" height="373" src="/wp-content/uploads/2018/05/word-image-5653.png" class="wp-image-6209" srcset="/wp-content/uploads/2018/05/word-image-5653.png 393w, /wp-content/uploads/2018/05/word-image-5653-300x285.png 300w" sizes="(max-width: 393px) 100vw, 393px" /></p>
<ol>
<li><strong>修改时区</strong>
</li>
</ol>
<p><img loading="lazy" decoding="async" width="417" height="214" src="/wp-content/uploads/2018/05/word-image-5654.png" class="wp-image-6210" srcset="/wp-content/uploads/2018/05/word-image-5654.png 417w, /wp-content/uploads/2018/05/word-image-5654-300x154.png 300w" sizes="(max-width: 417px) 100vw, 417px" /></p>
<ol>
<li><strong>验证</strong>
</li>
</ol>
<p><img loading="lazy" decoding="async" width="386" height="320" src="/wp-content/uploads/2018/05/word-image-5655.png" class="wp-image-6211" srcset="/wp-content/uploads/2018/05/word-image-5655.png 386w, /wp-content/uploads/2018/05/word-image-5655-300x249.png 300w" sizes="(max-width: 386px) 100vw, 386px" /><br />
<img loading="lazy" decoding="async" width="540" height="486" src="/wp-content/uploads/2018/05/word-image-5656.png" class="wp-image-6212" srcset="/wp-content/uploads/2018/05/word-image-5656.png 540w, /wp-content/uploads/2018/05/word-image-5656-300x270.png 300w" sizes="(max-width: 540px) 100vw, 540px" /><br />
<img loading="lazy" decoding="async" width="1081" height="216" src="/wp-content/uploads/2018/05/word-image-5657.png" class="wp-image-6213" srcset="/wp-content/uploads/2018/05/word-image-5657.png 1081w, /wp-content/uploads/2018/05/word-image-5657-300x60.png 300w, /wp-content/uploads/2018/05/word-image-5657-768x153.png 768w, /wp-content/uploads/2018/05/word-image-5657-1024x205.png 1024w" sizes="(max-width: 1081px) 100vw, 1081px" /><br />
<img loading="lazy" decoding="async" width="1086" height="289" src="/wp-content/uploads/2018/05/word-image-5658.png" class="wp-image-6214" srcset="/wp-content/uploads/2018/05/word-image-5658.png 1086w, /wp-content/uploads/2018/05/word-image-5658-300x80.png 300w, /wp-content/uploads/2018/05/word-image-5658-768x204.png 768w, /wp-content/uploads/2018/05/word-image-5658-1024x273.png 1024w" sizes="(max-width: 1086px) 100vw, 1086px" /><br />
<img loading="lazy" decoding="async" width="938" height="336" src="/wp-content/uploads/2018/05/word-image-5659.png" class="wp-image-6215" srcset="/wp-content/uploads/2018/05/word-image-5659.png 938w, /wp-content/uploads/2018/05/word-image-5659-300x107.png 300w, /wp-content/uploads/2018/05/word-image-5659-768x275.png 768w" sizes="(max-width: 938px) 100vw, 938px" /></p>
<h3>d. 设置PHP环境变量</h3>
<p><img loading="lazy" decoding="async" width="260" height="362" src="/wp-content/uploads/2018/05/word-image-5660.png" class="wp-image-6216" srcset="/wp-content/uploads/2018/05/word-image-5660.png 260w, /wp-content/uploads/2018/05/word-image-5660-215x300.png 215w" sizes="(max-width: 260px) 100vw, 260px" /><br />
<img loading="lazy" decoding="async" width="1267" height="711" src="/wp-content/uploads/2018/05/word-image-5661.png" class="wp-image-6217" srcset="/wp-content/uploads/2018/05/word-image-5661.png 1267w, /wp-content/uploads/2018/05/word-image-5661-300x168.png 300w, /wp-content/uploads/2018/05/word-image-5661-768x431.png 768w, /wp-content/uploads/2018/05/word-image-5661-1024x575.png 1024w" sizes="(max-width: 1267px) 100vw, 1267px" /></p>
<p>
  验证是否设置成功
</p>
<p><img loading="lazy" decoding="async" width="500" height="185" src="/wp-content/uploads/2018/05/word-image-5662.png" class="wp-image-6218" srcset="/wp-content/uploads/2018/05/word-image-5662.png 500w, /wp-content/uploads/2018/05/word-image-5662-300x111.png 300w" sizes="(max-width: 500px) 100vw, 500px" /></p>
<h3>e. 创建虚拟主机</h3>
<ol>
<li>
  修改C:\Windows\System32\drivers\etc\hosts文件
</li>
</ol>
<p><img loading="lazy" decoding="async" width="432" height="156" src="/wp-content/uploads/2018/05/word-image-5663.png" class="wp-image-6219" srcset="/wp-content/uploads/2018/05/word-image-5663.png 432w, /wp-content/uploads/2018/05/word-image-5663-300x108.png 300w" sizes="(max-width: 432px) 100vw, 432px" /></p>
<ol>
<li>
  创建文件e:\www\test.php文件
</li>
</ol>
<p><img loading="lazy" decoding="async" width="478" height="224" src="/wp-content/uploads/2018/05/word-image-5664.png" class="wp-image-6220" srcset="/wp-content/uploads/2018/05/word-image-5664.png 478w, /wp-content/uploads/2018/05/word-image-5664-300x141.png 300w" sizes="(max-width: 478px) 100vw, 478px" /></p>
<ol>
<li>
  新增虚拟主机
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1001" height="638" src="/wp-content/uploads/2018/05/word-image-5665.png" class="wp-image-6221" srcset="/wp-content/uploads/2018/05/word-image-5665.png 1001w, /wp-content/uploads/2018/05/word-image-5665-300x191.png 300w, /wp-content/uploads/2018/05/word-image-5665-768x489.png 768w" sizes="(max-width: 1001px) 100vw, 1001px" /></p>
<p>
  发现：直接输入网址不加具体访问的php文件名则显示403 Forbidden
</p>
<p>
  解决：
</p>
<p><img loading="lazy" decoding="async" width="1173" height="421" src="/wp-content/uploads/2018/05/word-image-5666.png" class="wp-image-6222" srcset="/wp-content/uploads/2018/05/word-image-5666.png 1173w, /wp-content/uploads/2018/05/word-image-5666-300x108.png 300w, /wp-content/uploads/2018/05/word-image-5666-768x276.png 768w, /wp-content/uploads/2018/05/word-image-5666-1024x368.png 1024w" sizes="(max-width: 1173px) 100vw, 1173px" /></p>
<h2>1、安装方式</h2>
<ul>
<li>
    方法1：直接下载源代码安装
  </li>
<li>
    方法2：通过composer安装
  </li>
</ul>
<h2>2、直接下载源代码安装【方法1】</h2>
<h3>步骤1：下载</h3>
<p>
  下载地址：<a href="http://laravelacademy.org/resources-download">http://laravelacademy.org/resources-download</a>
</p>
<p><img loading="lazy" decoding="async" width="121" height="126" src="/wp-content/uploads/2018/05/word-image-5667.png" class="wp-image-6223" /></p>
<h3>步骤2：解压到指定虚拟主机目录</h3>
<p><img loading="lazy" decoding="async" width="682" height="348" src="/wp-content/uploads/2018/05/word-image-5668.png" class="wp-image-6224" srcset="/wp-content/uploads/2018/05/word-image-5668.png 682w, /wp-content/uploads/2018/05/word-image-5668-300x153.png 300w" sizes="(max-width: 682px) 100vw, 682px" /></p>
<h3>步骤3：访问（注：入口文件在public目录下）</h3>
<p><img loading="lazy" decoding="async" width="533" height="396" src="/wp-content/uploads/2018/05/word-image-5669.png" class="wp-image-6225" srcset="/wp-content/uploads/2018/05/word-image-5669.png 533w, /wp-content/uploads/2018/05/word-image-5669-300x223.png 300w" sizes="(max-width: 533px) 100vw, 533px" /></p>
<h2>3、通过Composer安装Laravel【方法2】</h2>
<h3>1）什么是Composer</h3>
<p><img loading="lazy" decoding="async" width="233" height="272" src="/wp-content/uploads/2018/05/word-image-5670.png" class="wp-image-6226" /></p>
<ul>
<li>
    介绍：是 PHP 用来管理依赖（dependency）关系的工具。你可以在自己的项目中
  </li>
</ul>
<p>
  声明所依赖的外部工具库（libraries），Composer 会帮你安装这些依赖的库文件。
</p>
<ul>
<li>
    理解：
  </li>
<li>
    如果PHP是win操作系统，composer就是杀毒软件的软件管家
  </li>
<li>
    如果PHP是Linux操作系统，composer就是yum
  </li>
</ul>
<p>
  之前：项目中需要发送邮件、验证码等功能必须自己去网上下载整合到项目中
</p>
<p>
  现在：通过composer命令安装自动整合到项目中
</p>
<ul>
<li>
    总结：
  </li>
<li>
    Composer是为PHP准备的软件管家，项目所需工具库都可以通过Composer下载
  </li>
</ul>
<h3>2）下载Composer</h3>
<ul>
<li>
    官方网站：<a href="https://getcomposer.org/">https://getcomposer.org/</a>
  </li>
<li>
    中文网站：<a href="http://www.phpcomposer.com/">http://www.phpcomposer.com/</a>
  </li>
</ul>
<p><strong>【方法1】</strong>
</p>
<ul>
<li>
    下载composer-setup.exe文件安装
  </li>
<li>
    好处：傻瓜式、安装简单
  </li>
<li>
    坏处：容易报错、仅win操作系统使用
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="568" height="380" src="/wp-content/uploads/2018/05/word-image-5671.png" class="wp-image-6227" srcset="/wp-content/uploads/2018/05/word-image-5671.png 568w, /wp-content/uploads/2018/05/word-image-5671-300x201.png 300w" sizes="(max-width: 568px) 100vw, 568px" /></p>
<p><strong>【方法2】</strong>
</p>
<ul>
<li>
    下载composer.phar文件安装
  </li>
<li>
    好处：跨平台
  </li>
<li>
    坏处：渣渣上手难
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="678" height="313" src="/wp-content/uploads/2018/05/word-image-5672.png" class="wp-image-6228" srcset="/wp-content/uploads/2018/05/word-image-5672.png 678w, /wp-content/uploads/2018/05/word-image-5672-300x138.png 300w" sizes="(max-width: 678px) 100vw, 678px" /></p>
<h3>■ 方法1：通过composer-setup.exe安装</h3>
<p><strong>步骤1：双击</strong>
</p>
<p><img loading="lazy" decoding="async" width="425" height="144" src="/wp-content/uploads/2018/05/word-image-5673.png" class="wp-image-6229" srcset="/wp-content/uploads/2018/05/word-image-5673.png 425w, /wp-content/uploads/2018/05/word-image-5673-300x102.png 300w" sizes="(max-width: 425px) 100vw, 425px" /></p>
<p><strong>步骤2：安装（注：除下图选择php.exe其余直接下一步next）:</strong>
</p>
<p><img loading="lazy" decoding="async" width="553" height="271" src="/wp-content/uploads/2018/05/word-image-5674.png" class="wp-image-6230" srcset="/wp-content/uploads/2018/05/word-image-5674.png 553w, /wp-content/uploads/2018/05/word-image-5674-300x147.png 300w" sizes="(max-width: 553px) 100vw, 553px" /></p>
<p><strong>步骤3：检查是否安装成功（在DOS窗口输入 composer出现下图字样则安装成功）</strong>
</p>
<p><img loading="lazy" decoding="async" width="647" height="318" src="/wp-content/uploads/2018/05/word-image-5675.png" class="wp-image-6231" srcset="/wp-content/uploads/2018/05/word-image-5675.png 647w, /wp-content/uploads/2018/05/word-image-5675-300x147.png 300w" sizes="(max-width: 647px) 100vw, 647px" /></p>
<h3>■ 方法2：通过composer.phar文件安装</h3>
<p><strong>步骤1：该文件免安装所以可以直接使用</strong>
</p>
<p><strong>步骤2：检查是否安装成功（在DOS窗口输入 composer出现下图字样则安装成功）</strong>
</p>
<p><img loading="lazy" decoding="async" width="806" height="318" src="/wp-content/uploads/2018/05/word-image-5676.png" class="wp-image-6232" srcset="/wp-content/uploads/2018/05/word-image-5676.png 806w, /wp-content/uploads/2018/05/word-image-5676-300x118.png 300w, /wp-content/uploads/2018/05/word-image-5676-768x303.png 768w" sizes="(max-width: 806px) 100vw, 806px" /></p>
<h3>3）Composer命令</h3>
<ul>
<li>
    复杂：php composer.phar 指令
  </li>
<li>
    简化：composer 指令
  </li>
</ul>
<p>
  说明：后期大量使用composer命令，语法：【php composer.phar 指令】
</p>
<p>
  发现：每次重复敲【php composer.phar】太长
</p>
<p>
  解决：
</p>
<ol>
<li>
  将composer.phar放到www目录中然后输入DOS命令
</li>
</ol>
<p>
  【echo @php &#8220;%~dp0composer.phar&#8221; %*&gt;composer.bat】后发现www目录下新增了.bat文件将其加入环境变量即可
</p>
<p><img loading="lazy" decoding="async" width="722" height="190" src="/wp-content/uploads/2018/05/word-image-5677.png" class="wp-image-6233" srcset="/wp-content/uploads/2018/05/word-image-5677.png 722w, /wp-content/uploads/2018/05/word-image-5677-300x79.png 300w" sizes="(max-width: 722px) 100vw, 722px" /></p>
<p>
  2）将composer.bat将去环境变量
</p>
<p><img loading="lazy" decoding="async" width="1248" height="717" src="/wp-content/uploads/2018/05/word-image-5678.png" class="wp-image-6234" srcset="/wp-content/uploads/2018/05/word-image-5678.png 1248w, /wp-content/uploads/2018/05/word-image-5678-300x172.png 300w, /wp-content/uploads/2018/05/word-image-5678-768x441.png 768w, /wp-content/uploads/2018/05/word-image-5678-1024x588.png 1024w" sizes="(max-width: 1248px) 100vw, 1248px" /></p>
<p>
  3）验证
</p>
<p><img loading="lazy" decoding="async" width="464" height="255" src="/wp-content/uploads/2018/05/word-image-5679.png" class="wp-image-6235" srcset="/wp-content/uploads/2018/05/word-image-5679.png 464w, /wp-content/uploads/2018/05/word-image-5679-300x165.png 300w" sizes="(max-width: 464px) 100vw, 464px" /></p>
<h3>安装Laravel（后天详细讲解）</h3>
<p>
  步骤1：配置通过国内镜像下载
</p>
<p>
  composer config -g repo.packagist composer <a href="https://packagist.phpcomposer.com/">https://packagist.phpcomposer.com/</a>
</p>
<p>
  步骤2：通过Composer下载框架
</p>
<p>
  composer create-project laravel/laravel test_laravel
</p>
<p><img loading="lazy" decoding="async" width="1135" height="509" src="/wp-content/uploads/2018/05/word-image-5680.png" class="wp-image-6236" srcset="/wp-content/uploads/2018/05/word-image-5680.png 1135w, /wp-content/uploads/2018/05/word-image-5680-300x135.png 300w, /wp-content/uploads/2018/05/word-image-5680-768x344.png 768w, /wp-content/uploads/2018/05/word-image-5680-1024x459.png 1024w" sizes="(max-width: 1135px) 100vw, 1135px" /><br />
<img loading="lazy" decoding="async" width="777" height="518" src="/wp-content/uploads/2018/05/word-image-5681.png" class="wp-image-6237" srcset="/wp-content/uploads/2018/05/word-image-5681.png 777w, /wp-content/uploads/2018/05/word-image-5681-300x200.png 300w, /wp-content/uploads/2018/05/word-image-5681-768x512.png 768w" sizes="(max-width: 777px) 100vw, 777px" /></p>
<h1>三、Laravel目录结构分析</h1>
<h2>1、整体目录</h2>
<p><img loading="lazy" decoding="async" width="440" height="606" src="/wp-content/uploads/2018/05/word-image-5682.png" class="wp-image-6238" srcset="/wp-content/uploads/2018/05/word-image-5682.png 440w, /wp-content/uploads/2018/05/word-image-5682-218x300.png 218w" sizes="(max-width: 440px) 100vw, 440px" /></p>
<h2>2、app目录</h2>
<p><img loading="lazy" decoding="async" width="451" height="265" src="/wp-content/uploads/2018/05/word-image-5683.png" class="wp-image-6239" srcset="/wp-content/uploads/2018/05/word-image-5683.png 451w, /wp-content/uploads/2018/05/word-image-5683-300x176.png 300w" sizes="(max-width: 451px) 100vw, 451px" /></p>
<h2>3、Http目录</h2>
<p><img loading="lazy" decoding="async" width="551" height="493" src="/wp-content/uploads/2018/05/word-image-5684.png" class="wp-image-6240" srcset="/wp-content/uploads/2018/05/word-image-5684.png 551w, /wp-content/uploads/2018/05/word-image-5684-300x268.png 300w" sizes="(max-width: 551px) 100vw, 551px" /></p>
<h2>4、boostrap目录</h2>
<p><img loading="lazy" decoding="async" width="1004" height="489" src="/wp-content/uploads/2018/05/word-image-5685.png" class="wp-image-6241" srcset="/wp-content/uploads/2018/05/word-image-5685.png 1004w, /wp-content/uploads/2018/05/word-image-5685-300x146.png 300w, /wp-content/uploads/2018/05/word-image-5685-768x374.png 768w" sizes="(max-width: 1004px) 100vw, 1004px" /></p>
<h2>5、config目录</h2>
<p><img loading="lazy" decoding="async" width="432" height="452" src="/wp-content/uploads/2018/05/word-image-5686.png" class="wp-image-6242" srcset="/wp-content/uploads/2018/05/word-image-5686.png 432w, /wp-content/uploads/2018/05/word-image-5686-287x300.png 287w" sizes="(max-width: 432px) 100vw, 432px" /></p>
<h2>6、database目录</h2>
<p><img loading="lazy" decoding="async" width="403" height="276" src="/wp-content/uploads/2018/05/word-image-5687.png" class="wp-image-6243" srcset="/wp-content/uploads/2018/05/word-image-5687.png 403w, /wp-content/uploads/2018/05/word-image-5687-300x205.png 300w, /wp-content/uploads/2018/05/word-image-5687-220x150.png 220w" sizes="(max-width: 403px) 100vw, 403px" /></p>
<h2>7、public目录</h2>
<p><img loading="lazy" decoding="async" width="438" height="469" src="/wp-content/uploads/2018/05/word-image-5688.png" class="wp-image-6244" srcset="/wp-content/uploads/2018/05/word-image-5688.png 438w, /wp-content/uploads/2018/05/word-image-5688-280x300.png 280w" sizes="(max-width: 438px) 100vw, 438px" /></p>
<p>
  为什么public下比tp32安全
</p>
<p>
  为什么tp32每个目录下都要新建index.html文件
</p>
<h2>8、resource目录</h2>
<p><img loading="lazy" decoding="async" width="496" height="498" src="/wp-content/uploads/2018/05/word-image-5689.png" class="wp-image-6245" srcset="/wp-content/uploads/2018/05/word-image-5689.png 496w, /wp-content/uploads/2018/05/word-image-5689-150x150.png 150w, /wp-content/uploads/2018/05/word-image-5689-300x300.png 300w" sizes="(max-width: 496px) 100vw, 496px" /></p>
<h2>9、storage目录</h2>
<p><img loading="lazy" decoding="async" width="484" height="315" src="/wp-content/uploads/2018/05/word-image-5690.png" class="wp-image-6246" srcset="/wp-content/uploads/2018/05/word-image-5690.png 484w, /wp-content/uploads/2018/05/word-image-5690-300x195.png 300w" sizes="(max-width: 484px) 100vw, 484px" /></p>
<h2>10、vendor目录</h2>
<p><img loading="lazy" decoding="async" width="518" height="510" src="/wp-content/uploads/2018/05/word-image-5691.png" class="wp-image-6247" srcset="/wp-content/uploads/2018/05/word-image-5691.png 518w, /wp-content/uploads/2018/05/word-image-5691-300x295.png 300w" sizes="(max-width: 518px) 100vw, 518px" /></p>
<h2>11、.env文件</h2>
<p><img loading="lazy" decoding="async" width="992" height="643" src="/wp-content/uploads/2018/05/word-image-5692.png" class="wp-image-6248" srcset="/wp-content/uploads/2018/05/word-image-5692.png 992w, /wp-content/uploads/2018/05/word-image-5692-300x194.png 300w, /wp-content/uploads/2018/05/word-image-5692-768x498.png 768w" sizes="(max-width: 992px) 100vw, 992px" /></p>
<h1>︴思考：通过框架完成下属功能需要哪些知识点？</h1>
<h2>1、留言列表显示</h2>
<p><img loading="lazy" decoding="async" width="397" height="436" src="/wp-content/uploads/2018/05/word-image-5693.png" class="wp-image-6249" srcset="/wp-content/uploads/2018/05/word-image-5693.png 397w, /wp-content/uploads/2018/05/word-image-5693-273x300.png 273w" sizes="(max-width: 397px) 100vw, 397px" /></p>
<p>
  【展示视图】
</p>
<p>
  如何创建路由
</p>
<p>
  如何创建控制器
</p>
<p>
  如何创建视图
</p>
<p>
  【循环显示数据】
</p>
<p>
  控制器如何操作数据库
</p>
<p>
  视图如何循环
</p>
<h2>添加留言</h2>
<p><img loading="lazy" decoding="async" width="386" height="315" src="/wp-content/uploads/2018/05/word-image-5694.png" class="wp-image-6250" srcset="/wp-content/uploads/2018/05/word-image-5694.png 386w, /wp-content/uploads/2018/05/word-image-5694-300x245.png 300w" sizes="(max-width: 386px) 100vw, 386px" /></p>
<p>
  【页面显示】如何创建路由 -&gt; 如何创建控制器 -&gt; 如何创建添加表单视图
</p>
<p>
  【数据处理】如何接口提交的数据，如何保存到数据库
</p>
<h2>总结（新框架快速上手原则）</h2>
<p>
  如何创建路由
</p>
<p>
  如何创建控制器
</p>
<p>
  如何创建视图
</p>
<h1>四、Laravel框架中的控制器</h1>
<h2>1、控制器的存放目录</h2>
<p>
  app\Http\Controllers\平台名\控制器名Controller.php
</p>
<h2>控制器的命名规则</h2>
<p>
  规    则：大驼峰命名法（单词首字母大写）
</p>
<p>
  举个栗子：UserController.php 或 GoodsController.php
</p>
<h2>3、创建控制器</h2>
<h3>方法1：artisan命令创建 （使用代码生成器创建控制器）</h3>
<p>
  命令：php artisan make:controller 平台名\控制器名Controller
</p>
<p>
  说明：必须在项目根目录下执行，因为artisan在根目录下
</p>
<p><img loading="lazy" decoding="async" width="1129" height="659" src="/wp-content/uploads/2018/05/word-image-5695.png" class="wp-image-6251" srcset="/wp-content/uploads/2018/05/word-image-5695.png 1129w, /wp-content/uploads/2018/05/word-image-5695-300x175.png 300w, /wp-content/uploads/2018/05/word-image-5695-768x448.png 768w, /wp-content/uploads/2018/05/word-image-5695-1024x598.png 1024w" sizes="(max-width: 1129px) 100vw, 1129px" /></p>
<h3>方法2：手动创建</h3>
<p>
  直接复制已经创建的控制器即可
</p>
<p><img loading="lazy" decoding="async" width="875" height="378" src="/wp-content/uploads/2018/05/word-image-5696.png" class="wp-image-6252" srcset="/wp-content/uploads/2018/05/word-image-5696.png 875w, /wp-content/uploads/2018/05/word-image-5696-300x130.png 300w, /wp-content/uploads/2018/05/word-image-5696-768x332.png 768w" sizes="(max-width: 875px) 100vw, 875px" /></p>
<h1>路由1</h1>
<h2>准备：PHP闭包</h2>
<h3>1）JS闭包</h3>
<ul>
<li>
    概念：在JS中当一个函数执行时可以让其内部局部变量不受其他作用域影响，同
  </li>
</ul>
<p>
  时当前函数执行完毕后还可能让其内部变量常驻内存不销毁的运行机制被称为JavaScript的闭包。
</p>
<ul>
<li>
    定义：两个函数彼此嵌套，并返回内部函数
  </li>
</ul>
<p>
  function f1() {
</p>
<p>
  function f2() {
</p>
<p>
  }
</p>
<p>
  return f2;
</p>
<p>
  }
</p>
<p>
  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
</p>
<p>
  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
</p>
<p>
  var arr = new Array();
</p>
<p>
  for (var i = 1; i &lt; 3; i++) {
</p>
</p>
<p>
  	//arr[i] = function(i) {
</p>
<p>
  	//	alert(i);
</p>
<p>
  	//}
</p>
<p>
  	arr[i] = f1(i);
</p>
<p>
  }
</p>
<p>
  function f1(num) {
</p>
<p>
  	function f2() {
</p>
<p>
  		alert(num);
</p>
<p>
  	}
</p>
<p>
  	return f2;
</p>
<p>
  }
</p>
<h3>PHP闭包函数（php5.3+）</h3>
<p><img loading="lazy" decoding="async" width="747" height="175" src="/wp-content/uploads/2018/05/word-image-5697.png" class="wp-image-6253" srcset="/wp-content/uploads/2018/05/word-image-5697.png 747w, /wp-content/uploads/2018/05/word-image-5697-300x70.png 300w" sizes="(max-width: 747px) 100vw, 747px" /><br />
<img loading="lazy" decoding="async" width="958" height="471" src="/wp-content/uploads/2018/05/word-image-5698.png" class="wp-image-6254" srcset="/wp-content/uploads/2018/05/word-image-5698.png 958w, /wp-content/uploads/2018/05/word-image-5698-300x147.png 300w, /wp-content/uploads/2018/05/word-image-5698-768x378.png 768w" sizes="(max-width: 958px) 100vw, 958px" /></p>
<h2>1、路由的作用</h2>
<ul>
<li>
    概念：路由就是网址的参数
  </li>
<li>
    作用：将用户发送的HTTP请求，交给指定的控制器方法处理
  </li>
</ul>
<h2>2、路由配置文件</h2>
<p><img loading="lazy" decoding="async" width="886" height="387" src="/wp-content/uploads/2018/05/word-image-5699.png" class="wp-image-6255" srcset="/wp-content/uploads/2018/05/word-image-5699.png 886w, /wp-content/uploads/2018/05/word-image-5699-300x131.png 300w, /wp-content/uploads/2018/05/word-image-5699-768x335.png 768w" sizes="(max-width: 886px) 100vw, 886px" /></p>
<h2><a id="post-6202-_Toc487903151"></a>3、配置路由（routes\web.php）</h2>
<h3><a id="post-6202-_Toc487903152"></a>1、路由定义格式（语法）</h3>
<p>
  Route::HTTP请求方法（路径，闭包函数或者控制器方法）
</p>
<p>
  响应多个HTTP请求
</p>
<p>
  Route::match（[请求类型，请求类型&#8230;.], 路径，闭包函数或者控制器方法）
</p>
<p>
  响应任意HTTP请求
</p>
<p>
  Route::any（路径，闭包函数或者控制器方法）
</p>
<h3><a id="post-6202-_Toc487903153"></a>2、请求方式有哪些？</h3>
<p>
  可以是HTTP的8种请求类型之一，如：get、put、post、delete&#8230;等，常用get和post
</p>
<h3>︴练习</h3>
<ul>
<li>
    不同的请求响应
  </li>
<li>
    get请求，闭包函数响应
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1212" height="610" src="/wp-content/uploads/2018/05/word-image-5700.png" class="wp-image-6256" srcset="/wp-content/uploads/2018/05/word-image-5700.png 1212w, /wp-content/uploads/2018/05/word-image-5700-300x151.png 300w, /wp-content/uploads/2018/05/word-image-5700-768x387.png 768w, /wp-content/uploads/2018/05/word-image-5700-1024x515.png 1024w" sizes="(max-width: 1212px) 100vw, 1212px" /></p>
<ul>
<li>
    get请求，控制器响应
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1335" height="635" src="/wp-content/uploads/2018/05/word-image-5701.png" class="wp-image-6257" srcset="/wp-content/uploads/2018/05/word-image-5701.png 1335w, /wp-content/uploads/2018/05/word-image-5701-300x143.png 300w, /wp-content/uploads/2018/05/word-image-5701-768x365.png 768w, /wp-content/uploads/2018/05/word-image-5701-1024x487.png 1024w" sizes="(max-width: 1335px) 100vw, 1335px" /></p>
<ul>
<li>
    post请求，闭包函数响应（注：app\Http\Kernel.php注释VerifyCsrfToken）
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1087" height="672" src="/wp-content/uploads/2018/05/word-image-5702.png" class="wp-image-6258" srcset="/wp-content/uploads/2018/05/word-image-5702.png 1087w, /wp-content/uploads/2018/05/word-image-5702-300x185.png 300w, /wp-content/uploads/2018/05/word-image-5702-768x475.png 768w, /wp-content/uploads/2018/05/word-image-5702-1024x633.png 1024w" sizes="(max-width: 1087px) 100vw, 1087px" /><br />
<img loading="lazy" decoding="async" width="1251" height="510" src="/wp-content/uploads/2018/05/word-image-5703.png" class="wp-image-6259" srcset="/wp-content/uploads/2018/05/word-image-5703.png 1251w, /wp-content/uploads/2018/05/word-image-5703-300x122.png 300w, /wp-content/uploads/2018/05/word-image-5703-768x313.png 768w, /wp-content/uploads/2018/05/word-image-5703-1024x417.png 1024w" sizes="(max-width: 1251px) 100vw, 1251px" /></p>
<ul>
<li>
    post请求，控制器响应
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1334" height="659" src="/wp-content/uploads/2018/05/word-image-5704.png" class="wp-image-6260" srcset="/wp-content/uploads/2018/05/word-image-5704.png 1334w, /wp-content/uploads/2018/05/word-image-5704-300x148.png 300w, /wp-content/uploads/2018/05/word-image-5704-768x379.png 768w, /wp-content/uploads/2018/05/word-image-5704-1024x506.png 1024w" sizes="(max-width: 1334px) 100vw, 1334px" /></p>
<ul>
<li>
    响应<strong>多个</strong>HTTP请求
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="622" height="159" src="/wp-content/uploads/2018/05/word-image-5705.png" class="wp-image-6261" srcset="/wp-content/uploads/2018/05/word-image-5705.png 622w, /wp-content/uploads/2018/05/word-image-5705-300x77.png 300w" sizes="(max-width: 622px) 100vw, 622px" /></p>
<ul>
<li>
    响应<strong>所有</strong>HTTP请求
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="477" height="176" src="/wp-content/uploads/2018/05/word-image-5706.png" class="wp-image-6262" srcset="/wp-content/uploads/2018/05/word-image-5706.png 477w, /wp-content/uploads/2018/05/word-image-5706-300x111.png 300w" sizes="(max-width: 477px) 100vw, 477px" /></p>
<h2>4、路由参数</h2>
<h3>1）语法</h3>
<p>
  Route::HTTP请求方式（路径/{参数}，闭包函数或控制器方法名）-&gt;where（参数名,正则表达式）
</p>
<p>
  多个参数： 路径/{参数}/{参数}   或者   路径/{参数}-{参数}/{参数}
</p>
<p>
  多个限制：-&gt;where（[参数=&gt;正则，&#8230;，参数n-&gt;正则n]）
</p>
<p>
  多学一招：{参数名？} 表示可以设置默认值
</p>
<h3>2）闭包函数操作参数</h3>
<ul>
<li>
    一个参数
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="663" height="213" src="/wp-content/uploads/2018/05/word-image-5707.png" class="wp-image-6263" srcset="/wp-content/uploads/2018/05/word-image-5707.png 663w, /wp-content/uploads/2018/05/word-image-5707-300x96.png 300w" sizes="(max-width: 663px) 100vw, 663px" /></p>
<p>
  #一个参数
</p>
<p>
  Route::get(&#8216;/test7/{id}&#8217;, function($id){
</p>
<p>
      echo $id;
</p>
<p>
  });
</p>
<ul>
<li>
    多个参数
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="793" height="236" src="/wp-content/uploads/2018/05/word-image-5708.png" class="wp-image-6264" srcset="/wp-content/uploads/2018/05/word-image-5708.png 793w, /wp-content/uploads/2018/05/word-image-5708-300x89.png 300w, /wp-content/uploads/2018/05/word-image-5708-768x229.png 768w" sizes="(max-width: 793px) 100vw, 793px" /></p>
<p>
  #多个参数
</p>
<p>
  Route::get(&#8216;/test7/{id}/{name}&#8217;, function($id, $name){
</p>
<p>
      echo $id . &#8216;__&#8217; . $name;
</p>
<p>
  });
</p>
<ul>
<li>
    默认参数
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="802" height="332" src="/wp-content/uploads/2018/05/word-image-5709.png" class="wp-image-6265" srcset="/wp-content/uploads/2018/05/word-image-5709.png 802w, /wp-content/uploads/2018/05/word-image-5709-300x124.png 300w, /wp-content/uploads/2018/05/word-image-5709-768x318.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></p>
<h3>3）控制器操作参数</h3>
<p><img loading="lazy" decoding="async" width="814" height="541" src="/wp-content/uploads/2018/05/word-image-5710.png" class="wp-image-6266" srcset="/wp-content/uploads/2018/05/word-image-5710.png 814w, /wp-content/uploads/2018/05/word-image-5710-300x199.png 300w, /wp-content/uploads/2018/05/word-image-5710-768x510.png 768w" sizes="(max-width: 814px) 100vw, 814px" /><br />
<img loading="lazy" decoding="async" width="1120" height="527" src="/wp-content/uploads/2018/05/word-image-5711.png" class="wp-image-6267" srcset="/wp-content/uploads/2018/05/word-image-5711.png 1120w, /wp-content/uploads/2018/05/word-image-5711-300x141.png 300w, /wp-content/uploads/2018/05/word-image-5711-768x361.png 768w, /wp-content/uploads/2018/05/word-image-5711-1024x482.png 1024w" sizes="(max-width: 1120px) 100vw, 1120px" /></p>
<h3>4）正则表达式限制参数</h3>
<ul>
<li>
    限制一个参数
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="544" height="152" src="/wp-content/uploads/2018/05/word-image-5712.png" class="wp-image-6268" srcset="/wp-content/uploads/2018/05/word-image-5712.png 544w, /wp-content/uploads/2018/05/word-image-5712-300x84.png 300w" sizes="(max-width: 544px) 100vw, 544px" /></p>
<ul>
<li>
    限制多个参数
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="751" height="252" src="/wp-content/uploads/2018/05/word-image-5713.png" class="wp-image-6269" srcset="/wp-content/uploads/2018/05/word-image-5713.png 751w, /wp-content/uploads/2018/05/word-image-5713-300x101.png 300w" sizes="(max-width: 751px) 100vw, 751px" /></p>
<h2>5、路由群组</h2>
<h3>1）概念</h3>
<p>
  多个路由之间共享路由属性，减少冗余。
</p>
<h3>语法</h3>
<p>
  Route::group（[属性名=&gt;属性值n,&#8230;,属性名=&gt;属性值n]，function（）{
</p>
<p>
       将其他路由放进来即可&#8230;.
</p>
<p>
  }）
</p>
<h3>3）案例</h3>
<p><img loading="lazy" decoding="async" width="1154" height="640" src="/wp-content/uploads/2018/05/word-image-5714.png" class="wp-image-6270" srcset="/wp-content/uploads/2018/05/word-image-5714.png 1154w, /wp-content/uploads/2018/05/word-image-5714-300x166.png 300w, /wp-content/uploads/2018/05/word-image-5714-768x426.png 768w, /wp-content/uploads/2018/05/word-image-5714-1024x568.png 1024w" sizes="(max-width: 1154px) 100vw, 1154px" /></p>
<p>
  #路由群组举个栗子（需求：完成用户增删改查）
</p>
<p>
  Route::group([&#8216;namespace&#8217;=&gt;&#8217;Admin&#8217;, &#8216;prefix&#8217; =&gt; &#8216;/user&#8217;], function(){
</p>
<p>
      #Route::get(&#8216;/user/index&#8217;, &#8216;Admin\UserController@index&#8217;);
</p>
<p>
      #Route::get(&#8216;/user/create&#8217;, &#8216;Admin\UserController@create&#8217;);
</p>
<p>
      #Route::get(&#8216;/user/delete/{id}&#8217;, &#8216;Admin\UserController@delete&#8217;);
</p>
<p>
      #Route::get(&#8216;/user/update&#8217;, &#8216;Admin\UserController@update&#8217;);
</p>
<p>
      Route::get(&#8216;index&#8217;, &#8216;UserController@index&#8217;);
</p>
<p>
      Route::get(&#8216;create&#8217;, &#8216;UserController@create&#8217;);
</p>
<p>
      Route::get(&#8216;delete/{id}&#8217;, &#8216;UserController@delete&#8217;);
</p>
<p>
      Route::get(&#8216;update&#8217;, &#8216;UserController@update&#8217;);
</p>
<p>
  });
</p>
<h2>6、路由别名</h2>
<p><img loading="lazy" decoding="async" width="863" height="621" src="/wp-content/uploads/2018/05/word-image-5715.png" class="wp-image-6271" srcset="/wp-content/uploads/2018/05/word-image-5715.png 863w, /wp-content/uploads/2018/05/word-image-5715-300x216.png 300w, /wp-content/uploads/2018/05/word-image-5715-768x553.png 768w" sizes="(max-width: 863px) 100vw, 863px" /></p>
<p>
  #路由别名：同MySQL需要别名因为名字太长或者不好记等情况
</p>
<p>
  //Route::get(&#8216;/jintainwofeichangkaixinsdfadsf&#8217;, function() {
</p>
<p>
  //    echo &#8216;test11&#8217;;
</p>
<p>
  //});
</p>
<p>
  Route::get(&#8216;/jintainwofeichangkaixinsdfadsf&#8217;, [
</p>
<p>
      &#8216;as&#8217; =&gt; &#8216;bieming&#8217;,
</p>
<p>
      &#8216;uses&#8217; =&gt; function() {
</p>
<p>
          echo &#8216;我们都不容易&#8217;;
</p>
<p>
      }
</p>
<p>
  ]);
</p>
<p>
  Route::get(&#8216;/test11&#8217;, function() {
</p>
<p>
  //    {{ U（&#8217;user/index&#8217;） }}
</p>
<p>
  //    {{ url(‘/jintainwofeichangkaixinsdfadsf’) }}
</p>
<p>
      echo route(&#8216;bieming&#8217;); //通过路由别名替换url方法，放到表单action属性中
</p>
<p>
  });
</p>
<h2>小总结</h2>
<ul>
<li>
    什么是路由：就是网址
  </li>
<li>
    路由作用：将用户的请求交给指定的控制器方法处理
  </li>
<li>
    路由在哪：routes\web.php
  </li>
<li>
    路由语法
  </li>
<li>
    基        本：Route::HTTP类型（路径，闭包函数或控制器方法）
  </li>
<li>
    响应指定请求：Route::match（[类型，..，类型]，路径，闭包函数或控制器方法）
  </li>
<li>
    响应多有请求：Route::any（路径，闭包函数或控制器方法）
  </li>
<li>
    路由参数语法
  </li>
<li>
    Route::HTTP类型（路径/{参数}，闭包函数或控制器方法）-&gt;where（参数，正则）
  </li>
</ul>
<p>
  多个参数：就是写多个{}
</p>
<p>
  多个限制：则where使用数组 [参数=&gt;正则, &#8230;, 参数n=&gt;正则n]
</p>
<ul>
<li>
    路由群组
  </li>
<li>
    概念：就是给多个路由设置相同的属性，减少冗余
  </li>
<li>
    语法
  </li>
</ul>
<p>
  Route::group（[&#8216;namespace&#8217; =&gt; &#8221;, &#8216;preifx&#8217;=&gt;&#8221;]， function（）{
</p>
<p>
       写其他路由&#8230;
</p>
<p>
  }）
</p>
<ul>
<li>
    路由别名
  </li>
<li>
    概念：就是路由名称太长，则写个别名，后期可以通过方法route获取别名的真实
  </li>
</ul>
<p>
  路由地址
</p>
<ul>
<li>
    语法
  </li>
</ul>
<p>
  Route::请求类型（路径，[
</p>
<p>
      ‘as’ =&gt; 别名,
</p>
<p>
      ‘uses’ =&gt;  闭包函数 或者 控制器方法
</p>
<p>
  ]）
</p>
<h1>视图1</h1>
<h2>控制器调用视图</h2>
<h3>1）语法</h3>
<ul>
<li>
    方法1：return‘字符串’
  </li>
<li>
    方法2：return view（视图文件，compact（变量名，&#8230;，变量名n））；
  </li>
</ul>
<p>
  return view加载视图会去resources/views下面找（ps. view所有名称统一小写）
</p>
<p>
  return view（&#8217;php12&#8217;）会优先找blade模板引擎
</p>
<p>
  如果需要调用resources/views/子目录中的文件则用“.”拼接
</p>
<h3>2）练习（调用视图）</h3>
<p>
  步骤1：
</p>
<p><img loading="lazy" decoding="async" width="1045" height="409" src="/wp-content/uploads/2018/05/word-image-5716.png" class="wp-image-6272" srcset="/wp-content/uploads/2018/05/word-image-5716.png 1045w, /wp-content/uploads/2018/05/word-image-5716-300x117.png 300w, /wp-content/uploads/2018/05/word-image-5716-768x301.png 768w, /wp-content/uploads/2018/05/word-image-5716-1024x401.png 1024w" sizes="(max-width: 1045px) 100vw, 1045px" /></p>
<p>
  步骤2：
</p>
<p><img loading="lazy" decoding="async" width="1048" height="656" src="/wp-content/uploads/2018/05/word-image-5717.png" class="wp-image-6273" srcset="/wp-content/uploads/2018/05/word-image-5717.png 1048w, /wp-content/uploads/2018/05/word-image-5717-300x188.png 300w, /wp-content/uploads/2018/05/word-image-5717-768x481.png 768w, /wp-content/uploads/2018/05/word-image-5717-1024x641.png 1024w" sizes="(max-width: 1048px) 100vw, 1048px" /><br />
<img loading="lazy" decoding="async" width="1255" height="534" src="/wp-content/uploads/2018/05/word-image-5718.png" class="wp-image-6274" srcset="/wp-content/uploads/2018/05/word-image-5718.png 1255w, /wp-content/uploads/2018/05/word-image-5718-300x128.png 300w, /wp-content/uploads/2018/05/word-image-5718-768x327.png 768w, /wp-content/uploads/2018/05/word-image-5718-1024x436.png 1024w" sizes="(max-width: 1255px) 100vw, 1255px" /></p>
<h2><a id="post-6202-_Toc487903182"></a>基本用法视图传参</h2>
<h3>认识compact函数</h3>
<ul>
<li>
    语法：compact（变量名，&#8230;.，变量名n）
  </li>
<li>
    作用：将多个变量组成数组
  </li>
<li>
    代码：
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="785" height="420" src="/wp-content/uploads/2018/05/word-image-5719.png" class="wp-image-6275" srcset="/wp-content/uploads/2018/05/word-image-5719.png 785w, /wp-content/uploads/2018/05/word-image-5719-300x161.png 300w, /wp-content/uploads/2018/05/word-image-5719-768x411.png 768w" sizes="(max-width: 785px) 100vw, 785px" /></p>
<p>
  &lt;?php
</p>
<p>
  $a = &#8216;h1&#8217;;
</p>
<p>
  $b = &#8216;h2&#8217;;
</p>
<p>
  $c = &#8216;hd&#8217;;
</p>
<p>
  $data = compact(&#8216;a&#8217;,&#8217;b&#8217;,&#8217;fasdfasd&#8217;);
</p>
<p>
  echo &#8216;&lt;pre&gt;&#8217;;
</p>
<p>
  print_r($data);
</p>
<h3>2）数组方式</h3>
<p><img loading="lazy" decoding="async" width="1316" height="707" src="/wp-content/uploads/2018/05/word-image-5720.png" class="wp-image-6276" srcset="/wp-content/uploads/2018/05/word-image-5720.png 1316w, /wp-content/uploads/2018/05/word-image-5720-300x161.png 300w, /wp-content/uploads/2018/05/word-image-5720-768x413.png 768w, /wp-content/uploads/2018/05/word-image-5720-1024x550.png 1024w" sizes="(max-width: 1316px) 100vw, 1316px" /></p>
<h3>3）工作常用</h3>
<p><img loading="lazy" decoding="async" width="1306" height="712" src="/wp-content/uploads/2018/05/word-image-5721.png" class="wp-image-6277" srcset="/wp-content/uploads/2018/05/word-image-5721.png 1306w, /wp-content/uploads/2018/05/word-image-5721-300x164.png 300w, /wp-content/uploads/2018/05/word-image-5721-768x419.png 768w, /wp-content/uploads/2018/05/word-image-5721-1024x558.png 1024w" sizes="(max-width: 1306px) 100vw, 1306px" /></p>
<h2><a id="post-6202-_Toc487903184"></a>4、【★】blade模板</h2>
<h3>1）什么是blade模板</h3>
<ul>
<li>
    blade模板同smarty模板一样都是PHP模板引擎
  </li>
<li>
    blade模板是laravel自带模板引擎（推荐使用也可以使用原声php）
  </li>
</ul>
<p>
  问：什么是模板引擎
</p>
<p>
  答：就是用PHP写的一个类
</p>
<p>
  问：是个类就是模板引擎吗
</p>
<p>
  答：非也，具备将php代码和html代码分离类称之为模板引擎
</p>
<h3>2）blade模板标签</h3>
<ul>
<li>
    注释（同Smarty注释响应时不含注释内容）
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="992" height="506" src="/wp-content/uploads/2018/05/word-image-5722.png" class="wp-image-6278" srcset="/wp-content/uploads/2018/05/word-image-5722.png 992w, /wp-content/uploads/2018/05/word-image-5722-300x153.png 300w, /wp-content/uploads/2018/05/word-image-5722-768x392.png 768w" sizes="(max-width: 992px) 100vw, 992px" /></p>
<ul>
<li>
    展示变量数据
  </li>
</ul>
<p>
  {{ $变量名 }}
</p>
<p><img loading="lazy" decoding="async" width="717" height="447" src="/wp-content/uploads/2018/05/word-image-5723.png" class="wp-image-6279" srcset="/wp-content/uploads/2018/05/word-image-5723.png 717w, /wp-content/uploads/2018/05/word-image-5723-300x187.png 300w" sizes="(max-width: 717px) 100vw, 717px" /></p>
<ul>
<li>
    循环
  </li>
</ul>
<p>
  @foreach（变量名 as  键=&gt;值）
</p>
<p>
  @endforeach
</p>
<p><img loading="lazy" decoding="async" width="701" height="427" src="/wp-content/uploads/2018/05/word-image-5724.png" class="wp-image-6280" srcset="/wp-content/uploads/2018/05/word-image-5724.png 701w, /wp-content/uploads/2018/05/word-image-5724-300x183.png 300w" sizes="(max-width: 701px) 100vw, 701px" /></p>
<ul>
<li>
    判断
  </li>
</ul>
<p>
  @if ()
</p>
<p>
  @else if ()
</p>
<p>
  @else
</p>
<p>
  @endif
</p>
<p><img loading="lazy" decoding="async" width="665" height="510" src="/wp-content/uploads/2018/05/word-image-5725.png" class="wp-image-6281" srcset="/wp-content/uploads/2018/05/word-image-5725.png 665w, /wp-content/uploads/2018/05/word-image-5725-300x230.png 300w" sizes="(max-width: 665px) 100vw, 665px" /></p>
<ul>
<li>
    指定原声PHP（少用）
  </li>
</ul>
<p>
  @php
</p>
<p>
  @endphp
</p>
<p><img loading="lazy" decoding="async" width="720" height="444" src="/wp-content/uploads/2018/05/word-image-5726.png" class="wp-image-6282" srcset="/wp-content/uploads/2018/05/word-image-5726.png 720w, /wp-content/uploads/2018/05/word-image-5726-300x185.png 300w" sizes="(max-width: 720px) 100vw, 720px" /></p>
<h1>获取请求输入</h1>
<h2>1、语法</h2>
<h3>1）方法1</h3>
<ul>
<li>
    步骤1：导入类【use Illuminate\Http\Request;】
  </li>
<li>
    步骤2：在控制器方法中声明使用，如
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="470" height="65" src="/wp-content/uploads/2018/05/word-image-5727.png" class="wp-image-6283" srcset="/wp-content/uploads/2018/05/word-image-5727.png 470w, /wp-content/uploads/2018/05/word-image-5727-300x41.png 300w" sizes="(max-width: 470px) 100vw, 470px" /></p>
<ul>
<li>
    步骤3：最后使用下属语法获取数据
  </li>
<li>
    $request-&gt;all（）										获取所有数据
  </li>
<li>
    $request-&gt;input（键 [,默认值]）					获取GET数据
  </li>
<li>
    $request-&gt;only（[参数名1，&#8230;，参数名n]）    获取指定数据
  </li>
<li>
    $request-&gt;except（[参数名1，&#8230;，参数名n]）   获取指定数据外的所有数据
  </li>
<li>
    查看更多：<a href="http://laravelacademy.org/post/6750.html#toc_4">http://laravelacademy.org/post/6750.html#toc_4</a>
  </li>
</ul>
<h3>方法2</h3>
<ul>
<li>
    步骤1：导入类【Illuminate\Support\Facades\Input;】
  </li>
<li>
    步骤2：最后使用下属语法获取数据
  </li>
<li>
    Input::all（）										获取所有数据
  </li>
<li>
    Input::get（参数名[，默认值]）  				获取单个数据
  </li>
<li>
    Input::only（[键1，&#8230;，键n]）   				获取指定数据
  </li>
<li>
    Input::except（[键1，&#8230;，键n]） 				获取指定数据外的所有数据
  </li>
</ul>
<h2>2、练习</h2>
<p>
  步骤1：定义路由
</p>
<p><img loading="lazy" decoding="async" width="1156" height="361" src="/wp-content/uploads/2018/05/word-image-5728.png" class="wp-image-6284" srcset="/wp-content/uploads/2018/05/word-image-5728.png 1156w, /wp-content/uploads/2018/05/word-image-5728-300x94.png 300w, /wp-content/uploads/2018/05/word-image-5728-768x240.png 768w, /wp-content/uploads/2018/05/word-image-5728-1024x320.png 1024w" sizes="(max-width: 1156px) 100vw, 1156px" /></p>
<p>
  步骤2：创建控制器方法
</p>
<p><img loading="lazy" decoding="async" width="1319" height="536" src="/wp-content/uploads/2018/05/word-image-5729.png" class="wp-image-6285" srcset="/wp-content/uploads/2018/05/word-image-5729.png 1319w, /wp-content/uploads/2018/05/word-image-5729-300x122.png 300w, /wp-content/uploads/2018/05/word-image-5729-768x312.png 768w, /wp-content/uploads/2018/05/word-image-5729-1024x416.png 1024w" sizes="(max-width: 1319px) 100vw, 1319px" /></p>
<p>
  步骤3:创建视图
</p>
<p><img loading="lazy" decoding="async" width="1196" height="617" src="/wp-content/uploads/2018/05/word-image-5730.png" class="wp-image-6286" srcset="/wp-content/uploads/2018/05/word-image-5730.png 1196w, /wp-content/uploads/2018/05/word-image-5730-300x155.png 300w, /wp-content/uploads/2018/05/word-image-5730-768x396.png 768w, /wp-content/uploads/2018/05/word-image-5730-1024x528.png 1024w" sizes="(max-width: 1196px) 100vw, 1196px" /></p>
<h1>八、留言板功能</h1>
<h2>︴准备（数据库初体验，明天详细讲）</h2>
<ul>
<li>
    语法
  </li>
</ul>
<p>
  查询所有数据语法：DB::table（表名）-&gt;get（）
</p>
<p>
  插入数据语法：DB::table（表名）-&gt;insert（关联数组）
</p>
<ul>
<li>
    练习
  </li>
</ul>
<p>
  步骤1：创建数据库和留言表并插入数据
</p>
<p>
  create database laravel54;
</p>
<p>
  use laravel54;
</p>
<p>
  #标准写法
</p>
<p>
  &#8212; create table msg (
</p>
<p>
  &#8212; id int primary key auto_increment comment &#8216;编号&#8217;,
</p>
<p>
  &#8212; uname varchar(45) not null comment &#8216;用户名&#8217;,
</p>
<p>
  &#8212; content text not null comment &#8216;内容&#8217;,
</p>
<p>
  &#8212; created_at int not null default 0 comment &#8216;创建于&#8217;,
</p>
<p>
  &#8212; updated_at int not null default 0 comment &#8216;更新于&#8217;
</p>
<p>
  &#8212; )engine=myisam charset=utf8;
</p>
<p>
  #为铺垫后面课程修改
</p>
<p>
  create table msg (
</p>
<p>
  id int primary key auto_increment comment &#8216;编号&#8217;,
</p>
<p>
  uname varchar(45) comment &#8216;用户名&#8217;,
</p>
<p>
  content text comment &#8216;内容&#8217;,
</p>
<p>
  created_at int not null default 0 comment &#8216;创建于&#8217;,
</p>
<p>
  updated_at int not null default 0 comment &#8216;更新于&#8217;
</p>
<p>
  )engine=myisam charset=utf8;
</p>
<p>
  insert into msg values
</p>
<p>
  (null,&#8217;a&#8217;,&#8217;aaaa&#8217;,0,0),
</p>
<p>
  (null,&#8217;a&#8217;,&#8217;aaaa&#8217;,0,0),
</p>
<p>
  (null,&#8217;a&#8217;,&#8217;aaaa&#8217;,0,0);
</p>
<p>
  步骤2：修改laravel数据库配置文件
</p>
<p><img loading="lazy" decoding="async" width="678" height="509" src="/wp-content/uploads/2018/05/word-image-5731.png" class="wp-image-6287" srcset="/wp-content/uploads/2018/05/word-image-5731.png 678w, /wp-content/uploads/2018/05/word-image-5731-300x225.png 300w" sizes="(max-width: 678px) 100vw, 678px" /></p>
<h2>1、留言列表</h2>
<h3>1）思路</h3>
<ul>
<li>
    步骤1：定义路由访问列表页（Admin\MsgController@index）
  </li>
<li>
    步骤2：创建控制器MsgController和方法index 并且调用视图
  </li>
<li>
    步骤3：调用视图
  </li>
<li>
    步骤4：获取数据并循环显示
  </li>
</ul>
<h3>2）代码</h3>
<ul>
<li>
    步骤1：定义路由访问列表页（Admin\MsgController@index）
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1033" height="425" src="/wp-content/uploads/2018/05/word-image-5732.png" class="wp-image-6288" srcset="/wp-content/uploads/2018/05/word-image-5732.png 1033w, /wp-content/uploads/2018/05/word-image-5732-300x123.png 300w, /wp-content/uploads/2018/05/word-image-5732-768x316.png 768w, /wp-content/uploads/2018/05/word-image-5732-1024x421.png 1024w" sizes="(max-width: 1033px) 100vw, 1033px" /></p>
<ul>
<li>
    步骤2：创建控制器MsgController和方法index 并且调用视图
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1027" height="638" src="/wp-content/uploads/2018/05/word-image-5733.png" class="wp-image-6289" srcset="/wp-content/uploads/2018/05/word-image-5733.png 1027w, /wp-content/uploads/2018/05/word-image-5733-300x186.png 300w, /wp-content/uploads/2018/05/word-image-5733-768x477.png 768w, /wp-content/uploads/2018/05/word-image-5733-1024x636.png 1024w" sizes="(max-width: 1027px) 100vw, 1027px" /></p>
<ul>
<li>
    步骤3：调用视图
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1189" height="721" src="/wp-content/uploads/2018/05/word-image-5734.png" class="wp-image-6290" srcset="/wp-content/uploads/2018/05/word-image-5734.png 1189w, /wp-content/uploads/2018/05/word-image-5734-300x182.png 300w, /wp-content/uploads/2018/05/word-image-5734-768x466.png 768w, /wp-content/uploads/2018/05/word-image-5734-1024x621.png 1024w" sizes="(max-width: 1189px) 100vw, 1189px" /></p>
<ul>
<li>
    步骤4：获取数据并循环显示
  </li>
</ul>
<p>
  控制器
</p>
<p><img loading="lazy" decoding="async" width="1157" height="460" src="/wp-content/uploads/2018/05/word-image-5735.png" class="wp-image-6291" srcset="/wp-content/uploads/2018/05/word-image-5735.png 1157w, /wp-content/uploads/2018/05/word-image-5735-300x119.png 300w, /wp-content/uploads/2018/05/word-image-5735-768x305.png 768w, /wp-content/uploads/2018/05/word-image-5735-1024x407.png 1024w" sizes="(max-width: 1157px) 100vw, 1157px" /></p>
<p>
  视图
</p>
<p><img loading="lazy" decoding="async" width="1171" height="549" src="/wp-content/uploads/2018/05/word-image-5736.png" class="wp-image-6292" srcset="/wp-content/uploads/2018/05/word-image-5736.png 1171w, /wp-content/uploads/2018/05/word-image-5736-300x141.png 300w, /wp-content/uploads/2018/05/word-image-5736-768x360.png 768w, /wp-content/uploads/2018/05/word-image-5736-1024x480.png 1024w" sizes="(max-width: 1171px) 100vw, 1171px" /><br />
<img loading="lazy" decoding="async" width="1365" height="604" src="/wp-content/uploads/2018/05/word-image-5737.png" class="wp-image-6293" srcset="/wp-content/uploads/2018/05/word-image-5737.png 1365w, /wp-content/uploads/2018/05/word-image-5737-300x133.png 300w, /wp-content/uploads/2018/05/word-image-5737-768x340.png 768w, /wp-content/uploads/2018/05/word-image-5737-1024x453.png 1024w" sizes="(max-width: 1365px) 100vw, 1365px" /></p>
<h2>2、添加留言</h2>
<h3>1）思路</h3>
<ul>
<li>
    说 明：因为添加特殊（其和列表在同一个页面所以不需要重新加载视图）
  </li>
<li>
    步骤1：修改路由
  </li>
<li>
    步骤2：控制器接受数据，并添加到数据库
  </li>
</ul>
<h3>2）代码</h3>
<ul>
<li>
    步骤1：修改路由
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1050" height="396" src="/wp-content/uploads/2018/05/word-image-5738.png" class="wp-image-6294" srcset="/wp-content/uploads/2018/05/word-image-5738.png 1050w, /wp-content/uploads/2018/05/word-image-5738-300x113.png 300w, /wp-content/uploads/2018/05/word-image-5738-768x290.png 768w, /wp-content/uploads/2018/05/word-image-5738-1024x386.png 1024w" sizes="(max-width: 1050px) 100vw, 1050px" /></p>
<ul>
<li>
    步骤2：控制器接受数据，并添加到数据库
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1160" height="650" src="/wp-content/uploads/2018/05/word-image-5739.png" class="wp-image-6295" srcset="/wp-content/uploads/2018/05/word-image-5739.png 1160w, /wp-content/uploads/2018/05/word-image-5739-300x168.png 300w, /wp-content/uploads/2018/05/word-image-5739-768x430.png 768w, /wp-content/uploads/2018/05/word-image-5739-1024x574.png 1024w" sizes="(max-width: 1160px) 100vw, 1160px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/6202.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TP 3.2 （一）配置、路由、模型、视图、控制器、商城后台首页展示</title>
		<link>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/4022.html</link>
					<comments>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/4022.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 13:08:24 +0000</pubDate>
				<category><![CDATA[TP3.2]]></category>
		<category><![CDATA[后台框架]]></category>
		<category><![CDATA[商城后台首页展示]]></category>
		<category><![CDATA[控制器]]></category>
		<category><![CDATA[模型]]></category>
		<category><![CDATA[视图]]></category>
		<category><![CDATA[路由]]></category>
		<category><![CDATA[配置]]></category>
		<guid isPermaLink="false">/?p=4022</guid>

					<description><![CDATA[框架概述 1.1、回顾MVC(重点理解) MVC是一个编程思想。将业务拆分成为三个板块分别为模型、视图以及控制 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>框架概述</h1>
<h2>1.1、回顾MVC(重点理解)</h2>
<p>
  MVC是一个编程思想。将业务拆分成为三个板块分别为模型、视图以及控制器
</p>
<p>
  M代表是的模型主要是进行数据交互
</p>
<p>
  V代表的就是视图主要是与用户进行交互
</p>
<p>
  C代表是控制器作用作用是进行中间的协同工作。调度模型或者视图完成工作
</p>
<p><img loading="lazy" decoding="async" width="1159" height="486" src="/wp-content/uploads/2018/05/word-image-3566.png" class="wp-image-4023" srcset="/wp-content/uploads/2018/05/word-image-3566.png 1159w, /wp-content/uploads/2018/05/word-image-3566-300x126.png 300w, /wp-content/uploads/2018/05/word-image-3566-768x322.png 768w, /wp-content/uploads/2018/05/word-image-3566-1024x429.png 1024w" sizes="(max-width: 1159px) 100vw, 1159px" /></p>
<h2>1.2、什么是框架</h2>
<p>
  框架就是一个半成品的代码库。包括很多的基础功能，能够方便进行项目的开发。使用框架进行项目开发可以节省开发时间。
</p>
<p>
  例如：在前端页面上进行dom操作。可以使用原生的js进行。也可以使用jQuery来进行dom操作。此处jQuery就是前端的一款框架
</p>
<h2>1.3、PHP的常用框架</h2>
<ol>
<li>
  zendframework：由zend公司开发的一款重量级的框架
</li>
<li>
  YII：基于组件的一款框架
</li>
<li>
  CI框架：一款比较轻量的框架
</li>
<li>
  laravel框架：最优雅的框架
</li>
</ol>
<p>
  5、thinkPHP框架：国产框架
</p>
<h2>1.4、TP框架的优点</h2>
<p>
  国产思想符合国人、代码注释都是中文。并且使用量比较大。社区活跃(问题能够及时解决)
</p>
<h1>TP框架的基本使用</h1>
<h2>2.1、TP源码下载</h2>
<p>
  官方网址：<a href="/goto/hl2v" rel="nofollow">http://www.thinkphp.cn/</a>
</p>
<h3>2.1.1、关于版本的选择</h3>
<p>
  3.2版本：主要是针对于web项目(有前台后台)
</p>
<p>
  5.0版本：主要针对api接口项目(全部都是写接口)
</p>
<p>
  关于实际在开发项目中版本的选择没有严格的界限。例如web项目也可以使用5.0版本。写接口也可以使用3.2版本
</p>
<h3>2.1.2、下载TP3.2版本源代码</h3>
<p><img loading="lazy" decoding="async" width="1117" height="405" src="/wp-content/uploads/2018/05/word-image-3567.png" class="wp-image-4024" srcset="/wp-content/uploads/2018/05/word-image-3567.png 1117w, /wp-content/uploads/2018/05/word-image-3567-300x109.png 300w, /wp-content/uploads/2018/05/word-image-3567-768x278.png 768w, /wp-content/uploads/2018/05/word-image-3567-1024x371.png 1024w" sizes="(max-width: 1117px) 100vw, 1117px" /></p>
<p>
  关于核心版本与完整版的区别。对于核心版本只包括了框架的基本功能。对于完整版本除了框架基本内容之外还包括其他的功能。例如分页、文件上传等
</p>
<h2>2.2、TP框架项目部署(实现)</h2>
<h3>2.2.1、解析下载的源代码目录文件</h3>
<p>
  ①解析下载的源码
</p>
<p><img loading="lazy" decoding="async" width="769" height="274" src="/wp-content/uploads/2018/05/word-image-3568.png" class="wp-image-4025" srcset="/wp-content/uploads/2018/05/word-image-3568.png 769w, /wp-content/uploads/2018/05/word-image-3568-300x107.png 300w, /wp-content/uploads/2018/05/word-image-3568-768x274.png 768w" sizes="(max-width: 769px) 100vw, 769px" /></p>
<p>
  Application:TP默认的应用代码存储的目录(存储自己编写的代码)
</p>
<p>
  Public：TP推荐的存储资源文件的目录
</p>
<p>
  ThinkPHP:TP框架的源代码目录
</p>
<p>
  .htaccess:Apache的重写规则文件
</p>
<p>
  composer.json：composer的配置文件。composer是PHP的代码管理工具
</p>
<p>
  Index.php：项目的入口文件(非常重要)
</p>
<p>
  ②TP框架的源码目录
</p>
<p><img loading="lazy" decoding="async" width="939" height="382" src="/wp-content/uploads/2018/05/word-image-3569.png" class="wp-image-4026" srcset="/wp-content/uploads/2018/05/word-image-3569.png 939w, /wp-content/uploads/2018/05/word-image-3569-300x122.png 300w, /wp-content/uploads/2018/05/word-image-3569-768x312.png 768w" sizes="(max-width: 939px) 100vw, 939px" /></p>
<p>
  Common：存储TP所提供的公共函数文件。对于此目录下的functions.php中的函数可以在任何位置直接使用
</p>
<p>
  Conf:TP的默认配置信息目录
</p>
<p>
  Lang:TP的语言包
</p>
<p>
  Library：TP框架的核心的类库目录
</p>
<p>
  Mode：TP所支持的模式
</p>
<p>
  Tpl：TP默认的系统模板目录
</p>
<p>
  ThinkPHP.php:tp框架的入口文件(在项目的入口文件中必须要载入此文件来载入整个TP框架)
</p>
<h3>2.2.2、创建项目</h3>
<p>
  ①创建项目目录
</p>
<p><img loading="lazy" decoding="async" width="643" height="100" src="/wp-content/uploads/2018/05/word-image-3570.png" class="wp-image-4027" srcset="/wp-content/uploads/2018/05/word-image-3570.png 643w, /wp-content/uploads/2018/05/word-image-3570-300x47.png 300w" sizes="(max-width: 643px) 100vw, 643px" /></p>
<p>
  ②拷贝TP的框架源代码
</p>
<p><img loading="lazy" decoding="async" width="1232" height="332" src="/wp-content/uploads/2018/05/word-image-3571.png" class="wp-image-4028" srcset="/wp-content/uploads/2018/05/word-image-3571.png 1232w, /wp-content/uploads/2018/05/word-image-3571-300x81.png 300w, /wp-content/uploads/2018/05/word-image-3571-768x207.png 768w, /wp-content/uploads/2018/05/word-image-3571-1024x276.png 1024w" sizes="(max-width: 1232px) 100vw, 1232px" /></p>
<h3>2.2.3、创建虚拟主机</h3>
<p>
  ①修改Apache的虚拟主机配置文件
</p>
<p><img loading="lazy" decoding="async" width="934" height="516" src="/wp-content/uploads/2018/05/word-image-3572.png" class="wp-image-4029" srcset="/wp-content/uploads/2018/05/word-image-3572.png 934w, /wp-content/uploads/2018/05/word-image-3572-300x166.png 300w, /wp-content/uploads/2018/05/word-image-3572-768x424.png 768w" sizes="(max-width: 934px) 100vw, 934px" /></p>
<p>
  ②修改本机的hosts文件
</p>
<p><img loading="lazy" decoding="async" width="800" height="444" src="/wp-content/uploads/2018/05/word-image-3573.png" class="wp-image-4030" srcset="/wp-content/uploads/2018/05/word-image-3573.png 800w, /wp-content/uploads/2018/05/word-image-3573-300x167.png 300w, /wp-content/uploads/2018/05/word-image-3573-768x426.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>
  ③重启Apache访问测试
</p>
<p><img loading="lazy" decoding="async" width="881" height="297" src="/wp-content/uploads/2018/05/word-image-3574.png" class="wp-image-4031" srcset="/wp-content/uploads/2018/05/word-image-3574.png 881w, /wp-content/uploads/2018/05/word-image-3574-300x101.png 300w, /wp-content/uploads/2018/05/word-image-3574-768x259.png 768w" sizes="(max-width: 881px) 100vw, 881px" /></p>
<h3>2.2.4、创建应用</h3>
<p>
  ①编写入口文件
</p>
<p><img loading="lazy" decoding="async" width="1188" height="451" src="/wp-content/uploads/2018/05/word-image-3575.png" class="wp-image-4032" srcset="/wp-content/uploads/2018/05/word-image-3575.png 1188w, /wp-content/uploads/2018/05/word-image-3575-300x114.png 300w, /wp-content/uploads/2018/05/word-image-3575-768x292.png 768w, /wp-content/uploads/2018/05/word-image-3575-1024x389.png 1024w" sizes="(max-width: 1188px) 100vw, 1188px" /></p>
<p>
  ②访问测试
</p>
<p><img loading="lazy" decoding="async" width="998" height="465" src="/wp-content/uploads/2018/05/word-image-3576.png" class="wp-image-4033" srcset="/wp-content/uploads/2018/05/word-image-3576.png 998w, /wp-content/uploads/2018/05/word-image-3576-300x140.png 300w, /wp-content/uploads/2018/05/word-image-3576-768x358.png 768w" sizes="(max-width: 998px) 100vw, 998px" /></p>
<p>
  ③查看效果
</p>
<p><img loading="lazy" decoding="async" width="336" height="365" src="/wp-content/uploads/2018/05/word-image-3577.png" class="wp-image-4034" srcset="/wp-content/uploads/2018/05/word-image-3577.png 336w, /wp-content/uploads/2018/05/word-image-3577-276x300.png 276w" sizes="(max-width: 336px) 100vw, 336px" /></p>
<p>
  ④解释应用中的目录
</p>
<p><img loading="lazy" decoding="async" width="1057" height="362" src="/wp-content/uploads/2018/05/word-image-3578.png" class="wp-image-4035" srcset="/wp-content/uploads/2018/05/word-image-3578.png 1057w, /wp-content/uploads/2018/05/word-image-3578-300x103.png 300w, /wp-content/uploads/2018/05/word-image-3578-768x263.png 768w, /wp-content/uploads/2018/05/word-image-3578-1024x351.png 1024w" sizes="(max-width: 1057px) 100vw, 1057px" /></p>
<p>
  ⑤进入Home解释目录<br />
  
</p>
<p><img loading="lazy" decoding="async" width="883" height="299" src="/wp-content/uploads/2018/05/word-image-3579.png" class="wp-image-4036" srcset="/wp-content/uploads/2018/05/word-image-3579.png 883w, /wp-content/uploads/2018/05/word-image-3579-300x102.png 300w, /wp-content/uploads/2018/05/word-image-3579-768x260.png 768w" sizes="(max-width: 883px) 100vw, 883px" /></p>
<p>
  优化小技巧：
</p>
<ol>
<li>
  解决自己项目中的死链接。如果死链接比较多。会影响到项目的加载速度
</li>
</ol>
<p>
  2、更换磁盘为固态
</p>
<ol>
<li>
  磁盘冗余阵列。买raid卡挂载多块磁盘
</li>
</ol>
<h1>控制器及URL模式</h1>
<h2>3.1、创建控制器</h2>
<h3>3.1.1、控制器的存储方式</h3>
<ol>
<li>
  存储地址
</li>
</ol>
<p>
  应用(application)/模块(Home)/Controller
</p>
<ol>
<li>
  文件命名
</li>
</ol>
<p>
  控制器名称(满足驼峰式规范)+Controller+.class.php
</p>
<h3>3.1.2、控制器的创建规则</h3>
<ol>
<li>
  申明命名空间(按照目录地址规则)
</li>
<li>
  引入TP的控制器的基类
</li>
<li>
  编写自定义的控制器的类
</li>
</ol>
<h3>3.1.3、具体创建控制器</h3>
<p><img loading="lazy" decoding="async" width="1248" height="696" src="/wp-content/uploads/2018/05/word-image-3580.png" class="wp-image-4037" srcset="/wp-content/uploads/2018/05/word-image-3580.png 1248w, /wp-content/uploads/2018/05/word-image-3580-300x167.png 300w, /wp-content/uploads/2018/05/word-image-3580-768x428.png 768w, /wp-content/uploads/2018/05/word-image-3580-1024x571.png 1024w" sizes="(max-width: 1248px) 100vw, 1248px" /></p>
<h2>3.2、URL地址解析</h2>
<p>
  默认情况下TP访问的完整地址：<a href="/goto/hd8t" rel="nofollow">http://域名/入口文件?m=模块名称&amp;c=控制器名称&amp;a=方法名称(操作)</a>
</p>
<p>
  ①在控制器中增加方法
</p>
<p><img loading="lazy" decoding="async" width="1163" height="563" src="/wp-content/uploads/2018/05/word-image-3581.png" class="wp-image-4038" srcset="/wp-content/uploads/2018/05/word-image-3581.png 1163w, /wp-content/uploads/2018/05/word-image-3581-300x145.png 300w, /wp-content/uploads/2018/05/word-image-3581-768x372.png 768w, /wp-content/uploads/2018/05/word-image-3581-1024x496.png 1024w" sizes="(max-width: 1163px) 100vw, 1163px" /></p>
<p>
  ②访问测试
</p>
<p><img loading="lazy" decoding="async" width="862" height="277" src="/wp-content/uploads/2018/05/word-image-3582.png" class="wp-image-4039" srcset="/wp-content/uploads/2018/05/word-image-3582.png 862w, /wp-content/uploads/2018/05/word-image-3582-300x96.png 300w, /wp-content/uploads/2018/05/word-image-3582-768x247.png 768w" sizes="(max-width: 862px) 100vw, 862px" /></p>
<h2>3.3、默认访问(理解)</h2>
<h3>3.3.1、分析默认访问的情况</h3>
<p><img loading="lazy" decoding="async" width="1011" height="481" src="/wp-content/uploads/2018/05/word-image-3583.png" class="wp-image-4040" srcset="/wp-content/uploads/2018/05/word-image-3583.png 1011w, /wp-content/uploads/2018/05/word-image-3583-300x143.png 300w, /wp-content/uploads/2018/05/word-image-3583-768x365.png 768w" sizes="(max-width: 1011px) 100vw, 1011px" /></p>
<p>
  对于上述直接访问首先Apache的默认访问页为index.php因此就进入到项目的入口文件。由于TP默认的配置项设置默认的模块为Home默认的控制器为Index默认的方法为index因此可以看到上述效果
</p>
<h3>3.3.2、修改默认访问</h3>
<p>
  ①查看TP中的默认配置项
</p>
<p><img loading="lazy" decoding="async" width="1018" height="410" src="/wp-content/uploads/2018/05/word-image-3584.png" class="wp-image-4041" srcset="/wp-content/uploads/2018/05/word-image-3584.png 1018w, /wp-content/uploads/2018/05/word-image-3584-300x121.png 300w, /wp-content/uploads/2018/05/word-image-3584-768x309.png 768w" sizes="(max-width: 1018px) 100vw, 1018px" /></p>
<p>
  ②修改配置项
</p>
<p><img loading="lazy" decoding="async" width="1024" height="385" src="/wp-content/uploads/2018/05/word-image-3585.png" class="wp-image-4042" srcset="/wp-content/uploads/2018/05/word-image-3585.png 1024w, /wp-content/uploads/2018/05/word-image-3585-300x113.png 300w, /wp-content/uploads/2018/05/word-image-3585-768x289.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>
  ③删除缓存文件
</p>
<p><img loading="lazy" decoding="async" width="843" height="267" src="/wp-content/uploads/2018/05/word-image-3586.png" class="wp-image-4043" srcset="/wp-content/uploads/2018/05/word-image-3586.png 843w, /wp-content/uploads/2018/05/word-image-3586-300x95.png 300w, /wp-content/uploads/2018/05/word-image-3586-768x243.png 768w" sizes="(max-width: 843px) 100vw, 843px" /></p>
<p>
  ④查看效果如下
</p>
<p><img loading="lazy" decoding="async" width="866" height="349" src="/wp-content/uploads/2018/05/word-image-3587.png" class="wp-image-4044" srcset="/wp-content/uploads/2018/05/word-image-3587.png 866w, /wp-content/uploads/2018/05/word-image-3587-300x121.png 300w, /wp-content/uploads/2018/05/word-image-3587-768x310.png 768w" sizes="(max-width: 866px) 100vw, 866px" /></p>
<p>
  此时产生报错的原因是因为默认的方法不存在
</p>
<h2>3.4、调试模式</h2>
<p>
  通过定义一个常量操作TP所处的模式。调试默认每次都会自动的加载最新的配置文件以及公共函数。跟调试模式对应的叫做生产模式
</p>
<p>
  在实际开发的过程中开启调试模式。当项目上线运行的过程中需要使用生产模式。在生成模式下会缓存(临时存储信息)对于的文件信息也会减少日志文件的生成
</p>
<p>
  ①开启调试模式
</p>
<p><img loading="lazy" decoding="async" width="976" height="522" src="/wp-content/uploads/2018/05/word-image-3588.png" class="wp-image-4045" srcset="/wp-content/uploads/2018/05/word-image-3588.png 976w, /wp-content/uploads/2018/05/word-image-3588-300x160.png 300w, /wp-content/uploads/2018/05/word-image-3588-768x411.png 768w" sizes="(max-width: 976px) 100vw, 976px" /></p>
<p>
  ②查看访问效果
</p>
<p><img loading="lazy" decoding="async" width="1277" height="567" src="/wp-content/uploads/2018/05/word-image-3589.png" class="wp-image-4046" srcset="/wp-content/uploads/2018/05/word-image-3589.png 1277w, /wp-content/uploads/2018/05/word-image-3589-300x133.png 300w, /wp-content/uploads/2018/05/word-image-3589-768x341.png 768w, /wp-content/uploads/2018/05/word-image-3589-1024x455.png 1024w" sizes="(max-width: 1277px) 100vw, 1277px" /></p>
<p>
  ③查看runtime下的目录
</p>
<p><img loading="lazy" decoding="async" width="896" height="364" src="/wp-content/uploads/2018/05/word-image-3590.png" class="wp-image-4047" srcset="/wp-content/uploads/2018/05/word-image-3590.png 896w, /wp-content/uploads/2018/05/word-image-3590-300x122.png 300w, /wp-content/uploads/2018/05/word-image-3590-768x312.png 768w" sizes="(max-width: 896px) 100vw, 896px" /></p>
<h2>3.5、TP中的模块</h2>
<p>
  在TP中的应用目录下每一个文件就是一个模块只是Common跟Runtime比较特殊。不能参与项目中其他”访问功能业务”。想要增加模块可以直接在应用目录下去增加目录即可
</p>
<p>
  例如如下增加后台模块
</p>
<p>
  ①创建目录
</p>
<p><img loading="lazy" decoding="async" width="912" height="241" src="/wp-content/uploads/2018/05/word-image-3591.png" class="wp-image-4048" srcset="/wp-content/uploads/2018/05/word-image-3591.png 912w, /wp-content/uploads/2018/05/word-image-3591-300x79.png 300w, /wp-content/uploads/2018/05/word-image-3591-768x203.png 768w" sizes="(max-width: 912px) 100vw, 912px" /></p>
<p>
  ②创建控制器
</p>
<p><img loading="lazy" decoding="async" width="1022" height="659" src="/wp-content/uploads/2018/05/word-image-3592.png" class="wp-image-4049" srcset="/wp-content/uploads/2018/05/word-image-3592.png 1022w, /wp-content/uploads/2018/05/word-image-3592-300x193.png 300w, /wp-content/uploads/2018/05/word-image-3592-768x495.png 768w" sizes="(max-width: 1022px) 100vw, 1022px" /></p>
<p>
  ③访问测试
</p>
<p><img loading="lazy" decoding="async" width="682" height="226" src="/wp-content/uploads/2018/05/word-image-3593.png" class="wp-image-4050" srcset="/wp-content/uploads/2018/05/word-image-3593.png 682w, /wp-content/uploads/2018/05/word-image-3593-300x99.png 300w" sizes="(max-width: 682px) 100vw, 682px" /></p>
<h2>3.6、TP中的配置文件</h2>
<h3>3.6.1、配置文件地址</h3>
<ol>
<li>
  Tp框架中惯例配置文件(ThinkPHP\Conf\convention.php)
</li>
<li>
  公共模块的配置文件(Application\Common\Conf\config.php)
</li>
<li>
  某一个模块的配置文件(Application\模块\Conf\config.php)
</li>
</ol>
<p>
  对于配置文件TP是自动载入的。因此可以在项目中直接使用配置文件
</p>
<h3>3.6.2、TP中配置文件的优先级</h3>
<p>
  配置文件优先级含义：当同一个配置项在三个文件中同时出现最终使用哪一个配置文件中的内容
</p>
<p>
  模块配置文件&gt;公共模块配置文件&gt;TP惯例配置文件
</p>
<h3>3.6.3、演示配置文件优先级</h3>
<p>
  ①修改公共模块的配置文件
</p>
<p><img loading="lazy" decoding="async" width="1279" height="336" src="/wp-content/uploads/2018/05/word-image-3594.png" class="wp-image-4051" srcset="/wp-content/uploads/2018/05/word-image-3594.png 1279w, /wp-content/uploads/2018/05/word-image-3594-300x79.png 300w, /wp-content/uploads/2018/05/word-image-3594-768x202.png 768w, /wp-content/uploads/2018/05/word-image-3594-1024x269.png 1024w" sizes="(max-width: 1279px) 100vw, 1279px" /></p>
<p>
  ②修改Home模块下的配置
</p>
<p><img loading="lazy" decoding="async" width="970" height="343" src="/wp-content/uploads/2018/05/word-image-3595.png" class="wp-image-4052" srcset="/wp-content/uploads/2018/05/word-image-3595.png 970w, /wp-content/uploads/2018/05/word-image-3595-300x106.png 300w, /wp-content/uploads/2018/05/word-image-3595-768x272.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></p>
<p>
  ③增加测试方法
</p>
<p><img loading="lazy" decoding="async" width="913" height="452" src="/wp-content/uploads/2018/05/word-image-3596.png" class="wp-image-4053" srcset="/wp-content/uploads/2018/05/word-image-3596.png 913w, /wp-content/uploads/2018/05/word-image-3596-300x149.png 300w, /wp-content/uploads/2018/05/word-image-3596-768x380.png 768w" sizes="(max-width: 913px) 100vw, 913px" /></p>
<p>
  ④查看效果
</p>
<p><img loading="lazy" decoding="async" width="565" height="251" src="/wp-content/uploads/2018/05/word-image-3597.png" class="wp-image-4054" srcset="/wp-content/uploads/2018/05/word-image-3597.png 565w, /wp-content/uploads/2018/05/word-image-3597-300x133.png 300w" sizes="(max-width: 565px) 100vw, 565px" /></p>
<h2>3.7、TP中的四种URL模式（重点）</h2>
<h3>3.7.1、四种URL模式介绍</h3>
<p>
  ①普通模式
</p>
<p>
  直接通过给入口文件传递m、c、a三个参数
</p>
<p>
  m对应模块名称
</p>
<p>
  c对应控制器名称
</p>
<p>
  a对应方法名称
</p>
<p>
  格式：<a href="/goto/zx7y" rel="nofollow">http://tp.com/index.php?m=Home&amp;c=Index&amp;a=test2</a>
</p>
<p>
  任何情况下都可以访问
</p>
<p>
  ②pathinfo模式
</p>
<p>
  Pathinfo模式从URL地址栏上看上去像一个目录的格式。
</p>
<p>
  格式为：<a href="/goto/itit" rel="nofollow">http://tp.com/index.php/Home/Index/test2</a>
</p>
<p>
  对于上述的地址格式入口文件后的每一个“/”分隔的就是一个参数
</p>
<p>
  Home(第一个参数)对应的模块名称
</p>
<p>
  Index(第二个参数)对应的控制器名称
</p>
<p>
  Test2(第三个参数)对应的方法名称
</p>
<p>
  注意：pathinfo模式需要有web服务器的支持 Apache支持此模式。Nginx就不支持
</p>
<p>
  ③重写模式
</p>
<p>
  将原本的URL访问改写成其他的URL形式。重写模式根据不同的web服务器决定。最常见的重写就是隐藏项目的入口文件
</p>
<p>
  例如
</p>
<p>
  访问:http://tp.com/Home/Index/test2=&gt;解析的地址为http://tp.com、index.php/Home/Index/test2
</p>
<p>
  ④兼容模式
</p>
<p>
  考虑部分web服务器不支持pathinfo。又想要去使用类似pathinfo的格式。就可以使用兼容模式
</p>
<p>
  格式：<a href="/goto/dc8y" rel="nofollow">http://tp.com/index.php?s=/Home/Index/test2</a>
</p>
<p>
  兼容模式没有任何其他的外界要求
</p>
<h3>3.7.2、实现隐藏入口文件</h3>
<p>
  ①开启Apache的重写模块
</p>
<p><img loading="lazy" decoding="async" width="1012" height="473" src="/wp-content/uploads/2018/05/word-image-3598.png" class="wp-image-4055" srcset="/wp-content/uploads/2018/05/word-image-3598.png 1012w, /wp-content/uploads/2018/05/word-image-3598-300x140.png 300w, /wp-content/uploads/2018/05/word-image-3598-768x359.png 768w" sizes="(max-width: 1012px) 100vw, 1012px" /></p>
<p>
  ②设置虚拟主机可以重写
</p>
<p><img loading="lazy" decoding="async" width="1126" height="545" src="/wp-content/uploads/2018/05/word-image-3599.png" class="wp-image-4056" srcset="/wp-content/uploads/2018/05/word-image-3599.png 1126w, /wp-content/uploads/2018/05/word-image-3599-300x145.png 300w, /wp-content/uploads/2018/05/word-image-3599-768x372.png 768w, /wp-content/uploads/2018/05/word-image-3599-1024x496.png 1024w" sizes="(max-width: 1126px) 100vw, 1126px" /></p>
<p>
  ③拷贝重写规则文件
</p>
<p><img loading="lazy" decoding="async" width="1172" height="491" src="/wp-content/uploads/2018/05/word-image-3600.png" class="wp-image-4057" srcset="/wp-content/uploads/2018/05/word-image-3600.png 1172w, /wp-content/uploads/2018/05/word-image-3600-300x126.png 300w, /wp-content/uploads/2018/05/word-image-3600-768x322.png 768w, /wp-content/uploads/2018/05/word-image-3600-1024x429.png 1024w" sizes="(max-width: 1172px) 100vw, 1172px" /></p>
<p>
  ④重启Apache查看效果
</p>
<p><img loading="lazy" decoding="async" width="544" height="125" src="/wp-content/uploads/2018/05/word-image-3601.png" class="wp-image-4058" srcset="/wp-content/uploads/2018/05/word-image-3601.png 544w, /wp-content/uploads/2018/05/word-image-3601-300x69.png 300w" sizes="(max-width: 544px) 100vw, 544px" /></p>
<p>
  注意：只要条件满足TP中的四种URL模式都可以使用访问到方法
</p>
<h3>3.7.3、URL地址生成(重点会用)</h3>
<p>
  使用TP提供的U函数根据当前的模型、控制器、方法、参数等生产一个链接地址
</p>
<p>
  ①查看U函数的使用方式
</p>
<p><img loading="lazy" decoding="async" width="1157" height="639" src="/wp-content/uploads/2018/05/word-image-3602.png" class="wp-image-4059" srcset="/wp-content/uploads/2018/05/word-image-3602.png 1157w, /wp-content/uploads/2018/05/word-image-3602-300x166.png 300w, /wp-content/uploads/2018/05/word-image-3602-768x424.png 768w, /wp-content/uploads/2018/05/word-image-3602-1024x566.png 1024w" sizes="(max-width: 1157px) 100vw, 1157px" /></p>
<p>
  ②编写测试代码
</p>
<p><img loading="lazy" decoding="async" width="1097" height="695" src="/wp-content/uploads/2018/05/word-image-3603.png" class="wp-image-4060" srcset="/wp-content/uploads/2018/05/word-image-3603.png 1097w, /wp-content/uploads/2018/05/word-image-3603-300x190.png 300w, /wp-content/uploads/2018/05/word-image-3603-768x487.png 768w, /wp-content/uploads/2018/05/word-image-3603-1024x649.png 1024w" sizes="(max-width: 1097px) 100vw, 1097px" /></p>
<p>
  ④查看效果
</p>
<p><img loading="lazy" decoding="async" width="964" height="449" src="/wp-content/uploads/2018/05/word-image-3604.png" class="wp-image-4061" srcset="/wp-content/uploads/2018/05/word-image-3604.png 964w, /wp-content/uploads/2018/05/word-image-3604-300x140.png 300w, /wp-content/uploads/2018/05/word-image-3604-768x358.png 768w" sizes="(max-width: 964px) 100vw, 964px" /></p>
<p>
  从上述结果中可以得知TP默认的是使用pathinfo模式
</p>
<p>
  在TP的配置文件中有一个URL_MODEL控制使用的URL模式
</p>
<p>
  ⑤查看惯例配置中的配置项
</p>
<p><img loading="lazy" decoding="async" width="1149" height="440" src="/wp-content/uploads/2018/05/word-image-3605.png" class="wp-image-4062" srcset="/wp-content/uploads/2018/05/word-image-3605.png 1149w, /wp-content/uploads/2018/05/word-image-3605-300x115.png 300w, /wp-content/uploads/2018/05/word-image-3605-768x294.png 768w, /wp-content/uploads/2018/05/word-image-3605-1024x392.png 1024w" sizes="(max-width: 1149px) 100vw, 1149px" /></p>
<p>
  ⑥查看普通模式的地址
</p>
<p>
  修改URL模式
</p>
<p><img loading="lazy" decoding="async" width="862" height="389" src="/wp-content/uploads/2018/05/word-image-3606.png" class="wp-image-4063" srcset="/wp-content/uploads/2018/05/word-image-3606.png 862w, /wp-content/uploads/2018/05/word-image-3606-300x135.png 300w, /wp-content/uploads/2018/05/word-image-3606-768x347.png 768w" sizes="(max-width: 862px) 100vw, 862px" /></p>
<p>
  效果如下
</p>
<p><img loading="lazy" decoding="async" width="864" height="347" src="/wp-content/uploads/2018/05/word-image-3607.png" class="wp-image-4064" srcset="/wp-content/uploads/2018/05/word-image-3607.png 864w, /wp-content/uploads/2018/05/word-image-3607-300x120.png 300w, /wp-content/uploads/2018/05/word-image-3607-768x308.png 768w" sizes="(max-width: 864px) 100vw, 864px" /></p>
<p>
  ⑦查看重写模式地址
</p>
<p><img loading="lazy" decoding="async" width="1102" height="447" src="/wp-content/uploads/2018/05/word-image-3608.png" class="wp-image-4065" srcset="/wp-content/uploads/2018/05/word-image-3608.png 1102w, /wp-content/uploads/2018/05/word-image-3608-300x122.png 300w, /wp-content/uploads/2018/05/word-image-3608-768x312.png 768w, /wp-content/uploads/2018/05/word-image-3608-1024x415.png 1024w" sizes="(max-width: 1102px) 100vw, 1102px" /></p>
<p>
  结果如下
</p>
<p><img loading="lazy" decoding="async" width="786" height="339" src="/wp-content/uploads/2018/05/word-image-3609.png" class="wp-image-4066" srcset="/wp-content/uploads/2018/05/word-image-3609.png 786w, /wp-content/uploads/2018/05/word-image-3609-300x129.png 300w, /wp-content/uploads/2018/05/word-image-3609-768x331.png 768w" sizes="(max-width: 786px) 100vw, 786px" /></p>
<p>
  ⑧查看兼容模式
</p>
<p><img loading="lazy" decoding="async" width="1063" height="379" src="/wp-content/uploads/2018/05/word-image-3610.png" class="wp-image-4067" srcset="/wp-content/uploads/2018/05/word-image-3610.png 1063w, /wp-content/uploads/2018/05/word-image-3610-300x107.png 300w, /wp-content/uploads/2018/05/word-image-3610-768x274.png 768w, /wp-content/uploads/2018/05/word-image-3610-1024x365.png 1024w" sizes="(max-width: 1063px) 100vw, 1063px" /><br />
<img loading="lazy" decoding="async" width="804" height="375" src="/wp-content/uploads/2018/05/word-image-3611.png" class="wp-image-4068" srcset="/wp-content/uploads/2018/05/word-image-3611.png 804w, /wp-content/uploads/2018/05/word-image-3611-300x140.png 300w, /wp-content/uploads/2018/05/word-image-3611-768x358.png 768w" sizes="(max-width: 804px) 100vw, 804px" /></p>
<p>
  注意：TP中的四种URL模式并不是限制项目需要使用哪一种模式进行访问。URL_MODEL配置项的作用是为了控制U函数所生成的URL地址的格式
</p>
<h2>3.8、页面跳转与重定向</h2>
<p>
  关于页面跳转跟重定向功能是经常使用。常见位置在数据操作完成之后的提示信息
</p>
<h3>3.8.1、页面跳转</h3>
<p>
  在TP的控制器基类中提供了两个方法可以实现跳转功能分别为success跟error
</p>
<p>
  ①查看源码位置
</p>
<p><img loading="lazy" decoding="async" width="1087" height="695" src="/wp-content/uploads/2018/05/word-image-3612.png" class="wp-image-4069" srcset="/wp-content/uploads/2018/05/word-image-3612.png 1087w, /wp-content/uploads/2018/05/word-image-3612-300x192.png 300w, /wp-content/uploads/2018/05/word-image-3612-768x491.png 768w, /wp-content/uploads/2018/05/word-image-3612-1024x655.png 1024w" sizes="(max-width: 1087px) 100vw, 1087px" /></p>
<p>
  ②测试成功的方法使用
</p>
<p><img loading="lazy" decoding="async" width="1029" height="505" src="/wp-content/uploads/2018/05/word-image-3613.png" class="wp-image-4070" srcset="/wp-content/uploads/2018/05/word-image-3613.png 1029w, /wp-content/uploads/2018/05/word-image-3613-300x147.png 300w, /wp-content/uploads/2018/05/word-image-3613-768x377.png 768w, /wp-content/uploads/2018/05/word-image-3613-1024x503.png 1024w" sizes="(max-width: 1029px) 100vw, 1029px" /></p>
<p>
  ③测试失败的方法的使用
</p>
<p><img loading="lazy" decoding="async" width="1017" height="482" src="/wp-content/uploads/2018/05/word-image-3614.png" class="wp-image-4071" srcset="/wp-content/uploads/2018/05/word-image-3614.png 1017w, /wp-content/uploads/2018/05/word-image-3614-300x142.png 300w, /wp-content/uploads/2018/05/word-image-3614-768x364.png 768w" sizes="(max-width: 1017px) 100vw, 1017px" /></p>
<p>
  ④关于成功失败跳转的模板文件地址
</p>
<p><img loading="lazy" decoding="async" width="1289" height="643" src="/wp-content/uploads/2018/05/word-image-3615.png" class="wp-image-4072" srcset="/wp-content/uploads/2018/05/word-image-3615.png 1289w, /wp-content/uploads/2018/05/word-image-3615-300x150.png 300w, /wp-content/uploads/2018/05/word-image-3615-768x383.png 768w, /wp-content/uploads/2018/05/word-image-3615-1024x511.png 1024w" sizes="(max-width: 1289px) 100vw, 1289px" /></p>
<h3>3.8.2、页面重定向</h3>
<p>
  ①查看使用方式
</p>
<p><img loading="lazy" decoding="async" width="1098" height="682" src="/wp-content/uploads/2018/05/word-image-3616.png" class="wp-image-4073" srcset="/wp-content/uploads/2018/05/word-image-3616.png 1098w, /wp-content/uploads/2018/05/word-image-3616-300x186.png 300w, /wp-content/uploads/2018/05/word-image-3616-768x477.png 768w, /wp-content/uploads/2018/05/word-image-3616-1024x636.png 1024w" sizes="(max-width: 1098px) 100vw, 1098px" /></p>
<p>
  ②创建方法测试
</p>
<p><img loading="lazy" decoding="async" width="1095" height="545" src="/wp-content/uploads/2018/05/word-image-3617.png" class="wp-image-4074" srcset="/wp-content/uploads/2018/05/word-image-3617.png 1095w, /wp-content/uploads/2018/05/word-image-3617-300x149.png 300w, /wp-content/uploads/2018/05/word-image-3617-768x382.png 768w, /wp-content/uploads/2018/05/word-image-3617-1024x510.png 1024w" sizes="(max-width: 1095px) 100vw, 1095px" /></p>
<p>
  ③查看效果
</p>
<p><img loading="lazy" decoding="async" width="679" height="241" src="/wp-content/uploads/2018/05/word-image-3618.png" class="wp-image-4075" srcset="/wp-content/uploads/2018/05/word-image-3618.png 679w, /wp-content/uploads/2018/05/word-image-3618-300x106.png 300w" sizes="(max-width: 679px) 100vw, 679px" /></p>
<h2>3.9、空控制器与空操作</h2>
<h3>3.9.1、空操作</h3>
<p>
  当用户访问某一个不存在的方法时接下来由单独的一个空操作(对应在控制中的_empty的方法)实现处理请求。
</p>
<p>
  ①增加方法
</p>
<p><img loading="lazy" decoding="async" width="839" height="468" src="/wp-content/uploads/2018/05/word-image-3619.png" class="wp-image-4076" srcset="/wp-content/uploads/2018/05/word-image-3619.png 839w, /wp-content/uploads/2018/05/word-image-3619-300x167.png 300w, /wp-content/uploads/2018/05/word-image-3619-768x428.png 768w" sizes="(max-width: 839px) 100vw, 839px" /></p>
<p>
  ②访问测试
</p>
<p><img loading="lazy" decoding="async" width="1032" height="363" src="/wp-content/uploads/2018/05/word-image-3620.png" class="wp-image-4077" srcset="/wp-content/uploads/2018/05/word-image-3620.png 1032w, /wp-content/uploads/2018/05/word-image-3620-300x106.png 300w, /wp-content/uploads/2018/05/word-image-3620-768x270.png 768w, /wp-content/uploads/2018/05/word-image-3620-1024x360.png 1024w" sizes="(max-width: 1032px) 100vw, 1032px" /></p>
<h3>3.9.2、空控制器</h3>
<p>
  当用户访问一个不存在的控制器时会自动的去执行空控制下对应的方法。
</p>
<p>
  ①先创建空控制器
</p>
<p><img loading="lazy" decoding="async" width="858" height="481" src="/wp-content/uploads/2018/05/word-image-3621.png" class="wp-image-4078" srcset="/wp-content/uploads/2018/05/word-image-3621.png 858w, /wp-content/uploads/2018/05/word-image-3621-300x168.png 300w, /wp-content/uploads/2018/05/word-image-3621-768x431.png 768w" sizes="(max-width: 858px) 100vw, 858px" /></p>
<p>
  ②执行查看效果
</p>
<p><img loading="lazy" decoding="async" width="1094" height="461" src="/wp-content/uploads/2018/05/word-image-3622.png" class="wp-image-4079" srcset="/wp-content/uploads/2018/05/word-image-3622.png 1094w, /wp-content/uploads/2018/05/word-image-3622-300x126.png 300w, /wp-content/uploads/2018/05/word-image-3622-768x324.png 768w, /wp-content/uploads/2018/05/word-image-3622-1024x432.png 1024w" sizes="(max-width: 1094px) 100vw, 1094px" /></p>
<p>
  ③在空控制器中创建空方法
</p>
<p><img loading="lazy" decoding="async" width="936" height="648" src="/wp-content/uploads/2018/05/word-image-3623.png" class="wp-image-4080" srcset="/wp-content/uploads/2018/05/word-image-3623.png 936w, /wp-content/uploads/2018/05/word-image-3623-300x208.png 300w, /wp-content/uploads/2018/05/word-image-3623-768x532.png 768w" sizes="(max-width: 936px) 100vw, 936px" /></p>
<p>
  效果如下
</p>
<p><img loading="lazy" decoding="async" width="694" height="184" src="/wp-content/uploads/2018/05/word-image-3624.png" class="wp-image-4081" srcset="/wp-content/uploads/2018/05/word-image-3624.png 694w, /wp-content/uploads/2018/05/word-image-3624-300x80.png 300w" sizes="(max-width: 694px) 100vw, 694px" /></p>
<p>
  备注：最好事先错误的提示页面通过使用web服务器的错误提示设置
</p>
<h1>视图(一)</h1>
<h2>4.1、视图创建规则</h2>
<h3>4.1.1、视图创建规则</h3>
<ol>
<li>
  默认情况下需要将视图的模板文件存储在模块下的view目录中
</li>
<li>
  默认情况下视图存储需要在View下跟控制器同名的目录中
</li>
<li>
  默认情况下视图模板文件名称需要保持跟方法同名后缀为.html的模板
</li>
</ol>
<h3>4.1.2、创建视图</h3>
<p>
  ①创建根控制器同名的目录
</p>
<p><img loading="lazy" decoding="async" width="997" height="187" src="/wp-content/uploads/2018/05/word-image-3625.png" class="wp-image-4082" srcset="/wp-content/uploads/2018/05/word-image-3625.png 997w, /wp-content/uploads/2018/05/word-image-3625-300x56.png 300w, /wp-content/uploads/2018/05/word-image-3625-768x144.png 768w" sizes="(max-width: 997px) 100vw, 997px" /></p>
<p>
  ②创建模板
</p>
<p><img loading="lazy" decoding="async" width="918" height="476" src="/wp-content/uploads/2018/05/word-image-3626.png" class="wp-image-4083" srcset="/wp-content/uploads/2018/05/word-image-3626.png 918w, /wp-content/uploads/2018/05/word-image-3626-300x156.png 300w, /wp-content/uploads/2018/05/word-image-3626-768x398.png 768w" sizes="(max-width: 918px) 100vw, 918px" /></p>
<h2>4.2、控制器调用视图</h2>
<p>
  对于在TP的方法中需要使用视图的模板可以使用两个方法分别为display跟fetch方法。
</p>
<p>
  对于display跟fetch用法一模一样，区别在于display会直接输出模板的结果。Fetch不会直接输出
</p>
<h3>4.2.1、演示display跟fetch的区别</h3>
<p>
  ①创建方法
</p>
<p><img loading="lazy" decoding="async" width="1061" height="596" src="/wp-content/uploads/2018/05/word-image-3627.png" class="wp-image-4084" srcset="/wp-content/uploads/2018/05/word-image-3627.png 1061w, /wp-content/uploads/2018/05/word-image-3627-300x169.png 300w, /wp-content/uploads/2018/05/word-image-3627-768x431.png 768w, /wp-content/uploads/2018/05/word-image-3627-1024x575.png 1024w" sizes="(max-width: 1061px) 100vw, 1061px" /></p>
<p>
  ②查看效果
</p>
<p><img loading="lazy" decoding="async" width="764" height="167" src="/wp-content/uploads/2018/05/word-image-3628.png" class="wp-image-4085" srcset="/wp-content/uploads/2018/05/word-image-3628.png 764w, /wp-content/uploads/2018/05/word-image-3628-300x66.png 300w" sizes="(max-width: 764px) 100vw, 764px" /><br />
<img loading="lazy" decoding="async" width="708" height="259" src="/wp-content/uploads/2018/05/word-image-3629.png" class="wp-image-4086" srcset="/wp-content/uploads/2018/05/word-image-3629.png 708w, /wp-content/uploads/2018/05/word-image-3629-300x110.png 300w" sizes="(max-width: 708px) 100vw, 708px" /></p>
<p>
  修改showtwo方法
</p>
<p><img loading="lazy" decoding="async" width="946" height="587" src="/wp-content/uploads/2018/05/word-image-3630.png" class="wp-image-4087" srcset="/wp-content/uploads/2018/05/word-image-3630.png 946w, /wp-content/uploads/2018/05/word-image-3630-300x186.png 300w, /wp-content/uploads/2018/05/word-image-3630-768x477.png 768w" sizes="(max-width: 946px) 100vw, 946px" /></p>
<p>
  结果如下
</p>
<p><img loading="lazy" decoding="async" width="740" height="323" src="/wp-content/uploads/2018/05/word-image-3631.png" class="wp-image-4088" srcset="/wp-content/uploads/2018/05/word-image-3631.png 740w, /wp-content/uploads/2018/05/word-image-3631-300x131.png 300w" sizes="(max-width: 740px) 100vw, 740px" /></p>
<h3>4.2.2、演示display用法</h3>
<p>
  ①查看使用方式
</p>
<p><img loading="lazy" decoding="async" width="848" height="390" src="/wp-content/uploads/2018/05/word-image-3632.png" class="wp-image-4089" srcset="/wp-content/uploads/2018/05/word-image-3632.png 848w, /wp-content/uploads/2018/05/word-image-3632-300x138.png 300w, /wp-content/uploads/2018/05/word-image-3632-768x353.png 768w" sizes="(max-width: 848px) 100vw, 848px" /></p>
<p>
  ②指定模块方式使用display
</p>
<p>
  创建测试方法
</p>
<p><img loading="lazy" decoding="async" width="898" height="626" src="/wp-content/uploads/2018/05/word-image-3633.png" class="wp-image-4090" srcset="/wp-content/uploads/2018/05/word-image-3633.png 898w, /wp-content/uploads/2018/05/word-image-3633-300x209.png 300w, /wp-content/uploads/2018/05/word-image-3633-768x535.png 768w" sizes="(max-width: 898px) 100vw, 898px" /></p>
<p>
  查看效果
</p>
<p><img loading="lazy" decoding="async" width="654" height="179" src="/wp-content/uploads/2018/05/word-image-3634.png" class="wp-image-4091" srcset="/wp-content/uploads/2018/05/word-image-3634.png 654w, /wp-content/uploads/2018/05/word-image-3634-300x82.png 300w" sizes="(max-width: 654px) 100vw, 654px" /><br />
<img loading="lazy" decoding="async" width="633" height="135" src="/wp-content/uploads/2018/05/word-image-3635.png" class="wp-image-4092" srcset="/wp-content/uploads/2018/05/word-image-3635.png 633w, /wp-content/uploads/2018/05/word-image-3635-300x64.png 300w" sizes="(max-width: 633px) 100vw, 633px" /></p>
<p>
  ③直接指定模板文件地址
</p>
<p>
  创建测试方法
</p>
<p><img loading="lazy" decoding="async" width="1058" height="373" src="/wp-content/uploads/2018/05/word-image-3636.png" class="wp-image-4093" srcset="/wp-content/uploads/2018/05/word-image-3636.png 1058w, /wp-content/uploads/2018/05/word-image-3636-300x106.png 300w, /wp-content/uploads/2018/05/word-image-3636-768x271.png 768w, /wp-content/uploads/2018/05/word-image-3636-1024x361.png 1024w" sizes="(max-width: 1058px) 100vw, 1058px" /></p>
<p>
  查看结果
</p>
<p><img loading="lazy" decoding="async" width="764" height="202" src="/wp-content/uploads/2018/05/word-image-3637.png" class="wp-image-4094" srcset="/wp-content/uploads/2018/05/word-image-3637.png 764w, /wp-content/uploads/2018/05/word-image-3637-300x79.png 300w" sizes="(max-width: 764px) 100vw, 764px" /></p>
<h2>4.3、模板替换</h2>
<p>
  模板替换就是通过在模板中使用TP内置的”模板变量”.TP在每次渲染模板之前都会讲对应的模板变量进行替换
</p>
<h3>4.3.1、内置的模板替换</h3>
<p>
  ①查看文档
</p>
<p>
  在TP有内置的模板变量替换如下
</p>
<p><img loading="lazy" decoding="async" width="885" height="277" src="/wp-content/uploads/2018/05/word-image-3638.png" class="wp-image-4095" srcset="/wp-content/uploads/2018/05/word-image-3638.png 885w, /wp-content/uploads/2018/05/word-image-3638-300x94.png 300w, /wp-content/uploads/2018/05/word-image-3638-768x240.png 768w" sizes="(max-width: 885px) 100vw, 885px" /></p>
<p>
  ②修改show模板查看效果
</p>
<p><img loading="lazy" decoding="async" width="1080" height="675" src="/wp-content/uploads/2018/05/word-image-3639.png" class="wp-image-4096" srcset="/wp-content/uploads/2018/05/word-image-3639.png 1080w, /wp-content/uploads/2018/05/word-image-3639-300x188.png 300w, /wp-content/uploads/2018/05/word-image-3639-768x480.png 768w, /wp-content/uploads/2018/05/word-image-3639-1024x640.png 1024w" sizes="(max-width: 1080px) 100vw, 1080px" /></p>
<p>
  效果如下
</p>
<p><img loading="lazy" decoding="async" width="989" height="425" src="/wp-content/uploads/2018/05/word-image-3640.png" class="wp-image-4097" srcset="/wp-content/uploads/2018/05/word-image-3640.png 989w, /wp-content/uploads/2018/05/word-image-3640-300x129.png 300w, /wp-content/uploads/2018/05/word-image-3640-768x330.png 768w" sizes="(max-width: 989px) 100vw, 989px" /></p>
<p>
  最常使用的是__PUBLIC__替换资源地址
</p>
<h3>4.3.2、自定义模板替换</h3>
<p>
  ①增加自定义配置项
</p>
<p><img loading="lazy" decoding="async" width="987" height="525" src="/wp-content/uploads/2018/05/word-image-3641.png" class="wp-image-4098" srcset="/wp-content/uploads/2018/05/word-image-3641.png 987w, /wp-content/uploads/2018/05/word-image-3641-300x160.png 300w, /wp-content/uploads/2018/05/word-image-3641-768x409.png 768w" sizes="(max-width: 987px) 100vw, 987px" /></p>
<p>
  ②模板中使用
</p>
<p><img loading="lazy" decoding="async" width="1068" height="412" src="/wp-content/uploads/2018/05/word-image-3642.png" class="wp-image-4099" srcset="/wp-content/uploads/2018/05/word-image-3642.png 1068w, /wp-content/uploads/2018/05/word-image-3642-300x116.png 300w, /wp-content/uploads/2018/05/word-image-3642-768x296.png 768w, /wp-content/uploads/2018/05/word-image-3642-1024x395.png 1024w" sizes="(max-width: 1068px) 100vw, 1068px" /></p>
<p>
  ③效果如下
</p>
<p><img loading="lazy" decoding="async" width="869" height="257" src="/wp-content/uploads/2018/05/word-image-3643.png" class="wp-image-4100" srcset="/wp-content/uploads/2018/05/word-image-3643.png 869w, /wp-content/uploads/2018/05/word-image-3643-300x89.png 300w, /wp-content/uploads/2018/05/word-image-3643-768x227.png 768w" sizes="(max-width: 869px) 100vw, 869px" /></p>
<h1>案例-搭建电商项目后台</h1>
<h2>5.1、项目部署</h2>
<h3>5.1.1、创建项目</h3>
<p>
  ①创建项目的根目录
</p>
<p><img loading="lazy" decoding="async" width="987" height="294" src="/wp-content/uploads/2018/05/word-image-3644.png" class="wp-image-4101" srcset="/wp-content/uploads/2018/05/word-image-3644.png 987w, /wp-content/uploads/2018/05/word-image-3644-300x89.png 300w, /wp-content/uploads/2018/05/word-image-3644-768x229.png 768w" sizes="(max-width: 987px) 100vw, 987px" /></p>
<p>
  ②创建wwwroot目录
</p>
<p><img loading="lazy" decoding="async" width="890" height="153" src="/wp-content/uploads/2018/05/word-image-3645.png" class="wp-image-4102" srcset="/wp-content/uploads/2018/05/word-image-3645.png 890w, /wp-content/uploads/2018/05/word-image-3645-300x52.png 300w, /wp-content/uploads/2018/05/word-image-3645-768x132.png 768w" sizes="(max-width: 890px) 100vw, 890px" /></p>
<p>
  ③拷贝TP的框架源代码
</p>
<p><img loading="lazy" decoding="async" width="1159" height="358" src="/wp-content/uploads/2018/05/word-image-3646.png" class="wp-image-4103" srcset="/wp-content/uploads/2018/05/word-image-3646.png 1159w, /wp-content/uploads/2018/05/word-image-3646-300x93.png 300w, /wp-content/uploads/2018/05/word-image-3646-768x237.png 768w, /wp-content/uploads/2018/05/word-image-3646-1024x316.png 1024w" sizes="(max-width: 1159px) 100vw, 1159px" /></p>
<p>
  ④拷贝入口文件及重写规则文件
</p>
<p><img loading="lazy" decoding="async" width="1212" height="376" src="/wp-content/uploads/2018/05/word-image-3647.png" class="wp-image-4104" srcset="/wp-content/uploads/2018/05/word-image-3647.png 1212w, /wp-content/uploads/2018/05/word-image-3647-300x93.png 300w, /wp-content/uploads/2018/05/word-image-3647-768x238.png 768w, /wp-content/uploads/2018/05/word-image-3647-1024x318.png 1024w" sizes="(max-width: 1212px) 100vw, 1212px" /></p>
<h3>5.1.2、配置虚拟主机</h3>
<p>
  ①增加虚拟主机
</p>
<p><img loading="lazy" decoding="async" width="1053" height="449" src="/wp-content/uploads/2018/05/word-image-3648.png" class="wp-image-4105" srcset="/wp-content/uploads/2018/05/word-image-3648.png 1053w, /wp-content/uploads/2018/05/word-image-3648-300x128.png 300w, /wp-content/uploads/2018/05/word-image-3648-768x327.png 768w, /wp-content/uploads/2018/05/word-image-3648-1024x437.png 1024w" sizes="(max-width: 1053px) 100vw, 1053px" /></p>
<p>
  ②修改hosts文件
</p>
<p><img loading="lazy" decoding="async" width="864" height="408" src="/wp-content/uploads/2018/05/word-image-3649.png" class="wp-image-4106" srcset="/wp-content/uploads/2018/05/word-image-3649.png 864w, /wp-content/uploads/2018/05/word-image-3649-300x142.png 300w, /wp-content/uploads/2018/05/word-image-3649-768x363.png 768w" sizes="(max-width: 864px) 100vw, 864px" /></p>
<p>
  ③修改入口文件
</p>
<p><img loading="lazy" decoding="async" width="996" height="553" src="/wp-content/uploads/2018/05/word-image-3650.png" class="wp-image-4107" srcset="/wp-content/uploads/2018/05/word-image-3650.png 996w, /wp-content/uploads/2018/05/word-image-3650-300x167.png 300w, /wp-content/uploads/2018/05/word-image-3650-768x426.png 768w" sizes="(max-width: 996px) 100vw, 996px" /></p>
<p>
  ④重启Apache访问查看
</p>
<p><img loading="lazy" decoding="async" width="978" height="447" src="/wp-content/uploads/2018/05/word-image-3651.png" class="wp-image-4108" srcset="/wp-content/uploads/2018/05/word-image-3651.png 978w, /wp-content/uploads/2018/05/word-image-3651-300x137.png 300w, /wp-content/uploads/2018/05/word-image-3651-768x351.png 768w" sizes="(max-width: 978px) 100vw, 978px" /></p>
<p>
  查看目录结构
</p>
<p><img loading="lazy" decoding="async" width="642" height="366" src="/wp-content/uploads/2018/05/word-image-3652.png" class="wp-image-4109" srcset="/wp-content/uploads/2018/05/word-image-3652.png 642w, /wp-content/uploads/2018/05/word-image-3652-300x171.png 300w" sizes="(max-width: 642px) 100vw, 642px" /></p>
<p>
  对于此方式部署项目由于域名解析的目录下只有入口文件。因此项目的安全性更好
</p>
<h2>5.2、创建后台模块</h2>
<p>
  ①复制Home模块为Admin
</p>
<p><img loading="lazy" decoding="async" width="950" height="253" src="/wp-content/uploads/2018/05/word-image-3653.png" class="wp-image-4110" srcset="/wp-content/uploads/2018/05/word-image-3653.png 950w, /wp-content/uploads/2018/05/word-image-3653-300x80.png 300w, /wp-content/uploads/2018/05/word-image-3653-768x205.png 768w" sizes="(max-width: 950px) 100vw, 950px" /></p>
<p>
  ②修改后台模块下的index控制器
</p>
<p><img loading="lazy" decoding="async" width="1021" height="483" src="/wp-content/uploads/2018/05/word-image-3654.png" class="wp-image-4111" srcset="/wp-content/uploads/2018/05/word-image-3654.png 1021w, /wp-content/uploads/2018/05/word-image-3654-300x142.png 300w, /wp-content/uploads/2018/05/word-image-3654-768x363.png 768w" sizes="(max-width: 1021px) 100vw, 1021px" /></p>
<p>
  ③访问查看
</p>
<p><img loading="lazy" decoding="async" width="1086" height="261" src="/wp-content/uploads/2018/05/word-image-3655.png" class="wp-image-4112" srcset="/wp-content/uploads/2018/05/word-image-3655.png 1086w, /wp-content/uploads/2018/05/word-image-3655-300x72.png 300w, /wp-content/uploads/2018/05/word-image-3655-768x185.png 768w, /wp-content/uploads/2018/05/word-image-3655-1024x246.png 1024w" sizes="(max-width: 1086px) 100vw, 1086px" /></p>
<h2>5.3、处理URL地址</h2>
<h3>5.3.1、隐藏入口文件</h3>
<p>
  ①修改Apache的配置启用重写模式
</p>
<p><img loading="lazy" decoding="async" width="806" height="359" src="/wp-content/uploads/2018/05/word-image-3656.png" class="wp-image-4113" srcset="/wp-content/uploads/2018/05/word-image-3656.png 806w, /wp-content/uploads/2018/05/word-image-3656-300x134.png 300w, /wp-content/uploads/2018/05/word-image-3656-768x342.png 768w" sizes="(max-width: 806px) 100vw, 806px" /></p>
<p>
  ②设置虚拟主机可以重启
</p>
<p><img loading="lazy" decoding="async" width="948" height="486" src="/wp-content/uploads/2018/05/word-image-3657.png" class="wp-image-4114" srcset="/wp-content/uploads/2018/05/word-image-3657.png 948w, /wp-content/uploads/2018/05/word-image-3657-300x154.png 300w, /wp-content/uploads/2018/05/word-image-3657-768x394.png 768w" sizes="(max-width: 948px) 100vw, 948px" /></p>
<p>
  重写规则文件已经拷贝
</p>
<p>
  ③重启Apache访问测试
</p>
<p><img loading="lazy" decoding="async" width="969" height="470" src="/wp-content/uploads/2018/05/word-image-3658.png" class="wp-image-4115" srcset="/wp-content/uploads/2018/05/word-image-3658.png 969w, /wp-content/uploads/2018/05/word-image-3658-300x146.png 300w, /wp-content/uploads/2018/05/word-image-3658-768x373.png 768w" sizes="(max-width: 969px) 100vw, 969px" /></p>
<p>
  ④创建测试方法使用U函数生成
</p>
<p><img loading="lazy" decoding="async" width="929" height="479" src="/wp-content/uploads/2018/05/word-image-3659.png" class="wp-image-4116" srcset="/wp-content/uploads/2018/05/word-image-3659.png 929w, /wp-content/uploads/2018/05/word-image-3659-300x155.png 300w, /wp-content/uploads/2018/05/word-image-3659-768x396.png 768w" sizes="(max-width: 929px) 100vw, 929px" /></p>
<p>
  ⑤访问测试
</p>
<p><img loading="lazy" decoding="async" width="498" height="206" src="/wp-content/uploads/2018/05/word-image-3660.png" class="wp-image-4117" srcset="/wp-content/uploads/2018/05/word-image-3660.png 498w, /wp-content/uploads/2018/05/word-image-3660-300x124.png 300w" sizes="(max-width: 498px) 100vw, 498px" /></p>
<p>
  ⑥设置为重写模式
</p>
<p><img loading="lazy" decoding="async" width="981" height="416" src="/wp-content/uploads/2018/05/word-image-3661.png" class="wp-image-4118" srcset="/wp-content/uploads/2018/05/word-image-3661.png 981w, /wp-content/uploads/2018/05/word-image-3661-300x127.png 300w, /wp-content/uploads/2018/05/word-image-3661-768x326.png 768w" sizes="(max-width: 981px) 100vw, 981px" /></p>
<p>
  再次查看效果
</p>
<p><img loading="lazy" decoding="async" width="517" height="176" src="/wp-content/uploads/2018/05/word-image-3662.png" class="wp-image-4119" srcset="/wp-content/uploads/2018/05/word-image-3662.png 517w, /wp-content/uploads/2018/05/word-image-3662-300x102.png 300w" sizes="(max-width: 517px) 100vw, 517px" /></p>
<h3>5.3.2、隐藏Home模块</h3>
<p>
  ①设置默认的模块以及容许访问的模块
</p>
<p><img loading="lazy" decoding="async" width="967" height="472" src="/wp-content/uploads/2018/05/word-image-3663.png" class="wp-image-4120" srcset="/wp-content/uploads/2018/05/word-image-3663.png 967w, /wp-content/uploads/2018/05/word-image-3663-300x146.png 300w, /wp-content/uploads/2018/05/word-image-3663-768x375.png 768w" sizes="(max-width: 967px) 100vw, 967px" /></p>
<p>
  ②查看效果
</p>
<p><img loading="lazy" decoding="async" width="824" height="209" src="/wp-content/uploads/2018/05/word-image-3664.png" class="wp-image-4121" srcset="/wp-content/uploads/2018/05/word-image-3664.png 824w, /wp-content/uploads/2018/05/word-image-3664-300x76.png 300w, /wp-content/uploads/2018/05/word-image-3664-768x195.png 768w" sizes="(max-width: 824px) 100vw, 824px" /></p>
<h2>5.4、实现后台的首页显示</h2>
<p>
  ①修改Index控制器代码
</p>
<p><img loading="lazy" decoding="async" width="948" height="476" src="/wp-content/uploads/2018/05/word-image-3665.png" class="wp-image-4122" srcset="/wp-content/uploads/2018/05/word-image-3665.png 948w, /wp-content/uploads/2018/05/word-image-3665-300x151.png 300w, /wp-content/uploads/2018/05/word-image-3665-768x386.png 768w" sizes="(max-width: 948px) 100vw, 948px" /></p>
<p>
  ②创建视图目录
</p>
<p><img loading="lazy" decoding="async" width="926" height="210" src="/wp-content/uploads/2018/05/word-image-3666.png" class="wp-image-4123" srcset="/wp-content/uploads/2018/05/word-image-3666.png 926w, /wp-content/uploads/2018/05/word-image-3666-300x68.png 300w, /wp-content/uploads/2018/05/word-image-3666-768x174.png 768w" sizes="(max-width: 926px) 100vw, 926px" /></p>
<p>
  ③拷贝首页模板
</p>
<p><img loading="lazy" decoding="async" width="1287" height="541" src="/wp-content/uploads/2018/05/word-image-3667.png" class="wp-image-4124" srcset="/wp-content/uploads/2018/05/word-image-3667.png 1287w, /wp-content/uploads/2018/05/word-image-3667-300x126.png 300w, /wp-content/uploads/2018/05/word-image-3667-768x323.png 768w, /wp-content/uploads/2018/05/word-image-3667-1024x430.png 1024w" sizes="(max-width: 1287px) 100vw, 1287px" /></p>
<p>
  ④查看效果
</p>
<p><img loading="lazy" decoding="async" width="956" height="399" src="/wp-content/uploads/2018/05/word-image-3668.png" class="wp-image-4125" srcset="/wp-content/uploads/2018/05/word-image-3668.png 956w, /wp-content/uploads/2018/05/word-image-3668-300x125.png 300w, /wp-content/uploads/2018/05/word-image-3668-768x321.png 768w" sizes="(max-width: 956px) 100vw, 956px" /></p>
<p>
  ⑤拷贝其他模板
</p>
<p><img loading="lazy" decoding="async" width="1312" height="517" src="/wp-content/uploads/2018/05/word-image-3669.png" class="wp-image-4126" srcset="/wp-content/uploads/2018/05/word-image-3669.png 1312w, /wp-content/uploads/2018/05/word-image-3669-300x118.png 300w, /wp-content/uploads/2018/05/word-image-3669-768x303.png 768w, /wp-content/uploads/2018/05/word-image-3669-1024x404.png 1024w" sizes="(max-width: 1312px) 100vw, 1312px" /></p>
<p>
  ⑥查看效果
</p>
<p><img loading="lazy" decoding="async" width="1174" height="381" src="/wp-content/uploads/2018/05/word-image-3670.png" class="wp-image-4127" srcset="/wp-content/uploads/2018/05/word-image-3670.png 1174w, /wp-content/uploads/2018/05/word-image-3670-300x97.png 300w, /wp-content/uploads/2018/05/word-image-3670-768x249.png 768w, /wp-content/uploads/2018/05/word-image-3670-1024x332.png 1024w" sizes="(max-width: 1174px) 100vw, 1174px" /><br />
<img loading="lazy" decoding="async" width="782" height="169" src="/wp-content/uploads/2018/05/word-image-3671.png" class="wp-image-4128" srcset="/wp-content/uploads/2018/05/word-image-3671.png 782w, /wp-content/uploads/2018/05/word-image-3671-300x65.png 300w, /wp-content/uploads/2018/05/word-image-3671-768x166.png 768w" sizes="(max-width: 782px) 100vw, 782px" /></p>
<p>
  ⑦修改首页的模板
</p>
<p><img loading="lazy" decoding="async" width="1088" height="610" src="/wp-content/uploads/2018/05/word-image-3672.png" class="wp-image-4129" srcset="/wp-content/uploads/2018/05/word-image-3672.png 1088w, /wp-content/uploads/2018/05/word-image-3672-300x168.png 300w, /wp-content/uploads/2018/05/word-image-3672-768x431.png 768w, /wp-content/uploads/2018/05/word-image-3672-1024x574.png 1024w" sizes="(max-width: 1088px) 100vw, 1088px" /></p>
<h2>5.5、处理后台资源地址</h2>
<p>
  ①拷贝资源文件
</p>
<p><img loading="lazy" decoding="async" width="1318" height="419" src="/wp-content/uploads/2018/05/word-image-3673.png" class="wp-image-4130" srcset="/wp-content/uploads/2018/05/word-image-3673.png 1318w, /wp-content/uploads/2018/05/word-image-3673-300x95.png 300w, /wp-content/uploads/2018/05/word-image-3673-768x244.png 768w, /wp-content/uploads/2018/05/word-image-3673-1024x326.png 1024w" sizes="(max-width: 1318px) 100vw, 1318px" /></p>
<p>
  ②自定义模板替换
</p>
<p><img loading="lazy" decoding="async" width="935" height="534" src="/wp-content/uploads/2018/05/word-image-3674.png" class="wp-image-4131" srcset="/wp-content/uploads/2018/05/word-image-3674.png 935w, /wp-content/uploads/2018/05/word-image-3674-300x171.png 300w, /wp-content/uploads/2018/05/word-image-3674-768x439.png 768w" sizes="(max-width: 935px) 100vw, 935px" /></p>
<p>
  ③修改top模板
</p>
<p><img loading="lazy" decoding="async" width="1073" height="453" src="/wp-content/uploads/2018/05/word-image-3675.png" class="wp-image-4132" srcset="/wp-content/uploads/2018/05/word-image-3675.png 1073w, /wp-content/uploads/2018/05/word-image-3675-300x127.png 300w, /wp-content/uploads/2018/05/word-image-3675-768x324.png 768w, /wp-content/uploads/2018/05/word-image-3675-1024x432.png 1024w" sizes="(max-width: 1073px) 100vw, 1073px" /></p>
<p>
  ④修改menu模板
</p>
<p><img loading="lazy" decoding="async" width="1079" height="491" src="/wp-content/uploads/2018/05/word-image-3676.png" class="wp-image-4133" srcset="/wp-content/uploads/2018/05/word-image-3676.png 1079w, /wp-content/uploads/2018/05/word-image-3676-300x137.png 300w, /wp-content/uploads/2018/05/word-image-3676-768x349.png 768w, /wp-content/uploads/2018/05/word-image-3676-1024x466.png 1024w" sizes="(max-width: 1079px) 100vw, 1079px" /></p>
<p>
  ⑤修改main模板
</p>
<p><img loading="lazy" decoding="async" width="1076" height="525" src="/wp-content/uploads/2018/05/word-image-3677.png" class="wp-image-4134" srcset="/wp-content/uploads/2018/05/word-image-3677.png 1076w, /wp-content/uploads/2018/05/word-image-3677-300x146.png 300w, /wp-content/uploads/2018/05/word-image-3677-768x375.png 768w, /wp-content/uploads/2018/05/word-image-3677-1024x500.png 1024w" sizes="(max-width: 1076px) 100vw, 1076px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/4022.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TP 3.2 （四）模型, 统计方法、连表查询、Session 机制、分类、验证码、电商后台</title>
		<link>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/3732.html</link>
					<comments>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/3732.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 13:05:47 +0000</pubDate>
				<category><![CDATA[TP3.2]]></category>
		<category><![CDATA[后台框架]]></category>
		<category><![CDATA[Session 机制]]></category>
		<category><![CDATA[分类]]></category>
		<category><![CDATA[模型]]></category>
		<category><![CDATA[电商后台]]></category>
		<category><![CDATA[统计方法]]></category>
		<category><![CDATA[连表查询]]></category>
		<category><![CDATA[验证码]]></category>
		<guid isPermaLink="false">/?p=3732</guid>

					<description><![CDATA[TP中的模型(三) 1.1、AR模式 AR模式ActiveRecords模式的ORM模型，采用了非标准的ORM [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>TP中的模型(三)</h1>
<h2>1.1、AR模式</h2>
<p>
  AR模式ActiveRecords模式的ORM模型，采用了非标准的ORM模型。模型对应数据表，对象对应数据行，属性对应数据字段。AR模式是采用面向对象思想(OOP)。对于此方式新的框架中都是采用的ORM模式
</p>
<h3>1.1.1、演示数据的写入</h3>
<p>
  ①创建测试方法
</p>
<p><img loading="lazy" decoding="async" width="1045" height="507" src="/wp-content/uploads/2018/05/word-image-3283.png" class="wp-image-3733" srcset="/wp-content/uploads/2018/05/word-image-3283.png 1045w, /wp-content/uploads/2018/05/word-image-3283-300x146.png 300w, /wp-content/uploads/2018/05/word-image-3283-768x373.png 768w, /wp-content/uploads/2018/05/word-image-3283-1024x497.png 1024w" sizes="(max-width: 1045px) 100vw, 1045px" /></p>
<p>
  ②访问查看写入数据
</p>
<p><img loading="lazy" decoding="async" width="513" height="520" src="/wp-content/uploads/2018/05/word-image-3284.png" class="wp-image-3734" srcset="/wp-content/uploads/2018/05/word-image-3284.png 513w, /wp-content/uploads/2018/05/word-image-3284-296x300.png 296w" sizes="(max-width: 513px) 100vw, 513px" /></p>
<h3>1.1.2、演示数据查询</h3>
<p>
  ①创建测试方法
</p>
<p><img loading="lazy" decoding="async" width="845" height="367" src="/wp-content/uploads/2018/05/word-image-3285.png" class="wp-image-3735" srcset="/wp-content/uploads/2018/05/word-image-3285.png 845w, /wp-content/uploads/2018/05/word-image-3285-300x130.png 300w, /wp-content/uploads/2018/05/word-image-3285-768x334.png 768w" sizes="(max-width: 845px) 100vw, 845px" /></p>
<p>
  ②查看结果
</p>
<p><img loading="lazy" decoding="async" width="765" height="156" src="/wp-content/uploads/2018/05/word-image-3286.png" class="wp-image-3736" srcset="/wp-content/uploads/2018/05/word-image-3286.png 765w, /wp-content/uploads/2018/05/word-image-3286-300x61.png 300w" sizes="(max-width: 765px) 100vw, 765px" /><br />
<img loading="lazy" decoding="async" width="611" height="170" src="/wp-content/uploads/2018/05/word-image-3287.png" class="wp-image-3737" srcset="/wp-content/uploads/2018/05/word-image-3287.png 611w, /wp-content/uploads/2018/05/word-image-3287-300x83.png 300w" sizes="(max-width: 611px) 100vw, 611px" /></p>
<p>
  ③根据条件进行查询
</p>
<p><img loading="lazy" decoding="async" width="897" height="355" src="/wp-content/uploads/2018/05/word-image-3288.png" class="wp-image-3738" srcset="/wp-content/uploads/2018/05/word-image-3288.png 897w, /wp-content/uploads/2018/05/word-image-3288-300x119.png 300w, /wp-content/uploads/2018/05/word-image-3288-768x304.png 768w" sizes="(max-width: 897px) 100vw, 897px" /><br />
<img loading="lazy" decoding="async" width="775" height="297" src="/wp-content/uploads/2018/05/word-image-3289.png" class="wp-image-3739" srcset="/wp-content/uploads/2018/05/word-image-3289.png 775w, /wp-content/uploads/2018/05/word-image-3289-300x115.png 300w, /wp-content/uploads/2018/05/word-image-3289-768x294.png 768w" sizes="(max-width: 775px) 100vw, 775px" /></p>
<h2>1.2、TP中的统计方法</h2>
<p><img loading="lazy" decoding="async" width="700" height="379" src="/wp-content/uploads/2018/05/word-image-3290.png" class="wp-image-3740" srcset="/wp-content/uploads/2018/05/word-image-3290.png 700w, /wp-content/uploads/2018/05/word-image-3290-300x162.png 300w" sizes="(max-width: 700px) 100vw, 700px" /><br />
<img loading="lazy" decoding="async" width="978" height="515" src="/wp-content/uploads/2018/05/word-image-3291.png" class="wp-image-3741" srcset="/wp-content/uploads/2018/05/word-image-3291.png 978w, /wp-content/uploads/2018/05/word-image-3291-300x158.png 300w, /wp-content/uploads/2018/05/word-image-3291-768x404.png 768w" sizes="(max-width: 978px) 100vw, 978px" /><br />
<img loading="lazy" decoding="async" width="826" height="325" src="/wp-content/uploads/2018/05/word-image-3292.png" class="wp-image-3742" srcset="/wp-content/uploads/2018/05/word-image-3292.png 826w, /wp-content/uploads/2018/05/word-image-3292-300x118.png 300w, /wp-content/uploads/2018/05/word-image-3292-768x302.png 768w" sizes="(max-width: 826px) 100vw, 826px" /></p>
<h2>1.3、连表查询</h2>
<p><img loading="lazy" decoding="async" width="799" height="311" src="/wp-content/uploads/2018/05/word-image-3293.png" class="wp-image-3743" srcset="/wp-content/uploads/2018/05/word-image-3293.png 799w, /wp-content/uploads/2018/05/word-image-3293-300x117.png 300w, /wp-content/uploads/2018/05/word-image-3293-768x299.png 768w" sizes="(max-width: 799px) 100vw, 799px" /></p>
<h3>1.3.1、inner join使用</h3>
<p>
  ①创建数据表并且写入测试数据
</p>
<p><img loading="lazy" decoding="async" width="528" height="432" src="/wp-content/uploads/2018/05/word-image-3294.png" class="wp-image-3744" srcset="/wp-content/uploads/2018/05/word-image-3294.png 528w, /wp-content/uploads/2018/05/word-image-3294-300x245.png 300w" sizes="(max-width: 528px) 100vw, 528px" /></p>
<p>
  ②连接查询
</p>
<p><img loading="lazy" decoding="async" width="1018" height="468" src="/wp-content/uploads/2018/05/word-image-3295.png" class="wp-image-3745" srcset="/wp-content/uploads/2018/05/word-image-3295.png 1018w, /wp-content/uploads/2018/05/word-image-3295-300x138.png 300w, /wp-content/uploads/2018/05/word-image-3295-768x353.png 768w" sizes="(max-width: 1018px) 100vw, 1018px" /></p>
<p>
  ③查看效果
</p>
<p><img loading="lazy" decoding="async" width="801" height="502" src="/wp-content/uploads/2018/05/word-image-3296.png" class="wp-image-3746" srcset="/wp-content/uploads/2018/05/word-image-3296.png 801w, /wp-content/uploads/2018/05/word-image-3296-300x188.png 300w, /wp-content/uploads/2018/05/word-image-3296-768x481.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></p>
<p>
  ④使用field指定字段信息
</p>
<p><img loading="lazy" decoding="async" width="1019" height="431" src="/wp-content/uploads/2018/05/word-image-3297.png" class="wp-image-3747" srcset="/wp-content/uploads/2018/05/word-image-3297.png 1019w, /wp-content/uploads/2018/05/word-image-3297-300x127.png 300w, /wp-content/uploads/2018/05/word-image-3297-768x325.png 768w" sizes="(max-width: 1019px) 100vw, 1019px" /><br />
<img loading="lazy" decoding="async" width="749" height="472" src="/wp-content/uploads/2018/05/word-image-3298.png" class="wp-image-3748" srcset="/wp-content/uploads/2018/05/word-image-3298.png 749w, /wp-content/uploads/2018/05/word-image-3298-300x189.png 300w" sizes="(max-width: 749px) 100vw, 749px" /></p>
<h3>1.3.1、left join 使用</h3>
<p><img loading="lazy" decoding="async" width="1037" height="563" src="/wp-content/uploads/2018/05/word-image-3299.png" class="wp-image-3749" srcset="/wp-content/uploads/2018/05/word-image-3299.png 1037w, /wp-content/uploads/2018/05/word-image-3299-300x163.png 300w, /wp-content/uploads/2018/05/word-image-3299-768x417.png 768w, /wp-content/uploads/2018/05/word-image-3299-1024x556.png 1024w" sizes="(max-width: 1037px) 100vw, 1037px" /><br />
<img loading="lazy" decoding="async" width="718" height="413" src="/wp-content/uploads/2018/05/word-image-3300.png" class="wp-image-3750" srcset="/wp-content/uploads/2018/05/word-image-3300.png 718w, /wp-content/uploads/2018/05/word-image-3300-300x173.png 300w" sizes="(max-width: 718px) 100vw, 718px" /></p>
<h2>1.4、原生sql语句</h2>
<p>
  Query：执行查询的sql语句。返回结果集
</p>
<p>
  Execute：执行写入(增加、修改、删除)的SQL语句。返回受影响行数
</p>
<h3>1.4.1、演示query方法使用</h3>
<p><img loading="lazy" decoding="async" width="833" height="386" src="/wp-content/uploads/2018/05/word-image-3301.png" class="wp-image-3751" srcset="/wp-content/uploads/2018/05/word-image-3301.png 833w, /wp-content/uploads/2018/05/word-image-3301-300x139.png 300w, /wp-content/uploads/2018/05/word-image-3301-768x356.png 768w" sizes="(max-width: 833px) 100vw, 833px" /><br />
<img loading="lazy" decoding="async" width="668" height="407" src="/wp-content/uploads/2018/05/word-image-3302.png" class="wp-image-3752" srcset="/wp-content/uploads/2018/05/word-image-3302.png 668w, /wp-content/uploads/2018/05/word-image-3302-300x183.png 300w" sizes="(max-width: 668px) 100vw, 668px" /></p>
<h3>1.4.2、演示execute方法使用</h3>
<p><img loading="lazy" decoding="async" width="979" height="403" src="/wp-content/uploads/2018/05/word-image-3303.png" class="wp-image-3753" srcset="/wp-content/uploads/2018/05/word-image-3303.png 979w, /wp-content/uploads/2018/05/word-image-3303-300x123.png 300w, /wp-content/uploads/2018/05/word-image-3303-768x316.png 768w" sizes="(max-width: 979px) 100vw, 979px" /><br />
<img loading="lazy" decoding="async" width="722" height="404" src="/wp-content/uploads/2018/05/word-image-3304.png" class="wp-image-3754" srcset="/wp-content/uploads/2018/05/word-image-3304.png 722w, /wp-content/uploads/2018/05/word-image-3304-300x168.png 300w" sizes="(max-width: 722px) 100vw, 722px" /></p>
<h2>1.5、TP中的事物</h2>
<p>
  事物是mysql提供的一项功能。只针对innodb引擎的数据表。事物需要开启
</p>
<p>
  事物处理方法：
</p>
<p>
  startTrans：开启事物
</p>
<p>
  Rollback：回滚事物
</p>
<p>
  Commit：提交事物
</p>
<p>
  ①代码
</p>
<p><img loading="lazy" decoding="async" width="971" height="678" src="/wp-content/uploads/2018/05/word-image-3305.png" class="wp-image-3755" srcset="/wp-content/uploads/2018/05/word-image-3305.png 971w, /wp-content/uploads/2018/05/word-image-3305-300x209.png 300w, /wp-content/uploads/2018/05/word-image-3305-768x536.png 768w" sizes="(max-width: 971px) 100vw, 971px" /></p>
<p>
  ②结果
</p>
<p><img loading="lazy" decoding="async" width="1285" height="385" src="/wp-content/uploads/2018/05/word-image-3306.png" class="wp-image-3756" srcset="/wp-content/uploads/2018/05/word-image-3306.png 1285w, /wp-content/uploads/2018/05/word-image-3306-300x90.png 300w, /wp-content/uploads/2018/05/word-image-3306-768x230.png 768w, /wp-content/uploads/2018/05/word-image-3306-1024x307.png 1024w" sizes="(max-width: 1285px) 100vw, 1285px" /></p>
<h1>TP中的cookie与session</h1>
<h2>2.1、cookie与session的区别</h2>
<ol>
<li>
  cookie是存在客户端
</li>
<li>
  Session是存储在服务端
</li>
<li>
  Cookie保存的数据量有限
</li>
<li>
  session安全性更高
</li>
<li>
  session基于cookie之上的
</li>
</ol>
<h2>2.2、session机制</h2>
<p><img loading="lazy" decoding="async" width="1158" height="508" src="/wp-content/uploads/2018/05/word-image-3307.png" class="wp-image-3757" srcset="/wp-content/uploads/2018/05/word-image-3307.png 1158w, /wp-content/uploads/2018/05/word-image-3307-300x132.png 300w, /wp-content/uploads/2018/05/word-image-3307-768x337.png 768w, /wp-content/uploads/2018/05/word-image-3307-1024x449.png 1024w" sizes="(max-width: 1158px) 100vw, 1158px" /></p>
<h2>2.3、TP中session使用</h2>
<p>
  在TP中对于session的所有处理都通过使用session()函数进行处理。
</p>
<p>
  在框架载入时session就已经启动
</p>
<p><img loading="lazy" decoding="async" width="818" height="552" src="/wp-content/uploads/2018/05/word-image-3308.png" class="wp-image-3758" srcset="/wp-content/uploads/2018/05/word-image-3308.png 818w, /wp-content/uploads/2018/05/word-image-3308-300x202.png 300w, /wp-content/uploads/2018/05/word-image-3308-768x518.png 768w" sizes="(max-width: 818px) 100vw, 818px" /><br />
<img loading="lazy" decoding="async" width="840" height="658" src="/wp-content/uploads/2018/05/word-image-3309.png" class="wp-image-3759" srcset="/wp-content/uploads/2018/05/word-image-3309.png 840w, /wp-content/uploads/2018/05/word-image-3309-300x235.png 300w, /wp-content/uploads/2018/05/word-image-3309-768x602.png 768w" sizes="(max-width: 840px) 100vw, 840px" /></p>
<p>
  效果如下
</p>
<p>
  设置session
</p>
<p><img loading="lazy" decoding="async" width="629" height="312" src="/wp-content/uploads/2018/05/word-image-3310.png" class="wp-image-3760" srcset="/wp-content/uploads/2018/05/word-image-3310.png 629w, /wp-content/uploads/2018/05/word-image-3310-300x149.png 300w" sizes="(max-width: 629px) 100vw, 629px" /></p>
<p>
  获取session
</p>
<p><img loading="lazy" decoding="async" width="738" height="294" src="/wp-content/uploads/2018/05/word-image-3311.png" class="wp-image-3761" srcset="/wp-content/uploads/2018/05/word-image-3311.png 738w, /wp-content/uploads/2018/05/word-image-3311-300x120.png 300w" sizes="(max-width: 738px) 100vw, 738px" /></p>
<p>
  删除session
</p>
<p><img loading="lazy" decoding="async" width="595" height="226" src="/wp-content/uploads/2018/05/word-image-3312.png" class="wp-image-3762" srcset="/wp-content/uploads/2018/05/word-image-3312.png 595w, /wp-content/uploads/2018/05/word-image-3312-300x114.png 300w" sizes="(max-width: 595px) 100vw, 595px" /></p>
<p>
  再次查看session
</p>
<p><img loading="lazy" decoding="async" width="684" height="212" src="/wp-content/uploads/2018/05/word-image-3313.png" class="wp-image-3763" srcset="/wp-content/uploads/2018/05/word-image-3313.png 684w, /wp-content/uploads/2018/05/word-image-3313-300x93.png 300w" sizes="(max-width: 684px) 100vw, 684px" /></p>
<h2>2.4、cookie的使用</h2>
<p><img loading="lazy" decoding="async" width="1024" height="590" src="/wp-content/uploads/2018/05/word-image-3314.png" class="wp-image-3764" srcset="/wp-content/uploads/2018/05/word-image-3314.png 1024w, /wp-content/uploads/2018/05/word-image-3314-300x173.png 300w, /wp-content/uploads/2018/05/word-image-3314-768x443.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /><br />
<img loading="lazy" decoding="async" width="866" height="625" src="/wp-content/uploads/2018/05/word-image-3315.png" class="wp-image-3765" srcset="/wp-content/uploads/2018/05/word-image-3315.png 866w, /wp-content/uploads/2018/05/word-image-3315-300x217.png 300w, /wp-content/uploads/2018/05/word-image-3315-768x554.png 768w" sizes="(max-width: 866px) 100vw, 866px" /></p>
<p>
  查看现有的cookie内容
</p>
<p><img loading="lazy" decoding="async" width="651" height="186" src="/wp-content/uploads/2018/05/word-image-3316.png" class="wp-image-3766" srcset="/wp-content/uploads/2018/05/word-image-3316.png 651w, /wp-content/uploads/2018/05/word-image-3316-300x86.png 300w" sizes="(max-width: 651px) 100vw, 651px" /></p>
<p>
  设置cookie
</p>
<p><img loading="lazy" decoding="async" width="672" height="140" src="/wp-content/uploads/2018/05/word-image-3317.png" class="wp-image-3767" srcset="/wp-content/uploads/2018/05/word-image-3317.png 672w, /wp-content/uploads/2018/05/word-image-3317-300x63.png 300w" sizes="(max-width: 672px) 100vw, 672px" /></p>
<p>
  再次查看结果
</p>
<p><img loading="lazy" decoding="async" width="723" height="251" src="/wp-content/uploads/2018/05/word-image-3318.png" class="wp-image-3769" srcset="/wp-content/uploads/2018/05/word-image-3318.png 723w, /wp-content/uploads/2018/05/word-image-3318-300x104.png 300w" sizes="(max-width: 723px) 100vw, 723px" /></p>
<p>
  删除cookie
</p>
<p><img loading="lazy" decoding="async" width="651" height="179" src="/wp-content/uploads/2018/05/word-image-3319.png" class="wp-image-3770" srcset="/wp-content/uploads/2018/05/word-image-3319.png 651w, /wp-content/uploads/2018/05/word-image-3319-300x82.png 300w" sizes="(max-width: 651px) 100vw, 651px" /></p>
<p>
  再次查看cookie中的内容
</p>
<p><img loading="lazy" decoding="async" width="727" height="228" src="/wp-content/uploads/2018/05/word-image-3320.png" class="wp-image-3771" srcset="/wp-content/uploads/2018/05/word-image-3320.png 727w, /wp-content/uploads/2018/05/word-image-3320-300x94.png 300w" sizes="(max-width: 727px) 100vw, 727px" /></p>
<h1>验证码</h1>
<p>
  使用验证码一定注意PHP环境当中的gd库的扩展是否开启，并且需要注意到验证码功能是否能够正常使用
</p>
<p>
  TP验证码源码位置：ThinkPHP\Library\Think\Verify.class.php
</p>
<p>
  使用方式：直接实例化类对象调用方法即可
</p>
<h2>3.1、验证码基本使用</h2>
<p><img loading="lazy" decoding="async" width="998" height="396" src="/wp-content/uploads/2018/05/word-image-3321.png" class="wp-image-3772" srcset="/wp-content/uploads/2018/05/word-image-3321.png 998w, /wp-content/uploads/2018/05/word-image-3321-300x119.png 300w, /wp-content/uploads/2018/05/word-image-3321-768x305.png 768w" sizes="(max-width: 998px) 100vw, 998px" /></p>
<p>
  效果如下
</p>
<p><img loading="lazy" decoding="async" width="966" height="487" src="/wp-content/uploads/2018/05/word-image-3322.png" class="wp-image-3773" srcset="/wp-content/uploads/2018/05/word-image-3322.png 966w, /wp-content/uploads/2018/05/word-image-3322-300x151.png 300w, /wp-content/uploads/2018/05/word-image-3322-768x387.png 768w" sizes="(max-width: 966px) 100vw, 966px" /></p>
<h2>3.2、查看验证码使用方式</h2>
<p>
  ①查看验证码类的属性配置
</p>
<p><img loading="lazy" decoding="async" width="1064" height="678" src="/wp-content/uploads/2018/05/word-image-3323.png" class="wp-image-3774" srcset="/wp-content/uploads/2018/05/word-image-3323.png 1064w, /wp-content/uploads/2018/05/word-image-3323-300x191.png 300w, /wp-content/uploads/2018/05/word-image-3323-768x489.png 768w, /wp-content/uploads/2018/05/word-image-3323-1024x653.png 1024w" sizes="(max-width: 1064px) 100vw, 1064px" /></p>
<p>
  ②查看构造方法的使用
</p>
<p><img loading="lazy" decoding="async" width="1090" height="363" src="/wp-content/uploads/2018/05/word-image-3324.png" class="wp-image-3775" srcset="/wp-content/uploads/2018/05/word-image-3324.png 1090w, /wp-content/uploads/2018/05/word-image-3324-300x100.png 300w, /wp-content/uploads/2018/05/word-image-3324-768x256.png 768w, /wp-content/uploads/2018/05/word-image-3324-1024x341.png 1024w" sizes="(max-width: 1090px) 100vw, 1090px" /></p>
<p>
  ③查看check方法
</p>
<p><img loading="lazy" decoding="async" width="1029" height="666" src="/wp-content/uploads/2018/05/word-image-3325.png" class="wp-image-3776" srcset="/wp-content/uploads/2018/05/word-image-3325.png 1029w, /wp-content/uploads/2018/05/word-image-3325-300x194.png 300w, /wp-content/uploads/2018/05/word-image-3325-768x497.png 768w, /wp-content/uploads/2018/05/word-image-3325-1024x663.png 1024w" sizes="(max-width: 1029px) 100vw, 1029px" /></p>
<p>
  ④查看生产验证码的方法
</p>
<p><img loading="lazy" decoding="async" width="1112" height="658" src="/wp-content/uploads/2018/05/word-image-3326.png" class="wp-image-3777" srcset="/wp-content/uploads/2018/05/word-image-3326.png 1112w, /wp-content/uploads/2018/05/word-image-3326-300x178.png 300w, /wp-content/uploads/2018/05/word-image-3326-768x454.png 768w, /wp-content/uploads/2018/05/word-image-3326-1024x606.png 1024w" sizes="(max-width: 1112px) 100vw, 1112px" /></p>
<h2>3.3、生产验证码并且校验</h2>
<p><img loading="lazy" decoding="async" width="1037" height="691" src="/wp-content/uploads/2018/05/word-image-3327.png" class="wp-image-3778" srcset="/wp-content/uploads/2018/05/word-image-3327.png 1037w, /wp-content/uploads/2018/05/word-image-3327-300x200.png 300w, /wp-content/uploads/2018/05/word-image-3327-768x512.png 768w, /wp-content/uploads/2018/05/word-image-3327-1024x682.png 1024w" sizes="(max-width: 1037px) 100vw, 1037px" /></p>
<p>
  效果如下
</p>
<p>
  生产验证码
</p>
<p><img loading="lazy" decoding="async" width="950" height="408" src="/wp-content/uploads/2018/05/word-image-3328.png" class="wp-image-3779" srcset="/wp-content/uploads/2018/05/word-image-3328.png 950w, /wp-content/uploads/2018/05/word-image-3328-300x129.png 300w, /wp-content/uploads/2018/05/word-image-3328-768x330.png 768w" sizes="(max-width: 950px) 100vw, 950px" /></p>
<p>
  比对验证码
</p>
<p><img loading="lazy" decoding="async" width="904" height="150" src="/wp-content/uploads/2018/05/word-image-3329.png" class="wp-image-3780" srcset="/wp-content/uploads/2018/05/word-image-3329.png 904w, /wp-content/uploads/2018/05/word-image-3329-300x50.png 300w, /wp-content/uploads/2018/05/word-image-3329-768x127.png 768w" sizes="(max-width: 904px) 100vw, 904px" /></p>
<h1>数据分页</h1>
<h2>4.1、分页实现方式</h2>
<ol>
<li>
  计算总的记录数
</li>
<li>
  设置每一页多少条数据
</li>
<li>
  获取当前的页码
</li>
<li>
  根据当前的页码获取对应的数据本质就是处理limit
</li>
<li>
  计算出分页的导航信息
</li>
</ol>
<h2>4.2、查看分页类的使用方式</h2>
<p>
  关于分页类的源码地址：ThinkPHP\Library\Think\page.class.php
</p>
<p>
  ①查看配置信息
</p>
<p><img loading="lazy" decoding="async" width="1058" height="664" src="/wp-content/uploads/2018/05/word-image-3330.png" class="wp-image-3781" srcset="/wp-content/uploads/2018/05/word-image-3330.png 1058w, /wp-content/uploads/2018/05/word-image-3330-300x188.png 300w, /wp-content/uploads/2018/05/word-image-3330-768x482.png 768w, /wp-content/uploads/2018/05/word-image-3330-1024x643.png 1024w" sizes="(max-width: 1058px) 100vw, 1058px" /></p>
<p>
  ②构造方法
</p>
<p><img loading="lazy" decoding="async" width="1166" height="678" src="/wp-content/uploads/2018/05/word-image-3331.png" class="wp-image-3782" srcset="/wp-content/uploads/2018/05/word-image-3331.png 1166w, /wp-content/uploads/2018/05/word-image-3331-300x174.png 300w, /wp-content/uploads/2018/05/word-image-3331-768x447.png 768w, /wp-content/uploads/2018/05/word-image-3331-1024x595.png 1024w" sizes="(max-width: 1166px) 100vw, 1166px" /></p>
<p>
  ③查看show方法
</p>
<p><img loading="lazy" decoding="async" width="1029" height="640" src="/wp-content/uploads/2018/05/word-image-3332.png" class="wp-image-3783" srcset="/wp-content/uploads/2018/05/word-image-3332.png 1029w, /wp-content/uploads/2018/05/word-image-3332-300x187.png 300w, /wp-content/uploads/2018/05/word-image-3332-768x478.png 768w, /wp-content/uploads/2018/05/word-image-3332-1024x637.png 1024w" sizes="(max-width: 1029px) 100vw, 1029px" /></p>
<h2>4.3、使用分类</h2>
<p>
  ①创建方法
</p>
<p><img loading="lazy" decoding="async" width="1054" height="690" src="/wp-content/uploads/2018/05/word-image-3333.png" class="wp-image-3784" srcset="/wp-content/uploads/2018/05/word-image-3333.png 1054w, /wp-content/uploads/2018/05/word-image-3333-300x196.png 300w, /wp-content/uploads/2018/05/word-image-3333-768x503.png 768w, /wp-content/uploads/2018/05/word-image-3333-1024x670.png 1024w" sizes="(max-width: 1054px) 100vw, 1054px" /></p>
<p>
  ②处理模板
</p>
<p><img loading="lazy" decoding="async" width="1025" height="656" src="/wp-content/uploads/2018/05/word-image-3334.png" class="wp-image-3785" srcset="/wp-content/uploads/2018/05/word-image-3334.png 1025w, /wp-content/uploads/2018/05/word-image-3334-300x192.png 300w, /wp-content/uploads/2018/05/word-image-3334-768x492.png 768w, /wp-content/uploads/2018/05/word-image-3334-1024x655.png 1024w" sizes="(max-width: 1025px) 100vw, 1025px" /></p>
<p>
  ③效果如下
</p>
<p><img loading="lazy" decoding="async" width="685" height="246" src="/wp-content/uploads/2018/05/word-image-3335.png" class="wp-image-3786" srcset="/wp-content/uploads/2018/05/word-image-3335.png 685w, /wp-content/uploads/2018/05/word-image-3335-300x108.png 300w" sizes="(max-width: 685px) 100vw, 685px" /></p>
<h1>5、案例-电商后台登录</h1>
<h2>5.1、分析实现过程</h2>
<ol>
<li>
  创建控制器方法显示登录界面
</li>
<li>
  需要显示出验证码
</li>
<li>
  用户提交数据、接受并且比对(1、比对验证码2、比对用户名3、比对密码)
</li>
<li>
  登录完成，保存用户的登录状态(session或者cookie)。需要跳转到后台首页
</li>
<li>
  防止直接翻墙
</li>
</ol>
<h2>5.2、显示登录到的界面</h2>
<h3>5.1.1、显示登录页</h3>
<p>
  ①创建控制器方法加载模板
</p>
<p><img loading="lazy" decoding="async" width="898" height="629" src="/wp-content/uploads/2018/05/word-image-3336.png" class="wp-image-3787" srcset="/wp-content/uploads/2018/05/word-image-3336.png 898w, /wp-content/uploads/2018/05/word-image-3336-300x210.png 300w, /wp-content/uploads/2018/05/word-image-3336-768x538.png 768w" sizes="(max-width: 898px) 100vw, 898px" /></p>
<p>
  ②拷贝登录模板
</p>
<p><img loading="lazy" decoding="async" width="1284" height="484" src="/wp-content/uploads/2018/05/word-image-3337.png" class="wp-image-3788" srcset="/wp-content/uploads/2018/05/word-image-3337.png 1284w, /wp-content/uploads/2018/05/word-image-3337-300x113.png 300w, /wp-content/uploads/2018/05/word-image-3337-768x289.png 768w, /wp-content/uploads/2018/05/word-image-3337-1024x386.png 1024w" sizes="(max-width: 1284px) 100vw, 1284px" /></p>
<p>
  ③修改登录模板的资源地址
</p>
<p><img loading="lazy" decoding="async" width="1050" height="687" src="/wp-content/uploads/2018/05/word-image-3338.png" class="wp-image-3789" srcset="/wp-content/uploads/2018/05/word-image-3338.png 1050w, /wp-content/uploads/2018/05/word-image-3338-300x196.png 300w, /wp-content/uploads/2018/05/word-image-3338-768x502.png 768w, /wp-content/uploads/2018/05/word-image-3338-1024x670.png 1024w" sizes="(max-width: 1050px) 100vw, 1050px" /></p>
<h3>5.1.2、显示验证码</h3>
<p>
  ①修改模板使用验证码
</p>
<p><img loading="lazy" decoding="async" width="1094" height="616" src="/wp-content/uploads/2018/05/word-image-3339.png" class="wp-image-3790" srcset="/wp-content/uploads/2018/05/word-image-3339.png 1094w, /wp-content/uploads/2018/05/word-image-3339-300x169.png 300w, /wp-content/uploads/2018/05/word-image-3339-768x432.png 768w, /wp-content/uploads/2018/05/word-image-3339-1024x577.png 1024w" sizes="(max-width: 1094px) 100vw, 1094px" /></p>
<p>
  ②创建方法生成验证码
</p>
<p><img loading="lazy" decoding="async" width="849" height="442" src="/wp-content/uploads/2018/05/word-image-3340.png" class="wp-image-3791" srcset="/wp-content/uploads/2018/05/word-image-3340.png 849w, /wp-content/uploads/2018/05/word-image-3340-300x156.png 300w, /wp-content/uploads/2018/05/word-image-3340-768x400.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></p>
<p>
  ③修改模板引入jQuery
</p>
<p><img loading="lazy" decoding="async" width="938" height="513" src="/wp-content/uploads/2018/05/word-image-3341.png" class="wp-image-3792" srcset="/wp-content/uploads/2018/05/word-image-3341.png 938w, /wp-content/uploads/2018/05/word-image-3341-300x164.png 300w, /wp-content/uploads/2018/05/word-image-3341-768x420.png 768w" sizes="(max-width: 938px) 100vw, 938px" /></p>
<p>
  ④对验证码绑定点击事件
</p>
<p><img loading="lazy" decoding="async" width="1071" height="573" src="/wp-content/uploads/2018/05/word-image-3342.png" class="wp-image-3793" srcset="/wp-content/uploads/2018/05/word-image-3342.png 1071w, /wp-content/uploads/2018/05/word-image-3342-300x161.png 300w, /wp-content/uploads/2018/05/word-image-3342-768x411.png 768w, /wp-content/uploads/2018/05/word-image-3342-1024x548.png 1024w" sizes="(max-width: 1071px) 100vw, 1071px" /></p>
<h2>5.3、实现登录对比</h2>
<h3>5.3.1、创建数据表</h3>
<p><img loading="lazy" decoding="async" width="638" height="275" src="/wp-content/uploads/2018/05/word-image-3343.png" class="wp-image-3794" srcset="/wp-content/uploads/2018/05/word-image-3343.png 638w, /wp-content/uploads/2018/05/word-image-3343-300x129.png 300w" sizes="(max-width: 638px) 100vw, 638px" /></p>
<h3>5.3.2、添加测试账户</h3>
<p>
  ①创建生成密码的函数
</p>
<p>
  由于增加测试用户时不能确定密码。需要用代码生成密码。由于后期会经常使用该方式进行密码校验等处理。因此封装成为函数
</p>
<p><img loading="lazy" decoding="async" width="1009" height="555" src="/wp-content/uploads/2018/05/word-image-3344.png" class="wp-image-3795" srcset="/wp-content/uploads/2018/05/word-image-3344.png 1009w, /wp-content/uploads/2018/05/word-image-3344-300x165.png 300w, /wp-content/uploads/2018/05/word-image-3344-768x422.png 768w" sizes="(max-width: 1009px) 100vw, 1009px" /></p>
<p>
  ③创建一个测试方法生成密码
</p>
<p><img loading="lazy" decoding="async" width="905" height="487" src="/wp-content/uploads/2018/05/word-image-3345.png" class="wp-image-3796" srcset="/wp-content/uploads/2018/05/word-image-3345.png 905w, /wp-content/uploads/2018/05/word-image-3345-300x161.png 300w, /wp-content/uploads/2018/05/word-image-3345-768x413.png 768w" sizes="(max-width: 905px) 100vw, 905px" /></p>
<p>
  ④访问测试方法生成密码
</p>
<p><img loading="lazy" decoding="async" width="542" height="108" src="/wp-content/uploads/2018/05/word-image-3346.png" class="wp-image-3797" srcset="/wp-content/uploads/2018/05/word-image-3346.png 542w, /wp-content/uploads/2018/05/word-image-3346-300x60.png 300w" sizes="(max-width: 542px) 100vw, 542px" /></p>
<p>
  ⑤根据生产的密码写入测试账户
</p>
<p><img loading="lazy" decoding="async" width="1116" height="394" src="/wp-content/uploads/2018/05/word-image-3347.png" class="wp-image-3798" srcset="/wp-content/uploads/2018/05/word-image-3347.png 1116w, /wp-content/uploads/2018/05/word-image-3347-300x106.png 300w, /wp-content/uploads/2018/05/word-image-3347-768x271.png 768w, /wp-content/uploads/2018/05/word-image-3347-1024x362.png 1024w" sizes="(max-width: 1116px) 100vw, 1116px" /></p>
<h3>5.3.3、创建模型</h3>
<p>
  ①创建自定义的模型
</p>
<p><img loading="lazy" decoding="async" width="803" height="548" src="/wp-content/uploads/2018/05/word-image-3348.png" class="wp-image-3799" srcset="/wp-content/uploads/2018/05/word-image-3348.png 803w, /wp-content/uploads/2018/05/word-image-3348-300x205.png 300w, /wp-content/uploads/2018/05/word-image-3348-768x524.png 768w, /wp-content/uploads/2018/05/word-image-3348-220x150.png 220w" sizes="(max-width: 803px) 100vw, 803px" /></p>
<p>
  ②定义字段信息
</p>
<p><img loading="lazy" decoding="async" width="1046" height="585" src="/wp-content/uploads/2018/05/word-image-3349.png" class="wp-image-3800" srcset="/wp-content/uploads/2018/05/word-image-3349.png 1046w, /wp-content/uploads/2018/05/word-image-3349-300x168.png 300w, /wp-content/uploads/2018/05/word-image-3349-768x430.png 768w, /wp-content/uploads/2018/05/word-image-3349-1024x573.png 1024w" sizes="(max-width: 1046px) 100vw, 1046px" /></p>
<p>
  ③定义字段映射
</p>
<p><img loading="lazy" decoding="async" width="1028" height="665" src="/wp-content/uploads/2018/05/word-image-3350.png" class="wp-image-3801" srcset="/wp-content/uploads/2018/05/word-image-3350.png 1028w, /wp-content/uploads/2018/05/word-image-3350-300x194.png 300w, /wp-content/uploads/2018/05/word-image-3350-768x497.png 768w, /wp-content/uploads/2018/05/word-image-3350-1024x662.png 1024w" sizes="(max-width: 1028px) 100vw, 1028px" /></p>
<p>
  ④修改模板使用假名
</p>
<p><img loading="lazy" decoding="async" width="1060" height="595" src="/wp-content/uploads/2018/05/word-image-3351.png" class="wp-image-3802" srcset="/wp-content/uploads/2018/05/word-image-3351.png 1060w, /wp-content/uploads/2018/05/word-image-3351-300x168.png 300w, /wp-content/uploads/2018/05/word-image-3351-768x431.png 768w, /wp-content/uploads/2018/05/word-image-3351-1024x575.png 1024w" sizes="(max-width: 1060px) 100vw, 1060px" /></p>
<p>
  ⑤编写自动验证规则
</p>
<p><img loading="lazy" decoding="async" width="1007" height="645" src="/wp-content/uploads/2018/05/word-image-3352.png" class="wp-image-3803" srcset="/wp-content/uploads/2018/05/word-image-3352.png 1007w, /wp-content/uploads/2018/05/word-image-3352-300x192.png 300w, /wp-content/uploads/2018/05/word-image-3352-768x492.png 768w" sizes="(max-width: 1007px) 100vw, 1007px" /></p>
<h3>5.3.4、控制器调用方法进行对比</h3>
<p>
  ①修改控制器login方法
</p>
<p><img loading="lazy" decoding="async" width="1070" height="699" src="/wp-content/uploads/2018/05/word-image-3353.png" class="wp-image-3804" srcset="/wp-content/uploads/2018/05/word-image-3353.png 1070w, /wp-content/uploads/2018/05/word-image-3353-300x196.png 300w, /wp-content/uploads/2018/05/word-image-3353-768x502.png 768w, /wp-content/uploads/2018/05/word-image-3353-1024x669.png 1024w" sizes="(max-width: 1070px) 100vw, 1070px" /></p>
<p>
  ②创建模型方法实现登录
</p>
<p><img loading="lazy" decoding="async" width="1087" height="701" src="/wp-content/uploads/2018/05/word-image-3354.png" class="wp-image-3805" srcset="/wp-content/uploads/2018/05/word-image-3354.png 1087w, /wp-content/uploads/2018/05/word-image-3354-300x193.png 300w, /wp-content/uploads/2018/05/word-image-3354-768x495.png 768w, /wp-content/uploads/2018/05/word-image-3354-1024x660.png 1024w" sizes="(max-width: 1087px) 100vw, 1087px" /><br />
<img loading="lazy" decoding="async" width="1076" height="589" src="/wp-content/uploads/2018/05/word-image-3355.png" class="wp-image-3806" srcset="/wp-content/uploads/2018/05/word-image-3355.png 1076w, /wp-content/uploads/2018/05/word-image-3355-300x164.png 300w, /wp-content/uploads/2018/05/word-image-3355-768x420.png 768w, /wp-content/uploads/2018/05/word-image-3355-1024x561.png 1024w" sizes="(max-width: 1076px) 100vw, 1076px" /></p>
<h3>5.3.5、控制翻墙</h3>
<p>
  ①在后台首页中的index方法进行判断
</p>
<p><img loading="lazy" decoding="async" width="975" height="574" src="/wp-content/uploads/2018/05/word-image-3356.png" class="wp-image-3807" srcset="/wp-content/uploads/2018/05/word-image-3356.png 975w, /wp-content/uploads/2018/05/word-image-3356-300x177.png 300w, /wp-content/uploads/2018/05/word-image-3356-768x452.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></p>
<p>
  对于此方式，由于后台中除了登录之外。其他的都需要进行是否登录判断。此方式不合理。可以在创建一个公共控制器在构造方法中进行验证。对于除了登录控制器之外其他的控制器都继承公共控制器
</p>
<p>
  ②创建公共控制器
</p>
<p><img loading="lazy" decoding="async" width="1043" height="703" src="/wp-content/uploads/2018/05/word-image-3357.png" class="wp-image-3808" srcset="/wp-content/uploads/2018/05/word-image-3357.png 1043w, /wp-content/uploads/2018/05/word-image-3357-300x202.png 300w, /wp-content/uploads/2018/05/word-image-3357-768x518.png 768w, /wp-content/uploads/2018/05/word-image-3357-1024x690.png 1024w" sizes="(max-width: 1043px) 100vw, 1043px" /></p>
<p>
  ③修改Index控制器的继承关系
</p>
<p><img loading="lazy" decoding="async" width="898" height="474" src="/wp-content/uploads/2018/05/word-image-3358.png" class="wp-image-3809" srcset="/wp-content/uploads/2018/05/word-image-3358.png 898w, /wp-content/uploads/2018/05/word-image-3358-300x158.png 300w, /wp-content/uploads/2018/05/word-image-3358-768x405.png 768w" sizes="(max-width: 898px) 100vw, 898px" /></p>
<p>
  可能common控制器中有很多公共方法，对于登录有可能会使用到。需要修改login继承common控制器。但是直接继承会出现故障
</p>
<p>
  ④修改Login控制器的继承关系
</p>
<p><img loading="lazy" decoding="async" width="896" height="497" src="/wp-content/uploads/2018/05/word-image-3359.png" class="wp-image-3810" srcset="/wp-content/uploads/2018/05/word-image-3359.png 896w, /wp-content/uploads/2018/05/word-image-3359-300x166.png 300w, /wp-content/uploads/2018/05/word-image-3359-768x426.png 768w" sizes="(max-width: 896px) 100vw, 896px" /></p>
<p>
  ⑤修改公共\\
</p>
<p><img loading="lazy" decoding="async" width="981" height="695" src="/wp-content/uploads/2018/05/word-image-3360.png" class="wp-image-3811" srcset="/wp-content/uploads/2018/05/word-image-3360.png 981w, /wp-content/uploads/2018/05/word-image-3360-300x213.png 300w, /wp-content/uploads/2018/05/word-image-3360-768x544.png 768w" sizes="(max-width: 981px) 100vw, 981px" /></p>
<h2>5.4、实现退出登录</h2>
<p>
  ①修改模板连接地址
</p>
<p><img loading="lazy" decoding="async" width="1064" height="400" src="/wp-content/uploads/2018/05/word-image-3361.png" class="wp-image-3812" srcset="/wp-content/uploads/2018/05/word-image-3361.png 1064w, /wp-content/uploads/2018/05/word-image-3361-300x113.png 300w, /wp-content/uploads/2018/05/word-image-3361-768x289.png 768w, /wp-content/uploads/2018/05/word-image-3361-1024x385.png 1024w" sizes="(max-width: 1064px) 100vw, 1064px" /></p>
<p>
  ②创建退出的方法
</p>
<p><img loading="lazy" decoding="async" width="970" height="424" src="/wp-content/uploads/2018/05/word-image-3362.png" class="wp-image-3813" srcset="/wp-content/uploads/2018/05/word-image-3362.png 970w, /wp-content/uploads/2018/05/word-image-3362-300x131.png 300w, /wp-content/uploads/2018/05/word-image-3362-768x336.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/3732.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
