<?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/%E5%AE%89%E8%A3%85/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description></description>
	<lastBuildDate>Sat, 10 Feb 2024 04:34:14 +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>Swoole 安装、扩展源码、线程、进程、执行过程、常用事件、Http 服务器、WebSocket 服务器、Mysql 连接池、毫秒定时器、异步文件读取</title>
		<link>/php/6504.html</link>
					<comments>/php/6504.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 17:29:53 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Swoole]]></category>
		<category><![CDATA[Http 服务器]]></category>
		<category><![CDATA[Mysql 连接池]]></category>
		<category><![CDATA[WebSocket 服务器]]></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=6504</guid>

					<description><![CDATA[Swoole Swoole 1 1. 概念介绍 2 2. 编译安装Swoole扩展 2 2.1. 下载Swoo [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a id="post-6504-_Swoole"></a><a id="post-6504-_Toc256000000"></a> Swoole</p>
<p><a href="#post-6504-_Toc256000000">Swoole 1</a></p>
<p><a href="#post-6504-_Toc256000002">1. 概念介绍 2</a></p>
<p><a href="#post-6504-_Toc256000003">2. 编译安装Swoole扩展 2</a></p>
<p><a href="#post-6504-_Toc256000004">2.1. 下载Swoole扩展源码 3</a></p>
<p><a href="#post-6504-_Toc256000005">2.2. 解压源码压缩包 3</a></p>
<p><a href="#post-6504-_Toc256000006">2.3. 编译Swoole 3</a></p>
<p><a href="#post-6504-_Toc256000007">2.4. 在php.ini开启swoole扩展 3</a></p>
<p><a href="#post-6504-_Toc256000008">2.5. Swoole的线程和进程的模型 4</a></p>
<p><a href="#post-6504-_Toc256000009">2.6. Swoole的执行过程 5</a></p>
<p><a href="#post-6504-_Toc256000010">2.7. Swoole支持的常用事件列表 5</a></p>
<p><a href="#post-6504-_Toc256000011">2.8. swoole执行流程中几个需要注意的点 6</a></p>
<p><a href="#post-6504-_Toc256000012">3. Swoole的HTTP服务器 6</a></p>
<p><a href="#post-6504-_Toc256000013">4. Swoole的WebSocket服务器 7</a></p>
<p><a href="#post-6504-_Toc256000014">5. MySQL连接池 7</a></p>
<p><a href="#post-6504-_Toc256000015">6. 使用Swoole管理进程 8</a></p>
<p><a href="#post-6504-_Toc256000016">6.1. 创建一个子进程并设置进程名称为worker-process 9</a></p>
<p><a href="#post-6504-_Toc256000017">7. Swoole常用配置选项 9</a></p>
<p><a href="#post-6504-_Toc256000018">7.1. 调整worker进程数量 9</a></p>
<p><a href="#post-6504-_Toc256000019">8. Swoole毫秒级定时器 10</a></p>
<p><a href="#post-6504-_Toc256000020">9. 异步文件读取 10</a></p>
<p><img fetchpriority="high" decoding="async" width="1000" height="430" class="wp-image-6801" src="/wp-content/uploads/2018/05/word-image-6201.png" srcset="/wp-content/uploads/2018/05/word-image-6201.png 1000w, /wp-content/uploads/2018/05/word-image-6201-300x129.png 300w, /wp-content/uploads/2018/05/word-image-6201-768x330.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<h1><a id="post-6504-_____"></a><a id="post-6504-_Toc256000002"></a>概念介绍</h1>
<p>参考网址：<a href="/goto/yepj" rel="nofollow">http://www.swoole.com/</a></p>
<p>Swoole设计的目的就是为了使PHP得到更好的性能，同时也拓展了PHP的应用场景如：</p>
<p>互联网、移动通信、企业软件、云计算、网络游戏、物联网（IOT）、车联网、智能家居等领域</p>
<p>Swoole在PHP里的角色：就是PHP的一个扩展，类似mbstring扩展一样，使用之前需要先开启这个扩展</p>
<p>注意：swoole暂时还不支持Windows系统</p>
<h1><a id="post-6504-_____Swoole__"></a><a id="post-6504-_Toc256000003"></a>编译安装Swoole扩展</h1>
<p><img decoding="async" width="1302" height="344" class="wp-image-6805" src="/wp-content/uploads/2018/05/word-image-6205.png" srcset="/wp-content/uploads/2018/05/word-image-6205.png 1302w, /wp-content/uploads/2018/05/word-image-6205-300x79.png 300w, /wp-content/uploads/2018/05/word-image-6205-768x203.png 768w, /wp-content/uploads/2018/05/word-image-6205-1024x271.png 1024w" sizes="(max-width: 1302px) 100vw, 1302px" /></p>
<p>在Linux系统上安装使用源码进行编译安装</p>
<p>环境准备：</p>
<p>1、 安装PHP</p>
<p>2、 安装编译swoole源代码的软件：autoconf（生成配置文件）、gcc（将C语言编译成可执行文件）、make（编译器）</p>
<p>安装autoconf、gcc、make等软件方式：</p>
<p>yum: yum install -y autoconf gcc make</p>
<p>apt-get: apt-get install autoconf gcc make</p>
<h2><a id="post-6504-___Swoole____"></a><a id="post-6504-_Toc256000004"></a>下载Swoole扩展源码</h2>
<p>Github：<a href="/goto/9x5j" rel="nofollow">https://github.com/swoole/swoole-src/releases</a></p>
<p>（比较新，可能有些版本不稳定）</p>
<p>pecl.php.net：<a href="/goto/fy8k" rel="nofollow">http://pecl.php.net/package/swoole</a></p>
<p>使用swoole 1.9.6版本：<a href="/goto/9gr1" rel="nofollow">http://pecl.php.net/get/swoole-1.9.6.tgz</a></p>
<p>&nbsp;</p>
<p>-&gt;wget <a href="/goto/9gr1" rel="nofollow">http://pecl.php.net/get/swoole-1.9.6.tgz</a></p>
<p><img decoding="async" width="1636" height="383" class="wp-image-6809" src="/wp-content/uploads/2018/05/word-image-6209.png" srcset="/wp-content/uploads/2018/05/word-image-6209.png 1636w, /wp-content/uploads/2018/05/word-image-6209-300x70.png 300w, /wp-content/uploads/2018/05/word-image-6209-768x180.png 768w, /wp-content/uploads/2018/05/word-image-6209-1024x240.png 1024w" sizes="(max-width: 1636px) 100vw, 1636px" /></p>
<h2><a id="post-6504-________"></a><a id="post-6504-_Toc256000005"></a>解压源码压缩包</h2>
<p>-&gt;tar xf swoole-1.9.6.tgz</p>
<p><img loading="lazy" decoding="async" width="1476" height="556" class="wp-image-6813" src="/wp-content/uploads/2018/05/word-image-6213.png" srcset="/wp-content/uploads/2018/05/word-image-6213.png 1476w, /wp-content/uploads/2018/05/word-image-6213-300x113.png 300w, /wp-content/uploads/2018/05/word-image-6213-768x289.png 768w, /wp-content/uploads/2018/05/word-image-6213-1024x386.png 1024w" sizes="(max-width: 1476px) 100vw, 1476px" /></p>
<h2><a id="post-6504-___Swoole"></a><a id="post-6504-_Toc256000006"></a>编译Swoole</h2>
<p>-&gt;phpize</p>
<p><img loading="lazy" decoding="async" width="1247" height="217" class="wp-image-6817" src="/wp-content/uploads/2018/05/word-image-6217.png" srcset="/wp-content/uploads/2018/05/word-image-6217.png 1247w, /wp-content/uploads/2018/05/word-image-6217-300x52.png 300w, /wp-content/uploads/2018/05/word-image-6217-768x134.png 768w, /wp-content/uploads/2018/05/word-image-6217-1024x178.png 1024w" sizes="(max-width: 1247px) 100vw, 1247px" /></p>
<p>-&gt;./configure</p>
<p><img loading="lazy" decoding="async" width="1131" height="269" class="wp-image-6821" src="/wp-content/uploads/2018/05/word-image-6221.png" srcset="/wp-content/uploads/2018/05/word-image-6221.png 1131w, /wp-content/uploads/2018/05/word-image-6221-300x71.png 300w, /wp-content/uploads/2018/05/word-image-6221-768x183.png 768w, /wp-content/uploads/2018/05/word-image-6221-1024x244.png 1024w" sizes="(max-width: 1131px) 100vw, 1131px" /></p>
<p>如果提示没有php-config文件那么使用如下办法解决</p>
<p><img loading="lazy" decoding="async" width="1672" height="82" class="wp-image-6825" src="/wp-content/uploads/2018/05/word-image-6225.png" srcset="/wp-content/uploads/2018/05/word-image-6225.png 1672w, /wp-content/uploads/2018/05/word-image-6225-300x15.png 300w, /wp-content/uploads/2018/05/word-image-6225-768x38.png 768w, /wp-content/uploads/2018/05/word-image-6225-1024x50.png 1024w" sizes="(max-width: 1672px) 100vw, 1672px" /></p>
<p>后面的安装路径是自己的PHP安装路径</p>
<p>-&gt;make</p>
<p>注意：如果想加快make 编译速度，那么可以使用 -jCPU核心数</p>
<p>例如make -j2 后面的2指的就是使用两个CPU核心同时运算。</p>
<p><img loading="lazy" decoding="async" width="1105" height="164" class="wp-image-6829" src="/wp-content/uploads/2018/05/word-image-6229.png" srcset="/wp-content/uploads/2018/05/word-image-6229.png 1105w, /wp-content/uploads/2018/05/word-image-6229-300x45.png 300w, /wp-content/uploads/2018/05/word-image-6229-768x114.png 768w, /wp-content/uploads/2018/05/word-image-6229-1024x152.png 1024w" sizes="(max-width: 1105px) 100vw, 1105px" /></p>
<p>-&gt;make install</p>
<p><img loading="lazy" decoding="async" width="1669" height="118" class="wp-image-6833" src="/wp-content/uploads/2018/05/word-image-6233.png" srcset="/wp-content/uploads/2018/05/word-image-6233.png 1669w, /wp-content/uploads/2018/05/word-image-6233-300x21.png 300w, /wp-content/uploads/2018/05/word-image-6233-768x54.png 768w, /wp-content/uploads/2018/05/word-image-6233-1024x72.png 1024w" sizes="(max-width: 1669px) 100vw, 1669px" /></p>
<h2><a id="post-6504-__php_ini__swoole__"></a><a id="post-6504-_Toc256000007"></a>在php.ini开启swoole扩展</h2>
<p><img loading="lazy" decoding="async" width="1683" height="148" class="wp-image-6836" src="/wp-content/uploads/2018/05/word-image-6236.png" srcset="/wp-content/uploads/2018/05/word-image-6236.png 1683w, /wp-content/uploads/2018/05/word-image-6236-300x26.png 300w, /wp-content/uploads/2018/05/word-image-6236-768x68.png 768w, /wp-content/uploads/2018/05/word-image-6236-1024x90.png 1024w" sizes="(max-width: 1683px) 100vw, 1683px" /></p>
<p>编译好的swoole.so文件</p>
<p>/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/ 一般是默认位置</p>
<p><img loading="lazy" decoding="async" width="1542" height="96" class="wp-image-6840" src="/wp-content/uploads/2018/05/word-image-6240.png" srcset="/wp-content/uploads/2018/05/word-image-6240.png 1542w, /wp-content/uploads/2018/05/word-image-6240-300x19.png 300w, /wp-content/uploads/2018/05/word-image-6240-768x48.png 768w, /wp-content/uploads/2018/05/word-image-6240-1024x64.png 1024w" sizes="(max-width: 1542px) 100vw, 1542px" /></p>
<p>查看扩展是否开启成功</p>
<p>-&gt;php -m|grep swoole</p>
<p><img loading="lazy" decoding="async" width="1098" height="118" class="wp-image-6844" src="/wp-content/uploads/2018/05/word-image-6244.png" srcset="/wp-content/uploads/2018/05/word-image-6244.png 1098w, /wp-content/uploads/2018/05/word-image-6244-300x32.png 300w, /wp-content/uploads/2018/05/word-image-6244-768x83.png 768w, /wp-content/uploads/2018/05/word-image-6244-1024x110.png 1024w" sizes="(max-width: 1098px) 100vw, 1098px" /></p>
<p>到此swoole扩展编译安装完成。</p>
<h2><a id="post-6504-_Swoole_________"></a><a id="post-6504-_Toc256000008"></a>Swoole的线程和进程的模型</h2>
<p>参考网址：<a href="/goto/82ey" rel="nofollow">http://rango.swoole.com/</a> 开发者博客</p>
<p><img loading="lazy" decoding="async" width="756" height="752" class="wp-image-6847" src="/wp-content/uploads/2018/05/word-image-6247.png" srcset="/wp-content/uploads/2018/05/word-image-6247.png 756w, /wp-content/uploads/2018/05/word-image-6247-150x150.png 150w, /wp-content/uploads/2018/05/word-image-6247-300x298.png 300w" sizes="(max-width: 756px) 100vw, 756px" /></p>
<p>Swoole会开启<strong> “多个”</strong>进程</p>
<p>Worker进程：代码业务逻辑通常是在Worker进程中处理的</p>
<p>Worker进程被Manager进程所管理</p>
<p>Master进程负责管理一系列的线程这些线程比较偏底层</p>
<h2><a id="post-6504-_Swoole_____"></a><a id="post-6504-_Toc256000009"></a>Swoole的执行过程</h2>
<p><img loading="lazy" decoding="async" width="673" height="551" class="wp-image-6850" src="/wp-content/uploads/2018/05/word-image-6250.png" srcset="/wp-content/uploads/2018/05/word-image-6250.png 673w, /wp-content/uploads/2018/05/word-image-6250-300x246.png 300w" sizes="(max-width: 673px) 100vw, 673px" /></p>
<h2><a id="post-6504-_Swoole__________2"></a><a id="post-6504-_Toc256000010"></a>Swoole支持的常用事件列表</h2>
<p><img loading="lazy" decoding="async" width="1009" height="464" class="wp-image-6853" src="/wp-content/uploads/2018/05/word-image-6253.png" srcset="/wp-content/uploads/2018/05/word-image-6253.png 1009w, /wp-content/uploads/2018/05/word-image-6253-300x138.png 300w, /wp-content/uploads/2018/05/word-image-6253-768x353.png 768w" sizes="(max-width: 1009px) 100vw, 1009px" /></p>
<h2><a id="post-6504-_swoole_____________"></a><a id="post-6504-_Toc256000011"></a>swoole执行流程中几个需要注意的点</h2>
<p>1. 在swoole服务器启动后，会创建三个进程</p>
<p>* Manager</p>
<p>* Worker</p>
<p>* Task</p>
<p>这个<strong>Manager进程是Worker进程的守护进程</strong>，在这个Worker进程意外结束后，这个Manager进程会重新启动Workder进程，Manager进程只有一个，而这个Worker可以有多个。</p>
<p>Worker进程通过给这个Task进程发送任务，可以把一些<strong>计算量大</strong>的任务转移到Task进程，这样我们的Worker进程就可以高速处理客户端的请求，提高并发量。</p>
<h1><a id="post-6504-_Swoole_HTTP___"></a><a id="post-6504-_Toc256000012"></a>Swoole的HTTP服务器</h1>
<p>swoole的http请求对象是：swoole_http_request这个类的对象</p>
<p>swoole的http响应对象是：swoole_http_response这个类的对象</p>
<p><img loading="lazy" decoding="async" width="865" height="332" class="wp-image-6857" src="/wp-content/uploads/2018/05/word-image-6257.png" srcset="/wp-content/uploads/2018/05/word-image-6257.png 865w, /wp-content/uploads/2018/05/word-image-6257-300x115.png 300w, /wp-content/uploads/2018/05/word-image-6257-768x295.png 768w" sizes="(max-width: 865px) 100vw, 865px" /></p>
<p>效果：</p>
<p><img loading="lazy" decoding="async" width="513" height="296" class="wp-image-6858" src="/wp-content/uploads/2018/05/word-image-6258.png" srcset="/wp-content/uploads/2018/05/word-image-6258.png 513w, /wp-content/uploads/2018/05/word-image-6258-300x173.png 300w" sizes="(max-width: 513px) 100vw, 513px" /></p>
<p>swoole程序编写的流程</p>
<p>1. 创建swoole服务器对象</p>
<p>2. 为这个对象设置回调函数</p>
<p>3. 处理业务逻辑</p>
<p>4．启动swoole服务器</p>
<h1><a id="post-6504-_Swoole_WebSocket___"></a><a id="post-6504-_Toc256000013"></a>Swoole的WebSocket服务器</h1>
<p><strong>websocket服务器的事件</strong></p>
<p><img loading="lazy" decoding="async" width="966" height="337" class="wp-image-6860" src="/wp-content/uploads/2018/05/word-image-6260.png" srcset="/wp-content/uploads/2018/05/word-image-6260.png 966w, /wp-content/uploads/2018/05/word-image-6260-300x105.png 300w, /wp-content/uploads/2018/05/word-image-6260-768x268.png 768w" sizes="(max-width: 966px) 100vw, 966px" /></p>
<p>通过调用这个类swoole_websocket_server的push可以给websocket客户端发送消息</p>
<p>通过调用这个类swoole_websocket_frame的data属性可以得到websocket客户端发送给websocket服务器的消息</p>
<p><img loading="lazy" decoding="async" width="1327" height="375" class="wp-image-6862" src="/wp-content/uploads/2018/05/word-image-6262.png" srcset="/wp-content/uploads/2018/05/word-image-6262.png 1327w, /wp-content/uploads/2018/05/word-image-6262-300x85.png 300w, /wp-content/uploads/2018/05/word-image-6262-768x217.png 768w, /wp-content/uploads/2018/05/word-image-6262-1024x289.png 1024w" sizes="(max-width: 1327px) 100vw, 1327px" /></p>
<p>效果：</p>
<p><img loading="lazy" decoding="async" width="1187" height="619" class="wp-image-6864" src="/wp-content/uploads/2018/05/word-image-6264.png" srcset="/wp-content/uploads/2018/05/word-image-6264.png 1187w, /wp-content/uploads/2018/05/word-image-6264-300x156.png 300w, /wp-content/uploads/2018/05/word-image-6264-768x400.png 768w, /wp-content/uploads/2018/05/word-image-6264-1024x534.png 1024w" sizes="(max-width: 1187px) 100vw, 1187px" /></p>
<p>处理计算器的业务逻辑：</p>
<p>#创建一个websocket服务器</p>
<p>$serv=new swoole_websocket_server(&#8220;0.0.0.0&#8221;,8000);</p>
<p>$serv-&gt;on(&#8220;message&#8221;,function(swoole_websocket_server <strong>$server</strong>, $frame){</p>
<p>// var_dump($server,$frame);</p>
<p>#获取客户端发送的数据信息</p>
<p>$data=json_decode($frame-&gt;data,true);</p>
<p>// var_dump($data);</p>
<p>switch ($data[&#8216;operator&#8217;]){</p>
<p>case &#8220;+&#8221;:</p>
<p>$resust=$data[&#8216;firstNumber&#8217;]+$data[&#8216;secondNumber&#8217;];</p>
<p>break;</p>
<p>case &#8220;-&#8220;:</p>
<p>$resust=$data[&#8216;firstNumber&#8217;]-$data[&#8216;secondNumber&#8217;];</p>
<p>break;</p>
<p>case &#8220;*&#8221;:</p>
<p>$resust=$data[&#8216;firstNumber&#8217;]*$data[&#8216;secondNumber&#8217;];</p>
<p>break;</p>
<p>case &#8220;/&#8221;:</p>
<p>$resust=$data[&#8216;firstNumber&#8217;]/$data[&#8216;secondNumber&#8217;];</p>
<p>break;</p>
<p>}</p>
<p>//从服务器端将运算的结果推送给浏览器客户端。</p>
<p>$server-&gt;push(<strong>$frame-&gt;fd</strong>,$resust);//$frame-&gt;fd就是客户端的唯一标识</p>
<p>});</p>
<p>#启动websocket_server服务器</p>
<p>$serv-&gt;start();</p>
<p>最终效果：</p>
<p><img loading="lazy" decoding="async" width="1242" height="689" class="wp-image-6866" src="/wp-content/uploads/2018/05/word-image-6266.png" srcset="/wp-content/uploads/2018/05/word-image-6266.png 1242w, /wp-content/uploads/2018/05/word-image-6266-300x166.png 300w, /wp-content/uploads/2018/05/word-image-6266-768x426.png 768w, /wp-content/uploads/2018/05/word-image-6266-1024x568.png 1024w" sizes="(max-width: 1242px) 100vw, 1242px" /></p>
<h1><a id="post-6504-_MySQL___"></a><a id="post-6504-_Toc256000014"></a>MySQL连接池</h1>
<p>场景：<strong>每秒同时</strong>有1000个并发，但是这个mysql同时只能处理400个连接，<strong>mysql会宕机</strong>。</p>
<p>解决方案：连接池：连接池建立了200个和mysql的连接，这1000个并发就有顺序的共享这连接池中的200个连接。</p>
<p>连接池能够带来额外的性能提升，因为mysql建立连接的过程消耗较大，使用连接池<strong>只需连接一次mysql</strong>。</p>
<p>连接池</p>
<p>1. <strong>“永不断开”</strong>，要求我们的程序是一个<strong>常驻内存的程序</strong></p>
<p>首先swoole满足上面的要求那么就用swoole编写mysql的连接池。</p>
<p>分析思路：</p>
<p>1、 使用<strong>单例模式固定连接池</strong></p>
<p>2、 确定连接池的<strong>连接数</strong>（总数），以及<strong>可用的连接数 </strong></p>
<p>3、 使<strong>用数组保存连接池中的连接对象</strong></p>
<p>4、 在<strong>构造函数</strong>中，根据<strong>连接数</strong>，<strong>逐个</strong>产生连接对象（MySQL资源连接），并存入数组中</p>
<p>5、 封装一个查询的方法：</p>
<p>1) 首先要判断的是连接数是否已经分配完毕，如果分配完毕，抛出异常</p>
<p>2) 每次查询之前从连接池（数组）中<strong>取出</strong>一个连接，对应的可用连接数要进行<strong>减1</strong>操作</p>
<p>3) 查询完成之后，将之前取出的连接<strong>放入</strong>连接池（数组中），对应的可用连接数要进行<strong>加1</strong>操作</p>
<p>6、 创建一个http服务器</p>
<p>7、 在request事件内部进行数据查询操作</p>
<p>#编写一个类实现连接池的效果。</p>
<p>class MysqlConnectionsPool{</p>
<p>private static $instance;//该属性用来保存单例对象</p>
<p>private $connections=[];//用来存放生成的mysql连接（池子）</p>
<p>private <strong>$conncetionNumber=20</strong>;//批量生成20个mysql连接。</p>
<p>private $enableNumber=20;//可用连接数</p>
<p>//编写一个单例</p>
<p>public static function getInstance(){</p>
<p>//判断当前静态属性self::instance是否为空</p>
<p>if(is_null(self::$instance)){</p>
<p>//这里如果为空，那么就需要进行实例化</p>
<p>self::$instance=new self();</p>
<p>}</p>
<p>return self::$instance;</p>
<p>}</p>
<p>private function __clone(){}</p>
<p>private function __construct()</p>
<p>{</p>
<p>//在该构造方法中实现连接池中连接的批量生成。</p>
<p>for($i=0;$i&lt;$this-&gt;conncetionNumber;$i++){</p>
<p>//每循环一次生成一个mysql连接</p>
<p>//使用pdo连实现</p>
<p>$dsn=&#8221;mysql:host=127.0.0.1;dbname=swoole&#8221;;</p>
<p>//生成mysql连接并存入数组中</p>
<p>$this-&gt;connections[]=new PDO($dsn,&#8221;swoole&#8221;,&#8221;123456&#8243;);</p>
<p>}</p>
<p>var_dump($this-&gt;connections);</p>
<p>}</p>
<p>//封装一个查询方法，实现从连接池中取出连接查询数据，查询结束之后要将连接还回连接池</p>
<p>public function query($sql){</p>
<p>if($this-&gt;enableNumber==0){</p>
<p>//如果可用连接数为0，那么就说明连接池中的连接被分配完毕</p>
<p>//那么抛出一个异常</p>
<p>throw new Exception(&#8220;MySql连接池中的连接已经分配完毕&#8221;);</p>
<p>}</p>
<p>#执行到这里则说明连接池中还有连接可用</p>
<p>//那么就从连接池中取出一个连接用来查询数据。</p>
<p>$pdo=array_pop($this-&gt;connections);</p>
<p>//可用连接数要对应减一</p>
<p>$this-&gt;enableNumber&#8211;;</p>
<p>//使用取出的连接进行数据查询</p>
<p>$rows=$pdo-&gt;query($sql)-&gt;fetchAll(PDO::FETCH_ASSOC);</p>
<p>#把使用后的mysql连接放入连接池中</p>
<p><strong>array_push($this-&gt;connections,$pdo);</strong></p>
<p>#更改可用连接数</p>
<p><strong> $this-&gt;enableNumber++;</strong></p>
<p>//返回查询到的数据信息</p>
<p>return $rows;</p>
<p>}</p>
<p>}</p>
<p>MysqlConnectionsPool::getInstance();</p>
<p>#创建一个swoole的http服务器</p>
<p>$serv=new swoole_http_server(&#8220;0.0.0.0&#8221;,8000);</p>
<p>#绑定事件，目标：当浏览器连接http 服务器时，给浏览器发送一条消息</p>
<p>$serv-&gt;on(&#8220;request&#8221;,function($request,$response){</p>
<p>// var_dump($request,$response);</p>
<p>$stop=false;</p>
<p>while(!$stop){//初始状态下是一个死循环</p>
<p>try{</p>
<p>$sql=&#8221;select * from student&#8221;;</p>
<p>//调用query方法实现查询效果。</p>
<p>$rows=MysqlConnectionsPool::getInstance()-&gt;query($sql);</p>
<p>var_dump($rows);</p>
<p>$stop=true;//查询完成之后修改死循环的状态</p>
<p>}catch(Exception $e){</p>
<p>//如果捕捉到异常，那么就说明连接池中的可用连接已经分配完毕,那么暂停0.1秒再去连接池中取连接</p>
<p><strong>usleep(100000);//暂停0.1秒</strong></p>
<p>}</p>
<p>}</p>
<p>$response-&gt;end(&#8220;hello swoole&#8221;);</p>
<p>});</p>
<p>#启动swoole_http_server服务器</p>
<p>$serv-&gt;start();</p>
<p>最终效果：</p>
<p><img loading="lazy" decoding="async" width="1003" height="540" class="wp-image-6868" src="/wp-content/uploads/2018/05/word-image-6268.png" srcset="/wp-content/uploads/2018/05/word-image-6268.png 1003w, /wp-content/uploads/2018/05/word-image-6268-300x162.png 300w, /wp-content/uploads/2018/05/word-image-6268-768x413.png 768w" sizes="(max-width: 1003px) 100vw, 1003px" /></p>
<p>在mysql中查看当前有多少个连接</p>
<p>-&gt;show processlist</p>
<p><img loading="lazy" decoding="async" width="1516" height="476" class="wp-image-6870" src="/wp-content/uploads/2018/05/word-image-6270.png" srcset="/wp-content/uploads/2018/05/word-image-6270.png 1516w, /wp-content/uploads/2018/05/word-image-6270-300x94.png 300w, /wp-content/uploads/2018/05/word-image-6270-768x241.png 768w, /wp-content/uploads/2018/05/word-image-6270-1024x322.png 1024w" sizes="(max-width: 1516px) 100vw, 1516px" /></p>
<h1><a id="post-6504-___Swoole_____2"></a><a id="post-6504-_Toc256000015"></a>使用Swoole管理进程</h1>
<p><img loading="lazy" decoding="async" width="1049" height="192" class="wp-image-6872" src="/wp-content/uploads/2018/05/word-image-6272.png" srcset="/wp-content/uploads/2018/05/word-image-6272.png 1049w, /wp-content/uploads/2018/05/word-image-6272-300x55.png 300w, /wp-content/uploads/2018/05/word-image-6272-768x141.png 768w, /wp-content/uploads/2018/05/word-image-6272-1024x187.png 1024w" sizes="(max-width: 1049px) 100vw, 1049px" /></p>
<p>PHP有一个pcntl的扩展用来管理进程，但是这个扩展比较底层，不好用。</p>
<p>多进程一般用来解决大计算量的问题。</p>
<p>场景：修改当前进程的名字</p>
<p>常规情况下，一个文件在执行，那么必然会有一个对应的进程</p>
<p><img loading="lazy" decoding="async" width="659" height="142" class="wp-image-6874" src="/wp-content/uploads/2018/05/word-image-6274.png" srcset="/wp-content/uploads/2018/05/word-image-6274.png 659w, /wp-content/uploads/2018/05/word-image-6274-300x65.png 300w" sizes="(max-width: 659px) 100vw, 659px" /> <img loading="lazy" decoding="async" width="1580" height="47" class="wp-image-6876" src="/wp-content/uploads/2018/05/word-image-6276.png" srcset="/wp-content/uploads/2018/05/word-image-6276.png 1580w, /wp-content/uploads/2018/05/word-image-6276-300x9.png 300w, /wp-content/uploads/2018/05/word-image-6276-768x23.png 768w, /wp-content/uploads/2018/05/word-image-6276-1024x30.png 1024w" sizes="(max-width: 1580px) 100vw, 1580px" /></p>
<p>解决办法：使用swoole_set_process_name函数修改进程名称</p>
<p><img loading="lazy" decoding="async" width="823" height="275" class="wp-image-6878" src="/wp-content/uploads/2018/05/word-image-6278.png" srcset="/wp-content/uploads/2018/05/word-image-6278.png 823w, /wp-content/uploads/2018/05/word-image-6278-300x100.png 300w, /wp-content/uploads/2018/05/word-image-6278-768x257.png 768w" sizes="(max-width: 823px) 100vw, 823px" /></p>
<p>更改效果：</p>
<p><img loading="lazy" decoding="async" width="1421" height="35" class="wp-image-6880" src="/wp-content/uploads/2018/05/word-image-6280.png" srcset="/wp-content/uploads/2018/05/word-image-6280.png 1421w, /wp-content/uploads/2018/05/word-image-6280-300x7.png 300w, /wp-content/uploads/2018/05/word-image-6280-768x19.png 768w, /wp-content/uploads/2018/05/word-image-6280-1024x25.png 1024w" sizes="(max-width: 1421px) 100vw, 1421px" /></p>
<h2><a id="post-6504-________________worker_process"></a><a id="post-6504-_Toc256000016"></a>创建一个子进程并设置进程名称为worker-process</h2>
<p><img loading="lazy" decoding="async" width="1066" height="596" class="wp-image-6883" src="/wp-content/uploads/2018/05/word-image-6282.png" srcset="/wp-content/uploads/2018/05/word-image-6282.png 1066w, /wp-content/uploads/2018/05/word-image-6282-300x168.png 300w, /wp-content/uploads/2018/05/word-image-6282-768x429.png 768w, /wp-content/uploads/2018/05/word-image-6282-1024x573.png 1024w" sizes="(max-width: 1066px) 100vw, 1066px" /></p>
<p>等待子进程退出：swoole_process:wait()效果就是只有所有子进程全部退出了，这个主进程才退出。</p>
<p><img loading="lazy" decoding="async" width="1562" height="147" class="wp-image-6885" src="/wp-content/uploads/2018/05/word-image-6284.png" srcset="/wp-content/uploads/2018/05/word-image-6284.png 1562w, /wp-content/uploads/2018/05/word-image-6284-300x28.png 300w, /wp-content/uploads/2018/05/word-image-6284-768x72.png 768w, /wp-content/uploads/2018/05/word-image-6284-1024x96.png 1024w" sizes="(max-width: 1562px) 100vw, 1562px" /></p>
<h1><a id="post-6504-_Swoole______"></a><a id="post-6504-_Toc256000017"></a>Swoole常用配置选项</h1>
<p><img loading="lazy" decoding="async" width="785" height="175" class="wp-image-6886" src="/wp-content/uploads/2018/05/word-image-6285.png" srcset="/wp-content/uploads/2018/05/word-image-6285.png 785w, /wp-content/uploads/2018/05/word-image-6285-300x67.png 300w, /wp-content/uploads/2018/05/word-image-6285-768x171.png 768w" sizes="(max-width: 785px) 100vw, 785px" /></p>
<h2><a id="post-6504-___worker____"></a><a id="post-6504-_Toc256000018"></a>调整worker进程数量</h2>
<p>worker进程的数量越多，能同时处理的并发量更高。</p>
<p>默认情况下：创建一个http服务器那么就会产生多个进程</p>
<p><img loading="lazy" decoding="async" width="982" height="362" class="wp-image-6888" src="/wp-content/uploads/2018/05/word-image-6287.png" srcset="/wp-content/uploads/2018/05/word-image-6287.png 982w, /wp-content/uploads/2018/05/word-image-6287-300x111.png 300w, /wp-content/uploads/2018/05/word-image-6287-768x283.png 768w" sizes="(max-width: 982px) 100vw, 982px" /></p>
<p>查看生成的进程数量</p>
<p><img loading="lazy" decoding="async" width="1597" height="213" class="wp-image-6890" src="/wp-content/uploads/2018/05/word-image-6289.png" srcset="/wp-content/uploads/2018/05/word-image-6289.png 1597w, /wp-content/uploads/2018/05/word-image-6289-300x40.png 300w, /wp-content/uploads/2018/05/word-image-6289-768x102.png 768w, /wp-content/uploads/2018/05/word-image-6289-1024x137.png 1024w" sizes="(max-width: 1597px) 100vw, 1597px" /></p>
<p>修改进程数量的代码：</p>
<p><img loading="lazy" decoding="async" width="1044" height="446" class="wp-image-6892" src="/wp-content/uploads/2018/05/word-image-6291.png" srcset="/wp-content/uploads/2018/05/word-image-6291.png 1044w, /wp-content/uploads/2018/05/word-image-6291-300x128.png 300w, /wp-content/uploads/2018/05/word-image-6291-768x328.png 768w, /wp-content/uploads/2018/05/word-image-6291-1024x437.png 1024w" sizes="(max-width: 1044px) 100vw, 1044px" /></p>
<p>修改task进程数量</p>
<p><img loading="lazy" decoding="async" width="1157" height="768" class="wp-image-6894" src="/wp-content/uploads/2018/05/word-image-6293.png" srcset="/wp-content/uploads/2018/05/word-image-6293.png 1157w, /wp-content/uploads/2018/05/word-image-6293-300x199.png 300w, /wp-content/uploads/2018/05/word-image-6293-768x510.png 768w, /wp-content/uploads/2018/05/word-image-6293-1024x680.png 1024w" sizes="(max-width: 1157px) 100vw, 1157px" /></p>
<p><strong>实现任务投递功能</strong></p>
<p>#创建一个http服务器</p>
<p>$serv=new swoole_http_server(&#8220;0.0.0.0&#8221;,8000);</p>
<p>$serv-&gt;set(array(</p>
<p>&#8216;worker_num&#8217;=&gt;5,//指定worker进程数量为20个</p>
<p>&#8216;task_worker_num&#8217;=&gt;3</p>
<p>));</p>
<p>$serv-&gt;on(&#8220;connect&#8221;,function($server, $fd, $from_id){</p>
<p>//当有新的连接进来是，那么就可以进行任务投递</p>
<p>$server-&gt;task(&#8220;worker进程投递了任务&#8221;);//①投递任务</p>
<p>});</p>
<p>$serv-&gt;on(&#8220;request&#8221;,function($requset,$response){</p>
<p>$response-&gt;end(&#8220;hello swoole&#8221;);</p>
<p>});</p>
<p>$serv-&gt;on(&#8220;Task&#8221;,function($serv, $task_id, $from_id, $data){</p>
<p>//这里负责处理任务数据</p>
<p>var_dump($task_id, $from_id,$data);//这个$data就是接受的任务数据信息</p>
<p>//任务处理完成之后②处理任务投递</p>
<p>return &#8220;任务进程处理完毕&#8221;;</p>
<p>});</p>
<p>$serv-&gt;on(&#8220;finish&#8221;,function( $serv, $task_id, $data){</p>
<p>//处理完成之后向主进程返回数据信息</p>
<p>var_dump($task_id,$data);//③向worker进程返回处理结果</p>
<p>});</p>
<p>#启动服务器</p>
<p>$serv-&gt;start();</p>
<h1><a id="post-6504-_Swoole_______2"></a><a id="post-6504-_Toc256000019"></a>Swoole毫秒级定时器</h1>
<p>场景一：将一段代码延时执行</p>
<p>swoole_timer_after(要执行的函数，延时的毫秒)</p>
<p><img loading="lazy" decoding="async" width="889" height="156" class="wp-image-6896" src="/wp-content/uploads/2018/05/word-image-6295.png" srcset="/wp-content/uploads/2018/05/word-image-6295.png 889w, /wp-content/uploads/2018/05/word-image-6295-300x53.png 300w, /wp-content/uploads/2018/05/word-image-6295-768x135.png 768w" sizes="(max-width: 889px) 100vw, 889px" /></p>
<p>执行效果：</p>
<p><img loading="lazy" decoding="async" width="933" height="88" class="wp-image-6898" src="/wp-content/uploads/2018/05/word-image-6297.png" srcset="/wp-content/uploads/2018/05/word-image-6297.png 933w, /wp-content/uploads/2018/05/word-image-6297-300x28.png 300w, /wp-content/uploads/2018/05/word-image-6297-768x72.png 768w" sizes="(max-width: 933px) 100vw, 933px" /></p>
<p>场景二：每隔3秒输出123</p>
<p><img loading="lazy" decoding="async" width="1053" height="228" class="wp-image-6900" src="/wp-content/uploads/2018/05/word-image-6299.png" srcset="/wp-content/uploads/2018/05/word-image-6299.png 1053w, /wp-content/uploads/2018/05/word-image-6299-300x65.png 300w, /wp-content/uploads/2018/05/word-image-6299-768x166.png 768w, /wp-content/uploads/2018/05/word-image-6299-1024x222.png 1024w" sizes="(max-width: 1053px) 100vw, 1053px" /></p>
<p>效果：</p>
<p><img loading="lazy" decoding="async" width="1064" height="238" class="wp-image-6902" src="/wp-content/uploads/2018/05/word-image-6301.png" srcset="/wp-content/uploads/2018/05/word-image-6301.png 1064w, /wp-content/uploads/2018/05/word-image-6301-300x67.png 300w, /wp-content/uploads/2018/05/word-image-6301-768x172.png 768w, /wp-content/uploads/2018/05/word-image-6301-1024x229.png 1024w" sizes="(max-width: 1064px) 100vw, 1064px" /></p>
<h1><a id="post-6504-_______"></a><a id="post-6504-_Toc256000020"></a>异步文件读取</h1>
<p>先看同步执行的案例：</p>
<p>代码：</p>
<p><img loading="lazy" decoding="async" width="834" height="177" class="wp-image-6904" src="/wp-content/uploads/2018/05/word-image-6303.png" srcset="/wp-content/uploads/2018/05/word-image-6303.png 834w, /wp-content/uploads/2018/05/word-image-6303-300x64.png 300w, /wp-content/uploads/2018/05/word-image-6303-768x163.png 768w" sizes="(max-width: 834px) 100vw, 834px" /></p>
<p>效果：</p>
<p><img loading="lazy" decoding="async" width="1109" height="140" class="wp-image-6906" src="/wp-content/uploads/2018/05/word-image-6305.png" srcset="/wp-content/uploads/2018/05/word-image-6305.png 1109w, /wp-content/uploads/2018/05/word-image-6305-300x38.png 300w, /wp-content/uploads/2018/05/word-image-6305-768x97.png 768w, /wp-content/uploads/2018/05/word-image-6305-1024x129.png 1024w" sizes="(max-width: 1109px) 100vw, 1109px" /></p>
<p>异步实现文件读取</p>
<p><img loading="lazy" decoding="async" width="1301" height="235" class="wp-image-6907" src="/wp-content/uploads/2018/05/word-image-6306.png" srcset="/wp-content/uploads/2018/05/word-image-6306.png 1301w, /wp-content/uploads/2018/05/word-image-6306-300x54.png 300w, /wp-content/uploads/2018/05/word-image-6306-768x139.png 768w, /wp-content/uploads/2018/05/word-image-6306-1024x185.png 1024w" sizes="(max-width: 1301px) 100vw, 1301px" /></p>
<p>效果：</p>
<p><img loading="lazy" decoding="async" width="1134" height="253" class="wp-image-6909" src="/wp-content/uploads/2018/05/word-image-6308.png" srcset="/wp-content/uploads/2018/05/word-image-6308.png 1134w, /wp-content/uploads/2018/05/word-image-6308-300x67.png 300w, /wp-content/uploads/2018/05/word-image-6308-768x171.png 768w, /wp-content/uploads/2018/05/word-image-6308-1024x228.png 1024w" sizes="(max-width: 1134px) 100vw, 1134px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/php/6504.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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 loading="lazy" 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 loading="lazy" 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 loading="lazy" 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>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>DedeCMS 二次开发（一）CMS介绍、安装、目录结构、取出数据、表、表关系、标签</title>
		<link>/%e4%ba%8c%e6%ac%a1%e5%bc%80%e5%8f%91/6479.html</link>
					<comments>/%e4%ba%8c%e6%ac%a1%e5%bc%80%e5%8f%91/6479.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 17:26:35 +0000</pubDate>
				<category><![CDATA[DedeCMS]]></category>
		<category><![CDATA[二次开发]]></category>
		<category><![CDATA[CMS介绍]]></category>
		<category><![CDATA[取出数据]]></category>
		<category><![CDATA[安装]]></category>
		<category><![CDATA[标签]]></category>
		<category><![CDATA[目录结构]]></category>
		<category><![CDATA[表]]></category>
		<category><![CDATA[表关系]]></category>
		<guid isPermaLink="false">/?p=6479</guid>

					<description><![CDATA[dedecms第一天 CMS介绍 什么是cms 就是别人已经把数据库和基本的php代码设计好了。只需要我们填充 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>dedecms第一天</p>
<h1><a id="post-6479-_CMS__"></a><a id="post-6479-_Toc256000002"></a>CMS介绍</h1>
<h2><a id="post-6479-____cms"></a><a id="post-6479-_Toc256000003"></a>什么是cms</h2>
<p>就是别人已经把数据库和基本的php代码设计好了。只需要我们填充静态页面和基本的数据，就可以做成一个网站。</p>
<p>能做那些网站</p>
<p>1 只能做一些，逻辑比较简单。</p>
<p>2 以展示内容为主，主要是静态页面。</p>
<p>3 不需要和用户进行太多的交互。</p>
<p>4 适合做企业的门户网站，素材网站等。</p>
<p>不适合做的网站</p>
<p>1 逻辑比较复杂的，和用户有较多的交互的。</p>
<p>2 比如，电商网站，社交网站，新闻类网站。</p>
<h2><a id="post-6479-____cms_____"></a><a id="post-6479-_Toc256000004"></a>开源的cms系统有哪些</h2>
<p>dedecms开源网站，偏向于美工使用的系统，操作起来比较简单，只需要套静态页面就行（适合于企业的门户网站）。</p>
<p>phpcms开源的，相对来说比较复杂，适合于php程序员做一些二次开发，做稍微大一点的网站。</p>
<h2><a id="post-6479-____cms_______"></a><a id="post-6479-_Toc256000005"></a>开源的cms系统有哪些特点</h2>
<p>（1） 强大的后台管理功能</p>
<p>（2） 网站的前台绝大部分页面真静态</p>
<p>（3） 采用mvc架构，便于扩展新的内容</p>
<p>（4） 强大的采集功能，便于采集其他的网站内容</p>
<p>（5） 强大的标签体系，便于在模板中取出数据</p>
<p>案例演示：http://www.dedecms.com/caseshow/e-gov/</p>
<p><img loading="lazy" decoding="async" width="1143" height="615" class="wp-image-6606" src="/wp-content/uploads/2018/05/word-image-6014.png" srcset="/wp-content/uploads/2018/05/word-image-6014.png 1143w, /wp-content/uploads/2018/05/word-image-6014-300x161.png 300w, /wp-content/uploads/2018/05/word-image-6014-768x413.png 768w, /wp-content/uploads/2018/05/word-image-6014-1024x551.png 1024w" sizes="(max-width: 1143px) 100vw, 1143px" /><br />
<img loading="lazy" decoding="async" width="1483" height="648" class="wp-image-6607" src="/wp-content/uploads/2018/05/word-image-6015.png" srcset="/wp-content/uploads/2018/05/word-image-6015.png 1483w, /wp-content/uploads/2018/05/word-image-6015-300x131.png 300w, /wp-content/uploads/2018/05/word-image-6015-768x336.png 768w, /wp-content/uploads/2018/05/word-image-6015-1024x447.png 1024w" sizes="(max-width: 1483px) 100vw, 1483px" /></p>
<h1><a id="post-6479-___dedecms"></a><a id="post-6479-_Toc256000006"></a>安装dedecms</h1>
<p>a 下载dedecms</p>
<p><img loading="lazy" decoding="async" width="1193" height="511" class="wp-image-6608" src="/wp-content/uploads/2018/05/word-image-6016.png" srcset="/wp-content/uploads/2018/05/word-image-6016.png 1193w, /wp-content/uploads/2018/05/word-image-6016-300x128.png 300w, /wp-content/uploads/2018/05/word-image-6016-768x329.png 768w, /wp-content/uploads/2018/05/word-image-6016-1024x439.png 1024w" sizes="(max-width: 1193px) 100vw, 1193px" /><br />
<img loading="lazy" decoding="async" width="903" height="497" class="wp-image-6609" src="/wp-content/uploads/2018/05/word-image-6017.png" srcset="/wp-content/uploads/2018/05/word-image-6017.png 903w, /wp-content/uploads/2018/05/word-image-6017-300x165.png 300w, /wp-content/uploads/2018/05/word-image-6017-768x423.png 768w" sizes="(max-width: 903px) 100vw, 903px" /></p>
<p>b 下载完成的页面，放到网站的根目录中直接进行解压</p>
<p><img loading="lazy" decoding="async" width="850" height="91" class="wp-image-6610" src="/wp-content/uploads/2018/05/word-image-6018.png" srcset="/wp-content/uploads/2018/05/word-image-6018.png 850w, /wp-content/uploads/2018/05/word-image-6018-300x32.png 300w, /wp-content/uploads/2018/05/word-image-6018-768x82.png 768w" sizes="(max-width: 850px) 100vw, 850px" /><br />
<img loading="lazy" decoding="async" width="857" height="215" class="wp-image-6611" src="/wp-content/uploads/2018/05/word-image-6019.png" srcset="/wp-content/uploads/2018/05/word-image-6019.png 857w, /wp-content/uploads/2018/05/word-image-6019-300x75.png 300w, /wp-content/uploads/2018/05/word-image-6019-768x193.png 768w" sizes="(max-width: 857px) 100vw, 857px" /></p>
<p>c 访问dede进行安装</p>
<p><img loading="lazy" decoding="async" width="698" height="312" class="wp-image-6612" src="/wp-content/uploads/2018/05/word-image-6020.png" srcset="/wp-content/uploads/2018/05/word-image-6020.png 698w, /wp-content/uploads/2018/05/word-image-6020-300x134.png 300w" sizes="(max-width: 698px) 100vw, 698px" /></p>
<p>点击uploads之后出现安装的页面</p>
<p><img loading="lazy" decoding="async" width="871" height="609" class="wp-image-6613" src="/wp-content/uploads/2018/05/word-image-6021.png" srcset="/wp-content/uploads/2018/05/word-image-6021.png 871w, /wp-content/uploads/2018/05/word-image-6021-300x210.png 300w, /wp-content/uploads/2018/05/word-image-6021-768x537.png 768w" sizes="(max-width: 871px) 100vw, 871px" /></p>
<p>设置数据库的密码和管理员的初始密码</p>
<p><img loading="lazy" decoding="async" width="949" height="851" class="wp-image-6614" src="/wp-content/uploads/2018/05/word-image-6022.png" srcset="/wp-content/uploads/2018/05/word-image-6022.png 949w, /wp-content/uploads/2018/05/word-image-6022-300x269.png 300w, /wp-content/uploads/2018/05/word-image-6022-768x689.png 768w" sizes="(max-width: 949px) 100vw, 949px" /></p>
<p>安装成功之后的页面</p>
<p><img loading="lazy" decoding="async" width="783" height="427" class="wp-image-6616" src="/wp-content/uploads/2018/05/word-image-6023.png" srcset="/wp-content/uploads/2018/05/word-image-6023.png 783w, /wp-content/uploads/2018/05/word-image-6023-300x164.png 300w, /wp-content/uploads/2018/05/word-image-6023-768x419.png 768w" sizes="(max-width: 783px) 100vw, 783px" /></p>
<p>网站的首页访问：</p>
<p><img loading="lazy" decoding="async" width="1122" height="450" class="wp-image-6617" src="/wp-content/uploads/2018/05/word-image-6024.png" srcset="/wp-content/uploads/2018/05/word-image-6024.png 1122w, /wp-content/uploads/2018/05/word-image-6024-300x120.png 300w, /wp-content/uploads/2018/05/word-image-6024-768x308.png 768w, /wp-content/uploads/2018/05/word-image-6024-1024x411.png 1024w" sizes="(max-width: 1122px) 100vw, 1122px" /></p>
<h2><a id="post-6479-_____"></a><a id="post-6479-_Toc256000007"></a>目录结构</h2>
<p>使用编辑器将我们的项目搭建起来</p>
<p><img loading="lazy" decoding="async" width="697" height="357" class="wp-image-6618" src="/wp-content/uploads/2018/05/word-image-6025.png" srcset="/wp-content/uploads/2018/05/word-image-6025.png 697w, /wp-content/uploads/2018/05/word-image-6025-300x154.png 300w" sizes="(max-width: 697px) 100vw, 697px" /></p>
<h3><a id="post-6479-_a__"></a><a id="post-6479-_Toc256000008"></a>a目录</h3>
<p>用于存放网站生成的静态页面</p>
<h3><a id="post-6479-_data__"></a><a id="post-6479-_Toc256000009"></a>data目录</h3>
<p>用于存放数据库的配置信息文件和一些缓存的数据文件</p>
<p><img loading="lazy" decoding="async" width="914" height="583" class="wp-image-6619" src="/wp-content/uploads/2018/05/word-image-6026.png" srcset="/wp-content/uploads/2018/05/word-image-6026.png 914w, /wp-content/uploads/2018/05/word-image-6026-300x191.png 300w, /wp-content/uploads/2018/05/word-image-6026-768x490.png 768w" sizes="(max-width: 914px) 100vw, 914px" /></p>
<h3><a id="post-6479-_include__"></a><a id="post-6479-_Toc256000010"></a>dede目录</h3>
<p>cms的后台主程序目录</p>
<h3>include目录</h3>
<p>用于存放dede核心文件目录，比如数据库类，文档的上传类，标签的解析类。</p>
<h3><a id="post-6479-_install__"></a><a id="post-6479-_Toc256000011"></a>install目录</h3>
<p>dede的安装目录</p>
<h3><a id="post-6479-_memeber__"></a><a id="post-6479-_Toc256000012"></a>memeber目录</h3>
<p>会员目录，主要是对会员进行增删改查的操作</p>
<h3><a id="post-6479-_plus__"></a><a id="post-6479-_Toc256000013"></a>plus目录</h3>
<p>插件目录，如果后期我们有特别的需求，可以自己把相应的程序文件放在这里使用</p>
<h3><a id="post-6479-_templets__"></a><a id="post-6479-_Toc256000014"></a>templets目录</h3>
<p>静态文件模板目录，用于存放我们的静态页面</p>
<h3><a id="post-6479-_uploads__"></a><a id="post-6479-_Toc256000015"></a>uploads目录</h3>
<p><a id="post-6479-_______"></a><br />
上传文件的保存目录，比如上传的图片等。</p>
<h1><a id="post-6479-____________"></a><a id="post-6479-_Toc256000022"></a>完成一个新闻类型的网站</h1>
<p>访问到dedecms的后台</p>
<p><a href="http://localhost/dede-1/uploads/dede/login.php">http://localhost/dede-1/uploads/dede/login.php</a></p>
<p><img loading="lazy" decoding="async" width="890" height="344" class="wp-image-6620" src="/wp-content/uploads/2018/05/word-image-6027.png" srcset="/wp-content/uploads/2018/05/word-image-6027.png 890w, /wp-content/uploads/2018/05/word-image-6027-300x116.png 300w, /wp-content/uploads/2018/05/word-image-6027-768x297.png 768w" sizes="(max-width: 890px) 100vw, 890px" /></p>
<h2><a id="post-6479-______6"></a><a id="post-6479-_Toc256000023"></a>创建模型</h2>
<p><img loading="lazy" decoding="async" width="1408" height="493" class="wp-image-6621" src="/wp-content/uploads/2018/05/word-image-6028.png" srcset="/wp-content/uploads/2018/05/word-image-6028.png 1408w, /wp-content/uploads/2018/05/word-image-6028-300x105.png 300w, /wp-content/uploads/2018/05/word-image-6028-768x269.png 768w, /wp-content/uploads/2018/05/word-image-6028-1024x359.png 1024w" sizes="(max-width: 1408px) 100vw, 1408px" /></p>
<p>现在dede中默认有以上的模型，等到后续如果这些模型不能满足我们的需求我们可以自己创建。</p>
<p>模型值得就是，这个网站的内容的类型。</p>
<p>因为我们要创建一个新闻类型的网站，只需要使用使用文章模型即可。</p>
<h2><a id="post-6479-______7"></a><a id="post-6479-_Toc256000024"></a>创建栏目</h2>
<p>顶级导航：体育新闻、娱乐新闻</p>
<p>体育新闻：足球新闻、武术新闻</p>
<p>娱乐新闻：明星轶事、明星八卦</p>
<p>a 打开后台创建栏目</p>
<p><img loading="lazy" decoding="async" width="1768" height="338" class="wp-image-6622" src="/wp-content/uploads/2018/05/word-image-6029.png" srcset="/wp-content/uploads/2018/05/word-image-6029.png 1768w, /wp-content/uploads/2018/05/word-image-6029-300x57.png 300w, /wp-content/uploads/2018/05/word-image-6029-768x147.png 768w, /wp-content/uploads/2018/05/word-image-6029-1024x196.png 1024w" sizes="(max-width: 1768px) 100vw, 1768px" /></p>
<p>b 进行网站顶级栏目的添加</p>
<p><img loading="lazy" decoding="async" width="954" height="563" class="wp-image-6623" src="/wp-content/uploads/2018/05/word-image-6030.png" srcset="/wp-content/uploads/2018/05/word-image-6030.png 954w, /wp-content/uploads/2018/05/word-image-6030-300x177.png 300w, /wp-content/uploads/2018/05/word-image-6030-768x453.png 768w" sizes="(max-width: 954px) 100vw, 954px" /></p>
<p>添加娱乐新闻</p>
<p><img loading="lazy" decoding="async" width="930" height="586" class="wp-image-6624" src="/wp-content/uploads/2018/05/word-image-6031.png" srcset="/wp-content/uploads/2018/05/word-image-6031.png 930w, /wp-content/uploads/2018/05/word-image-6031-300x189.png 300w, /wp-content/uploads/2018/05/word-image-6031-768x484.png 768w" sizes="(max-width: 930px) 100vw, 930px" /></p>
<p>c 顶级栏目添加之后的效果</p>
<p><img loading="lazy" decoding="async" width="1655" height="279" class="wp-image-6625" src="/wp-content/uploads/2018/05/word-image-6032.png" srcset="/wp-content/uploads/2018/05/word-image-6032.png 1655w, /wp-content/uploads/2018/05/word-image-6032-300x51.png 300w, /wp-content/uploads/2018/05/word-image-6032-768x129.png 768w, /wp-content/uploads/2018/05/word-image-6032-1024x173.png 1024w" sizes="(max-width: 1655px) 100vw, 1655px" /></p>
<p>d 点击增加子级为每一个顶级栏目添加二级栏目</p>
<p><img loading="lazy" decoding="async" width="1619" height="316" class="wp-image-6626" src="/wp-content/uploads/2018/05/word-image-6033.png" srcset="/wp-content/uploads/2018/05/word-image-6033.png 1619w, /wp-content/uploads/2018/05/word-image-6033-300x59.png 300w, /wp-content/uploads/2018/05/word-image-6033-768x150.png 768w, /wp-content/uploads/2018/05/word-image-6033-1024x200.png 1024w" sizes="(max-width: 1619px) 100vw, 1619px" /><br />
<img loading="lazy" decoding="async" width="587" height="533" class="wp-image-6627" src="/wp-content/uploads/2018/05/word-image-6034.png" srcset="/wp-content/uploads/2018/05/word-image-6034.png 587w, /wp-content/uploads/2018/05/word-image-6034-300x272.png 300w" sizes="(max-width: 587px) 100vw, 587px" /></p>
<p>二级栏目增加之后的效果:</p>
<p><img loading="lazy" decoding="async" width="1574" height="357" class="wp-image-6628" src="/wp-content/uploads/2018/05/word-image-6035.png" srcset="/wp-content/uploads/2018/05/word-image-6035.png 1574w, /wp-content/uploads/2018/05/word-image-6035-300x68.png 300w, /wp-content/uploads/2018/05/word-image-6035-768x174.png 768w, /wp-content/uploads/2018/05/word-image-6035-1024x232.png 1024w" sizes="(max-width: 1574px) 100vw, 1574px" /></p>
<p>e 栏目增加完成之后,刷线前台页面,即可看到效果</p>
<p><img loading="lazy" decoding="async" width="814" height="253" class="wp-image-6629" src="/wp-content/uploads/2018/05/word-image-6036.png" srcset="/wp-content/uploads/2018/05/word-image-6036.png 814w, /wp-content/uploads/2018/05/word-image-6036-300x93.png 300w, /wp-content/uploads/2018/05/word-image-6036-768x239.png 768w" sizes="(max-width: 814px) 100vw, 814px" /></p>
<h2><a id="post-6479-______8"></a><a id="post-6479-_Toc256000025"></a>添加内容</h2>
<p>a 为网站增加文章</p>
<p><img loading="lazy" decoding="async" width="1279" height="413" class="wp-image-6630" src="/wp-content/uploads/2018/05/word-image-6037.png" srcset="/wp-content/uploads/2018/05/word-image-6037.png 1279w, /wp-content/uploads/2018/05/word-image-6037-300x97.png 300w, /wp-content/uploads/2018/05/word-image-6037-768x248.png 768w, /wp-content/uploads/2018/05/word-image-6037-1024x331.png 1024w" sizes="(max-width: 1279px) 100vw, 1279px" /></p>
<p>b 添加具体的文档内容</p>
<p><img loading="lazy" decoding="async" width="1186" height="766" class="wp-image-6631" src="/wp-content/uploads/2018/05/word-image-6038.png" srcset="/wp-content/uploads/2018/05/word-image-6038.png 1186w, /wp-content/uploads/2018/05/word-image-6038-300x194.png 300w, /wp-content/uploads/2018/05/word-image-6038-768x496.png 768w, /wp-content/uploads/2018/05/word-image-6038-1024x661.png 1024w" sizes="(max-width: 1186px) 100vw, 1186px" /></p>
<p>c 文章添加完成之后的效果</p>
<p><img loading="lazy" decoding="async" width="1618" height="304" class="wp-image-6632" src="/wp-content/uploads/2018/05/word-image-6039.png" srcset="/wp-content/uploads/2018/05/word-image-6039.png 1618w, /wp-content/uploads/2018/05/word-image-6039-300x56.png 300w, /wp-content/uploads/2018/05/word-image-6039-768x144.png 768w, /wp-content/uploads/2018/05/word-image-6039-1024x192.png 1024w" sizes="(max-width: 1618px) 100vw, 1618px" /></p>
<p>d 在首页查看刚才添加的文章内容</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" width="1101" height="920" class="wp-image-6633" src="/wp-content/uploads/2018/05/word-image-6040.png" srcset="/wp-content/uploads/2018/05/word-image-6040.png 1101w, /wp-content/uploads/2018/05/word-image-6040-300x251.png 300w, /wp-content/uploads/2018/05/word-image-6040-768x642.png 768w, /wp-content/uploads/2018/05/word-image-6040-1024x856.png 1024w" sizes="(max-width: 1101px) 100vw, 1101px" /></p>
<h2><a id="post-6479-________3"></a><a id="post-6479-_Toc256000027"></a>生成静态页面</h2>
<h3><a id="post-6479-_________"></a><a id="post-6479-_Toc256000028"></a>生成首页静态页面</h3>
<p><img loading="lazy" decoding="async" width="1134" height="317" class="wp-image-6634" src="/wp-content/uploads/2018/05/word-image-6041.png" srcset="/wp-content/uploads/2018/05/word-image-6041.png 1134w, /wp-content/uploads/2018/05/word-image-6041-300x84.png 300w, /wp-content/uploads/2018/05/word-image-6041-768x215.png 768w, /wp-content/uploads/2018/05/word-image-6041-1024x286.png 1024w" sizes="(max-width: 1134px) 100vw, 1134px" /></p>
<h3><a id="post-6479-__________2"></a><a id="post-6479-_Toc256000029"></a>生成栏目静态页面</h3>
<p><img loading="lazy" decoding="async" width="1225" height="403" class="wp-image-6635" src="/wp-content/uploads/2018/05/word-image-6042.png" srcset="/wp-content/uploads/2018/05/word-image-6042.png 1225w, /wp-content/uploads/2018/05/word-image-6042-300x99.png 300w, /wp-content/uploads/2018/05/word-image-6042-768x253.png 768w, /wp-content/uploads/2018/05/word-image-6042-1024x337.png 1024w" sizes="(max-width: 1225px) 100vw, 1225px" /><br />
<img loading="lazy" decoding="async" width="856" height="204" class="wp-image-6636" src="/wp-content/uploads/2018/05/word-image-6043.png" srcset="/wp-content/uploads/2018/05/word-image-6043.png 856w, /wp-content/uploads/2018/05/word-image-6043-300x71.png 300w, /wp-content/uploads/2018/05/word-image-6043-768x183.png 768w" sizes="(max-width: 856px) 100vw, 856px" /></p>
<h3><a id="post-6479-__________3"></a><a id="post-6479-_Toc256000030"></a>生成内容静态页面</h3>
<p><img loading="lazy" decoding="async" width="1175" height="322" class="wp-image-6637" src="/wp-content/uploads/2018/05/word-image-6044.png" srcset="/wp-content/uploads/2018/05/word-image-6044.png 1175w, /wp-content/uploads/2018/05/word-image-6044-300x82.png 300w, /wp-content/uploads/2018/05/word-image-6044-768x210.png 768w, /wp-content/uploads/2018/05/word-image-6044-1024x281.png 1024w" sizes="(max-width: 1175px) 100vw, 1175px" /><br />
<img loading="lazy" decoding="async" width="832" height="525" class="wp-image-6638" src="/wp-content/uploads/2018/05/word-image-6045.png" srcset="/wp-content/uploads/2018/05/word-image-6045.png 832w, /wp-content/uploads/2018/05/word-image-6045-300x189.png 300w, /wp-content/uploads/2018/05/word-image-6045-768x485.png 768w" sizes="(max-width: 832px) 100vw, 832px" /></p>
<h1><a id="post-6479-_dedecms______"></a><a id="post-6479-_Toc256000031"></a>dedecms里面主要的表</h1>
<h2><a id="post-6479-_dede_channeltype_____"></a><a id="post-6479-_Toc256000032"></a>dede_channeltype（模型表）</h2>
<p><img loading="lazy" decoding="async" width="1482" height="462" class="wp-image-6639" src="/wp-content/uploads/2018/05/word-image-6046.png" srcset="/wp-content/uploads/2018/05/word-image-6046.png 1482w, /wp-content/uploads/2018/05/word-image-6046-300x94.png 300w, /wp-content/uploads/2018/05/word-image-6046-768x239.png 768w, /wp-content/uploads/2018/05/word-image-6046-1024x319.png 1024w" sizes="(max-width: 1482px) 100vw, 1482px" /></p>
<p>这个表主要使用与我们保存模型的</p>
<h2><a id="post-6479-_dede_arctype_____"></a><a id="post-6479-_Toc256000033"></a>dede_arctype（栏目表）</h2>
<p><img loading="lazy" decoding="async" width="1206" height="353" class="wp-image-6640" src="/wp-content/uploads/2018/05/word-image-6047.png" srcset="/wp-content/uploads/2018/05/word-image-6047.png 1206w, /wp-content/uploads/2018/05/word-image-6047-300x88.png 300w, /wp-content/uploads/2018/05/word-image-6047-768x225.png 768w, /wp-content/uploads/2018/05/word-image-6047-1024x300.png 1024w" sizes="(max-width: 1206px) 100vw, 1206px" /></p>
<h2><a id="post-6479-_deede_archives______"></a><a id="post-6479-_Toc256000034"></a>deede_archives(内容主表)</h2>
<p><img loading="lazy" decoding="async" width="1152" height="331" class="wp-image-6641" src="/wp-content/uploads/2018/05/word-image-6048.png" srcset="/wp-content/uploads/2018/05/word-image-6048.png 1152w, /wp-content/uploads/2018/05/word-image-6048-300x86.png 300w, /wp-content/uploads/2018/05/word-image-6048-768x221.png 768w, /wp-content/uploads/2018/05/word-image-6048-1024x294.png 1024w" sizes="(max-width: 1152px) 100vw, 1152px" /></p>
<h2><a id="post-6479-_dede_addonxxx_____"></a><a id="post-6479-_Toc256000035"></a>dede_addonxxx(附加表)</h2>
<p><img loading="lazy" decoding="async" width="1208" height="304" class="wp-image-6642" src="/wp-content/uploads/2018/05/word-image-6049.png" srcset="/wp-content/uploads/2018/05/word-image-6049.png 1208w, /wp-content/uploads/2018/05/word-image-6049-300x75.png 300w, /wp-content/uploads/2018/05/word-image-6049-768x193.png 768w, /wp-content/uploads/2018/05/word-image-6049-1024x258.png 1024w" sizes="(max-width: 1208px) 100vw, 1208px" /></p>
<p>每一个附加表,都是为了保存这个模型下面所独有的内容</p>
<h1><a id="post-6479-________4"></a><a id="post-6479-_Toc256000036"></a>表之间的关系</h1>
<h2><a id="post-6479-________"></a><a id="post-6479-_Toc256000037"></a>模型表与栏目表</h2>
<p>由于每个栏目必然要确定是哪一个模型下面的栏目所以这里dede_channeltype模型表中的id字段对应的就是dede_arctype栏目表中的channeltype字段进行关联</p>
<p><img loading="lazy" decoding="async" width="1264" height="758" class="wp-image-6643" src="/wp-content/uploads/2018/05/word-image-6050.png" srcset="/wp-content/uploads/2018/05/word-image-6050.png 1264w, /wp-content/uploads/2018/05/word-image-6050-300x180.png 300w, /wp-content/uploads/2018/05/word-image-6050-768x461.png 768w, /wp-content/uploads/2018/05/word-image-6050-1024x614.png 1024w" sizes="(max-width: 1264px) 100vw, 1264px" /></p>
<h2><a id="post-6479-__________4"></a><a id="post-6479-_Toc256000038"></a>内容主表与栏目表</h2>
<p>内容主表的typeid与栏目表中id是对应的</p>
<p><img loading="lazy" decoding="async" width="1193" height="792" class="wp-image-6644" src="/wp-content/uploads/2018/05/word-image-6051.png" srcset="/wp-content/uploads/2018/05/word-image-6051.png 1193w, /wp-content/uploads/2018/05/word-image-6051-300x199.png 300w, /wp-content/uploads/2018/05/word-image-6051-768x510.png 768w, /wp-content/uploads/2018/05/word-image-6051-1024x680.png 1024w" sizes="(max-width: 1193px) 100vw, 1193px" /></p>
<h2><a id="post-6479-__________5"></a><a id="post-6479-_Toc256000039"></a>内容主表和附加表</h2>
<p><img loading="lazy" decoding="async" width="1078" height="685" class="wp-image-6645" src="/wp-content/uploads/2018/05/word-image-6052.png" srcset="/wp-content/uploads/2018/05/word-image-6052.png 1078w, /wp-content/uploads/2018/05/word-image-6052-300x191.png 300w, /wp-content/uploads/2018/05/word-image-6052-768x488.png 768w, /wp-content/uploads/2018/05/word-image-6052-1024x651.png 1024w" sizes="(max-width: 1078px) 100vw, 1078px" /></p>
<p>这两个表中的typeid是相对应的</p>
<h1><a id="post-6479-_________________"></a><a id="post-6479-_Toc256000040"></a>开发一个电影网站（添加数据信息）</h1>
<h2><a id="post-6479-________5"></a><a id="post-6479-_Toc256000041"></a>创建电影模型</h2>
<p>a 创建模型的一个步骤</p>
<p>核心&#8212;-&gt;内容模型管理&#8212;&#8212;&#8211;&gt;增加模型</p>
<p><img loading="lazy" decoding="async" width="1856" height="483" class="wp-image-6646" src="/wp-content/uploads/2018/05/word-image-6053.png" srcset="/wp-content/uploads/2018/05/word-image-6053.png 1856w, /wp-content/uploads/2018/05/word-image-6053-300x78.png 300w, /wp-content/uploads/2018/05/word-image-6053-768x200.png 768w, /wp-content/uploads/2018/05/word-image-6053-1024x266.png 1024w" sizes="(max-width: 1856px) 100vw, 1856px" /></p>
<p>b 增加一个电影模型</p>
<p><img loading="lazy" decoding="async" width="1489" height="858" class="wp-image-6647" src="/wp-content/uploads/2018/05/word-image-6054.png" srcset="/wp-content/uploads/2018/05/word-image-6054.png 1489w, /wp-content/uploads/2018/05/word-image-6054-300x173.png 300w, /wp-content/uploads/2018/05/word-image-6054-768x443.png 768w, /wp-content/uploads/2018/05/word-image-6054-1024x590.png 1024w" sizes="(max-width: 1489px) 100vw, 1489px" /></p>
<p>增加成功之后的界面</p>
<p><img loading="lazy" decoding="async" width="1402" height="431" class="wp-image-6648" src="/wp-content/uploads/2018/05/word-image-6055.png" srcset="/wp-content/uploads/2018/05/word-image-6055.png 1402w, /wp-content/uploads/2018/05/word-image-6055-300x92.png 300w, /wp-content/uploads/2018/05/word-image-6055-768x236.png 768w, /wp-content/uploads/2018/05/word-image-6055-1024x315.png 1024w" sizes="(max-width: 1402px) 100vw, 1402px" /></p>
<p>模型所对应的附加表</p>
<p><img loading="lazy" decoding="async" width="606" height="299" class="wp-image-6649" src="/wp-content/uploads/2018/05/word-image-6056.png" srcset="/wp-content/uploads/2018/05/word-image-6056.png 606w, /wp-content/uploads/2018/05/word-image-6056-300x148.png 300w" sizes="(max-width: 606px) 100vw, 606px" /></p>
<h2><a id="post-6479-________6"></a><a id="post-6479-_Toc256000042"></a>添加属性字段</h2>
<p>因为增加模型时,默认添加的字端,不能满足我们的需求,所以我们要自己手动的增加一些字段.</p>
<p>a 更改已经创建好的模型</p>
<p><img loading="lazy" decoding="async" width="1845" height="452" class="wp-image-6650" src="/wp-content/uploads/2018/05/word-image-6057.png" srcset="/wp-content/uploads/2018/05/word-image-6057.png 1845w, /wp-content/uploads/2018/05/word-image-6057-300x73.png 300w, /wp-content/uploads/2018/05/word-image-6057-768x188.png 768w, /wp-content/uploads/2018/05/word-image-6057-1024x251.png 1024w" sizes="(max-width: 1845px) 100vw, 1845px" /><br />
<img loading="lazy" decoding="async" width="930" height="458" class="wp-image-6651" src="/wp-content/uploads/2018/05/word-image-6058.png" srcset="/wp-content/uploads/2018/05/word-image-6058.png 930w, /wp-content/uploads/2018/05/word-image-6058-300x148.png 300w, /wp-content/uploads/2018/05/word-image-6058-768x378.png 768w" sizes="(max-width: 930px) 100vw, 930px" /></p>
<p>b 添加主演字段</p>
<p><img loading="lazy" decoding="async" width="664" height="547" class="wp-image-6652" src="/wp-content/uploads/2018/05/word-image-6059.png" srcset="/wp-content/uploads/2018/05/word-image-6059.png 664w, /wp-content/uploads/2018/05/word-image-6059-300x247.png 300w" sizes="(max-width: 664px) 100vw, 664px" /></p>
<p>c 添加导演字段</p>
<p><img loading="lazy" decoding="async" width="966" height="701" class="wp-image-6653" src="/wp-content/uploads/2018/05/word-image-6060.png" srcset="/wp-content/uploads/2018/05/word-image-6060.png 966w, /wp-content/uploads/2018/05/word-image-6060-300x218.png 300w, /wp-content/uploads/2018/05/word-image-6060-768x557.png 768w" sizes="(max-width: 966px) 100vw, 966px" /></p>
<p>d 增加年代字段</p>
<p><img loading="lazy" decoding="async" width="665" height="510" class="wp-image-6654" src="/wp-content/uploads/2018/05/word-image-6061.png" srcset="/wp-content/uploads/2018/05/word-image-6061.png 665w, /wp-content/uploads/2018/05/word-image-6061-300x230.png 300w" sizes="(max-width: 665px) 100vw, 665px" /></p>
<p>e 增加语言的字段</p>
<p><img loading="lazy" decoding="async" width="1000" height="577" class="wp-image-6655" src="/wp-content/uploads/2018/05/word-image-6062.png" srcset="/wp-content/uploads/2018/05/word-image-6062.png 1000w, /wp-content/uploads/2018/05/word-image-6062-300x173.png 300w, /wp-content/uploads/2018/05/word-image-6062-768x443.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p>f 增加地区的字段</p>
<p><img loading="lazy" decoding="async" width="1506" height="579" class="wp-image-6656" src="/wp-content/uploads/2018/05/word-image-6063.png" srcset="/wp-content/uploads/2018/05/word-image-6063.png 1506w, /wp-content/uploads/2018/05/word-image-6063-300x115.png 300w, /wp-content/uploads/2018/05/word-image-6063-768x295.png 768w, /wp-content/uploads/2018/05/word-image-6063-1024x394.png 1024w" sizes="(max-width: 1506px) 100vw, 1506px" /></p>
<p>g 增加评分</p>
<p><img loading="lazy" decoding="async" width="933" height="603" class="wp-image-6657" src="/wp-content/uploads/2018/05/word-image-6064.png" srcset="/wp-content/uploads/2018/05/word-image-6064.png 933w, /wp-content/uploads/2018/05/word-image-6064-300x194.png 300w, /wp-content/uploads/2018/05/word-image-6064-768x496.png 768w" sizes="(max-width: 933px) 100vw, 933px" /></p>
<p>h 评分人数</p>
<p><img loading="lazy" decoding="async" width="736" height="537" class="wp-image-6658" src="/wp-content/uploads/2018/05/word-image-6065.png" srcset="/wp-content/uploads/2018/05/word-image-6065.png 736w, /wp-content/uploads/2018/05/word-image-6065-300x219.png 300w" sizes="(max-width: 736px) 100vw, 736px" /></p>
<p>j 增加简介的字段</p>
<p><img loading="lazy" decoding="async" width="950" height="644" class="wp-image-6659" src="/wp-content/uploads/2018/05/word-image-6066.png" srcset="/wp-content/uploads/2018/05/word-image-6066.png 950w, /wp-content/uploads/2018/05/word-image-6066-300x203.png 300w, /wp-content/uploads/2018/05/word-image-6066-768x521.png 768w, /wp-content/uploads/2018/05/word-image-6066-220x150.png 220w" sizes="(max-width: 950px) 100vw, 950px" /></p>
<p>字段增加完成之后的效果’</p>
<p><img loading="lazy" decoding="async" width="1646" height="383" class="wp-image-6660" src="/wp-content/uploads/2018/05/word-image-6067.png" srcset="/wp-content/uploads/2018/05/word-image-6067.png 1646w, /wp-content/uploads/2018/05/word-image-6067-300x70.png 300w, /wp-content/uploads/2018/05/word-image-6067-768x179.png 768w, /wp-content/uploads/2018/05/word-image-6067-1024x238.png 1024w" sizes="(max-width: 1646px) 100vw, 1646px" /></p>
<p>查看已经创建好的电影模型附加表所对应的字段</p>
<p><img loading="lazy" decoding="async" width="1133" height="213" class="wp-image-6661" src="/wp-content/uploads/2018/05/word-image-6068.png" srcset="/wp-content/uploads/2018/05/word-image-6068.png 1133w, /wp-content/uploads/2018/05/word-image-6068-300x56.png 300w, /wp-content/uploads/2018/05/word-image-6068-768x144.png 768w, /wp-content/uploads/2018/05/word-image-6068-1024x193.png 1024w" sizes="(max-width: 1133px) 100vw, 1133px" /></p>
<p>&nbsp;</p>
<h2><a id="post-6479-__________7"></a><a id="post-6479-_Toc256000046"></a>创建电影网站栏目</h2>
<p>顶级导航：我的电影、国产大片、原声影院、欧美大片、3D影院、公司简介、关于我们</p>
<p>我的电影：爱情、动作、科幻、惊悚、儿童、动漫</p>
<p>a 使用批量添加顶级导航栏目</p>
<p><img loading="lazy" decoding="async" width="1886" height="362" class="wp-image-6662" src="/wp-content/uploads/2018/05/word-image-6069.png" srcset="/wp-content/uploads/2018/05/word-image-6069.png 1886w, /wp-content/uploads/2018/05/word-image-6069-300x58.png 300w, /wp-content/uploads/2018/05/word-image-6069-768x147.png 768w, /wp-content/uploads/2018/05/word-image-6069-1024x197.png 1024w" sizes="(max-width: 1886px) 100vw, 1886px" /></p>
<p>b 增加导航栏目</p>
<p><img loading="lazy" decoding="async" width="1289" height="775" class="wp-image-6663" src="/wp-content/uploads/2018/05/word-image-6070.png" srcset="/wp-content/uploads/2018/05/word-image-6070.png 1289w, /wp-content/uploads/2018/05/word-image-6070-300x180.png 300w, /wp-content/uploads/2018/05/word-image-6070-768x462.png 768w, /wp-content/uploads/2018/05/word-image-6070-1024x616.png 1024w" sizes="(max-width: 1289px) 100vw, 1289px" /></p>
<p>将公司简介,和关于我们两个栏目添加成为文章类型的</p>
<p>增加之后的页面</p>
<p><img loading="lazy" decoding="async" width="1701" height="525" class="wp-image-6664" src="/wp-content/uploads/2018/05/word-image-6071.png" srcset="/wp-content/uploads/2018/05/word-image-6071.png 1701w, /wp-content/uploads/2018/05/word-image-6071-300x93.png 300w, /wp-content/uploads/2018/05/word-image-6071-768x237.png 768w, /wp-content/uploads/2018/05/word-image-6071-1024x316.png 1024w" sizes="(max-width: 1701px) 100vw, 1701px" /></p>
<h2><a id="post-6479-__________8"></a><a id="post-6479-_Toc256000047"></a>添加具体电影数据</h2>
<p>a 在内容管理中添加电影数据</p>
<p><img loading="lazy" decoding="async" width="637" height="571" class="wp-image-6665" src="/wp-content/uploads/2018/05/word-image-6072.png" srcset="/wp-content/uploads/2018/05/word-image-6072.png 637w, /wp-content/uploads/2018/05/word-image-6072-300x269.png 300w" sizes="(max-width: 637px) 100vw, 637px" /></p>
<p>b 增加电影数据:</p>
<p><img loading="lazy" decoding="async" width="1094" height="556" class="wp-image-6666" src="/wp-content/uploads/2018/05/word-image-6073.png" srcset="/wp-content/uploads/2018/05/word-image-6073.png 1094w, /wp-content/uploads/2018/05/word-image-6073-300x152.png 300w, /wp-content/uploads/2018/05/word-image-6073-768x390.png 768w, /wp-content/uploads/2018/05/word-image-6073-1024x520.png 1024w" sizes="(max-width: 1094px) 100vw, 1094px" /><br />
<img loading="lazy" decoding="async" width="1075" height="748" class="wp-image-6668" src="/wp-content/uploads/2018/05/word-image-6075.png" srcset="/wp-content/uploads/2018/05/word-image-6075.png 1075w, /wp-content/uploads/2018/05/word-image-6075-300x209.png 300w, /wp-content/uploads/2018/05/word-image-6075-768x534.png 768w, /wp-content/uploads/2018/05/word-image-6075-1024x713.png 1024w" sizes="(max-width: 1075px) 100vw, 1075px" /></p>
<h1><a id="post-6479-__________9"></a><a id="post-6479-_Toc256000048"></a>制作电影网站首页</h1>
<h2><a id="post-6479-___________"></a><a id="post-6479-_Toc256000049"></a>复制模板文件到项目中</h2>
<p>a 将我们的模板复制到templets中</p>
<p><img loading="lazy" decoding="async" width="976" height="272" class="wp-image-6670" src="/wp-content/uploads/2018/05/word-image-6077.png" srcset="/wp-content/uploads/2018/05/word-image-6077.png 976w, /wp-content/uploads/2018/05/word-image-6077-300x84.png 300w, /wp-content/uploads/2018/05/word-image-6077-768x214.png 768w" sizes="(max-width: 976px) 100vw, 976px" /></p>
<h2><a id="post-6479-_____________2"></a><a id="post-6479-_Toc256000050"></a>修改模板文件的默认风格</h2>
<p>修改dede默认加载静态页面的路径</p>
<p><img loading="lazy" decoding="async" width="1197" height="628" class="wp-image-6672" src="/wp-content/uploads/2018/05/word-image-6079.png" srcset="/wp-content/uploads/2018/05/word-image-6079.png 1197w, /wp-content/uploads/2018/05/word-image-6079-300x157.png 300w, /wp-content/uploads/2018/05/word-image-6079-768x403.png 768w, /wp-content/uploads/2018/05/word-image-6079-1024x537.png 1024w" sizes="(max-width: 1197px) 100vw, 1197px" /></p>
<h2><a id="post-6479-__a67______"></a><a id="post-6479-_Toc256000051"></a>将a67模板首页改名,作为整个网站的首页</h2>
<p><img loading="lazy" decoding="async" width="939" height="279" class="wp-image-6674" src="/wp-content/uploads/2018/05/word-image-6081.png" srcset="/wp-content/uploads/2018/05/word-image-6081.png 939w, /wp-content/uploads/2018/05/word-image-6081-300x89.png 300w, /wp-content/uploads/2018/05/word-image-6081-768x228.png 768w" sizes="(max-width: 939px) 100vw, 939px" /></p>
<h2><a id="post-6479-__________10"></a><a id="post-6479-_Toc256000052"></a>生成首页文件</h2>
<p>a 在生成栏目下找到更新主页html页面的按钮’</p>
<p><img loading="lazy" decoding="async" width="1147" height="367" class="wp-image-6676" src="/wp-content/uploads/2018/05/word-image-6083.png" srcset="/wp-content/uploads/2018/05/word-image-6083.png 1147w, /wp-content/uploads/2018/05/word-image-6083-300x96.png 300w, /wp-content/uploads/2018/05/word-image-6083-768x246.png 768w, /wp-content/uploads/2018/05/word-image-6083-1024x328.png 1024w" sizes="(max-width: 1147px) 100vw, 1147px" /></p>
<p>b 选择a67下面的index.htm文件</p>
<p><img loading="lazy" decoding="async" width="873" height="353" class="wp-image-6678" src="/wp-content/uploads/2018/05/word-image-6085.png" srcset="/wp-content/uploads/2018/05/word-image-6085.png 873w, /wp-content/uploads/2018/05/word-image-6085-300x121.png 300w, /wp-content/uploads/2018/05/word-image-6085-768x311.png 768w" sizes="(max-width: 873px) 100vw, 873px" /></p>
<p>c 首页更新成功</p>
<p><img loading="lazy" decoding="async" width="1008" height="595" class="wp-image-6679" src="/wp-content/uploads/2018/05/word-image-6086.png" srcset="/wp-content/uploads/2018/05/word-image-6086.png 1008w, /wp-content/uploads/2018/05/word-image-6086-300x177.png 300w, /wp-content/uploads/2018/05/word-image-6086-768x453.png 768w" sizes="(max-width: 1008px) 100vw, 1008px" /></p>
<h2>修改首页资源路径</h2>
<p>此时的常量所代表的路径:</p>
<p><img loading="lazy" decoding="async" width="696" height="80" class="wp-image-6681" src="/wp-content/uploads/2018/05/word-image-6088.png" srcset="/wp-content/uploads/2018/05/word-image-6088.png 696w, /wp-content/uploads/2018/05/word-image-6088-300x34.png 300w" sizes="(max-width: 696px) 100vw, 696px" /></p>
<p>a 新建一个demo.html文件测试</p>
<p><img loading="lazy" decoding="async" width="1135" height="586" class="wp-image-6684" src="/wp-content/uploads/2018/05/word-image-6090.png" srcset="/wp-content/uploads/2018/05/word-image-6090.png 1135w, /wp-content/uploads/2018/05/word-image-6090-300x155.png 300w, /wp-content/uploads/2018/05/word-image-6090-768x397.png 768w, /wp-content/uploads/2018/05/word-image-6090-1024x529.png 1024w" sizes="(max-width: 1135px) 100vw, 1135px" /></p>
<p>b 重新生成首页文件,显示出路径</p>
<p><img loading="lazy" decoding="async" width="868" height="269" class="wp-image-6687" src="/wp-content/uploads/2018/05/word-image-6093.png" srcset="/wp-content/uploads/2018/05/word-image-6093.png 868w, /wp-content/uploads/2018/05/word-image-6093-300x93.png 300w, /wp-content/uploads/2018/05/word-image-6093-768x238.png 768w" sizes="(max-width: 868px) 100vw, 868px" /></p>
<p>c 更新主页html之后重新生成的页面,路径的输出结果如下</p>
<p><img loading="lazy" decoding="async" width="664" height="172" class="wp-image-6689" src="/wp-content/uploads/2018/05/word-image-6095.png" srcset="/wp-content/uploads/2018/05/word-image-6095.png 664w, /wp-content/uploads/2018/05/word-image-6095-300x78.png 300w" sizes="(max-width: 664px) 100vw, 664px" /></p>
<p>d 将index.htm中的静态资源路劲进行修改</p>
<p><img loading="lazy" decoding="async" width="1021" height="316" class="wp-image-6691" src="/wp-content/uploads/2018/05/word-image-6097.png" srcset="/wp-content/uploads/2018/05/word-image-6097.png 1021w, /wp-content/uploads/2018/05/word-image-6097-300x93.png 300w, /wp-content/uploads/2018/05/word-image-6097-768x238.png 768w" sizes="(max-width: 1021px) 100vw, 1021px" /></p>
<p>路径修改完成之后,重新生成主页html页面,并且进行访问</p>
<p><img loading="lazy" decoding="async" width="1156" height="469" class="wp-image-6693" src="/wp-content/uploads/2018/05/word-image-6099.png" srcset="/wp-content/uploads/2018/05/word-image-6099.png 1156w, /wp-content/uploads/2018/05/word-image-6099-300x122.png 300w, /wp-content/uploads/2018/05/word-image-6099-768x312.png 768w, /wp-content/uploads/2018/05/word-image-6099-1024x415.png 1024w" sizes="(max-width: 1156px) 100vw, 1156px" /></p>
<h1><a id="post-6479-_dede_____"></a><a id="post-6479-_Toc256000054"></a>dede里面的标签</h1>
<h2><a id="post-6479-____"></a><a id="post-6479-_Toc256000055"></a>单标签</h2>
<p>语法格式：</p>
<p>{dede:标签名称 属性1=属性值1 /}</p>
<p>例如：</p>
<p>{dede:global.cfg_templets_skin/}</p>
<p>{dede:include filename=&#8221;head.html&#8221;/} 表示包含一个外部文件</p>
<p>注意：很多单标签以global开头的变量值都是在common.inc.php这个文件中进行定义的</p>
<p><img loading="lazy" decoding="async" width="1249" height="706" class="wp-image-6695" src="/wp-content/uploads/2018/05/word-image-6101.png" srcset="/wp-content/uploads/2018/05/word-image-6101.png 1249w, /wp-content/uploads/2018/05/word-image-6101-300x170.png 300w, /wp-content/uploads/2018/05/word-image-6101-768x434.png 768w, /wp-content/uploads/2018/05/word-image-6101-1024x579.png 1024w" sizes="(max-width: 1249px) 100vw, 1249px" /></p>
<h2><a id="post-6479-_____2"></a><a id="post-6479-_Toc256000056"></a>双标签</h2>
<p>语法格式：</p>
<p>{dede:标签名称 属性1=属性值1 属性2=属性值2}</p>
<p>[field:字段名称/]</p>
<p>{/dede:标签名称}</p>
<p>注意：</p>
<p>1、dede后面要有一个冒号：</p>
<p>2、标签名和属性之间要有空格</p>
<p>3、属性与属性之间也要有空格分开</p>
<p>4、结束双标签要以斜线打头</p>
<p>5、[field:字段名称/]里面的字段名称，一般是双标签所操作的表里面的字段名称</p>
<p>举个栗子：</p>
<p>{dede:channel type=&#8217;top&#8217; row=&#8217;10&#8217; }</p>
<p>&lt;li&gt;&lt;a href='[field:typeurl/]&#8217; [field:rel/]&gt;&lt;span&gt;[field:typename/]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;</p>
<p>{/dede:channel}</p>
<p>每一个双标签都对应一个解析文件，通过该解析文件完成标签到PHP代码的转换。</p>
<p>解析标签为sql语句的,文件位置</p>
<p><img loading="lazy" decoding="async" width="588" height="582" class="wp-image-6697" src="/wp-content/uploads/2018/05/word-image-6103.png" srcset="/wp-content/uploads/2018/05/word-image-6103.png 588w, /wp-content/uploads/2018/05/word-image-6103-300x297.png 300w" sizes="(max-width: 588px) 100vw, 588px" /></p>
<p>所有的前段使用的取数据的标签都在php中被解析了</p>
<h3><a id="post-6479-______"></a><a id="post-6479-_Toc256000057"></a>常用双标签</h3>
<p>channel 取出栏目数据的标签</p>
<p>arclist 取出文章的标签</p>
<p>channnelartlist 取出栏目和栏目下的所有数据</p>
<p>标签的定影位置:</p>
<p><img loading="lazy" decoding="async" width="1505" height="585" class="wp-image-6699" src="/wp-content/uploads/2018/05/word-image-6105.png" srcset="/wp-content/uploads/2018/05/word-image-6105.png 1505w, /wp-content/uploads/2018/05/word-image-6105-300x117.png 300w, /wp-content/uploads/2018/05/word-image-6105-768x299.png 768w, /wp-content/uploads/2018/05/word-image-6105-1024x398.png 1024w" sizes="(max-width: 1505px) 100vw, 1505px" /></p>
<h1><a id="post-6479-____________2"></a><a id="post-6479-_Toc256000058"></a>取出首页中的栏目数据</h1>
<p>使用channel标签取出数据库中的数据进行显示:</p>
<p>举个栗子：</p>
<p>{dede:channel type=&#8217;top&#8217; row=&#8217;10&#8217; }</p>
<p>&lt;li&gt;&lt;a href='[field:typeurl/]&#8217; [field:rel/]&gt;&lt;span&gt;[field:typename/]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;</p>
<p>{/dede:channel}</p>
<p>type:top表示取出顶级标签</p>
<p>row:10 取出十条数据</p>
<p>a 使用demo.html页面进行测试</p>
<p><img loading="lazy" decoding="async" width="1099" height="248" class="wp-image-6701" src="/wp-content/uploads/2018/05/word-image-6107.png" srcset="/wp-content/uploads/2018/05/word-image-6107.png 1099w, /wp-content/uploads/2018/05/word-image-6107-300x68.png 300w, /wp-content/uploads/2018/05/word-image-6107-768x173.png 768w, /wp-content/uploads/2018/05/word-image-6107-1024x231.png 1024w" sizes="(max-width: 1099px) 100vw, 1099px" /></p>
<p>输出的效果如下:</p>
<p><img loading="lazy" decoding="async" width="399" height="313" class="wp-image-6702" src="/wp-content/uploads/2018/05/word-image-6108.png" srcset="/wp-content/uploads/2018/05/word-image-6108.png 399w, /wp-content/uploads/2018/05/word-image-6108-300x235.png 300w" sizes="(max-width: 399px) 100vw, 399px" /></p>
<p>b 在首页index.htm中使用channel标签,输出顶级栏目</p>
<p><img loading="lazy" decoding="async" width="1317" height="314" class="wp-image-6704" src="/wp-content/uploads/2018/05/word-image-6110.png" srcset="/wp-content/uploads/2018/05/word-image-6110.png 1317w, /wp-content/uploads/2018/05/word-image-6110-300x72.png 300w, /wp-content/uploads/2018/05/word-image-6110-768x183.png 768w, /wp-content/uploads/2018/05/word-image-6110-1024x244.png 1024w" sizes="(max-width: 1317px) 100vw, 1317px" /></p>
<p>c 重新生成index.htm页面</p>
<p><img loading="lazy" decoding="async" width="1223" height="433" class="wp-image-6707" src="/wp-content/uploads/2018/05/word-image-6113.png" srcset="/wp-content/uploads/2018/05/word-image-6113.png 1223w, /wp-content/uploads/2018/05/word-image-6113-300x106.png 300w, /wp-content/uploads/2018/05/word-image-6113-768x272.png 768w, /wp-content/uploads/2018/05/word-image-6113-1024x363.png 1024w" sizes="(max-width: 1223px) 100vw, 1223px" /></p>
<p>查看效果:</p>
<p><img loading="lazy" decoding="async" width="820" height="325" class="wp-image-6709" src="/wp-content/uploads/2018/05/word-image-6115.png" srcset="/wp-content/uploads/2018/05/word-image-6115.png 820w, /wp-content/uploads/2018/05/word-image-6115-300x119.png 300w, /wp-content/uploads/2018/05/word-image-6115-768x304.png 768w" sizes="(max-width: 820px) 100vw, 820px" /></p>
<p>顶级栏目就显示完成</p>
<h1><a id="post-6479-_______________"></a><a id="post-6479-_Toc256000059"></a>取出“我的电影”栏目的子栏目</h1>
<p>这里我们还要使用channel标签</p>
<p><img loading="lazy" decoding="async" width="1137" height="292" class="wp-image-6711" src="/wp-content/uploads/2018/05/word-image-6117.png" srcset="/wp-content/uploads/2018/05/word-image-6117.png 1137w, /wp-content/uploads/2018/05/word-image-6117-300x77.png 300w, /wp-content/uploads/2018/05/word-image-6117-768x197.png 768w, /wp-content/uploads/2018/05/word-image-6117-1024x263.png 1024w" sizes="(max-width: 1137px) 100vw, 1137px" /></p>
<p>重新生成index.htm查看效果</p>
<p><img loading="lazy" decoding="async" width="1227" height="295" class="wp-image-6712" src="/wp-content/uploads/2018/05/word-image-6118.png" srcset="/wp-content/uploads/2018/05/word-image-6118.png 1227w, /wp-content/uploads/2018/05/word-image-6118-300x72.png 300w, /wp-content/uploads/2018/05/word-image-6118-768x185.png 768w, /wp-content/uploads/2018/05/word-image-6118-1024x246.png 1024w" sizes="(max-width: 1227px) 100vw, 1227px" /><br />
<img loading="lazy" decoding="async" width="1130" height="189" class="wp-image-6714" src="/wp-content/uploads/2018/05/word-image-6120.png" srcset="/wp-content/uploads/2018/05/word-image-6120.png 1130w, /wp-content/uploads/2018/05/word-image-6120-300x50.png 300w, /wp-content/uploads/2018/05/word-image-6120-768x128.png 768w, /wp-content/uploads/2018/05/word-image-6120-1024x171.png 1024w" sizes="(max-width: 1130px) 100vw, 1130px" /></p>
<p>多学一招:解析channel标签的使用,</p>
<p>每一个标签都是对应的一个PHP文件</p>
<p><img loading="lazy" decoding="async" width="814" height="656" class="wp-image-6716" src="/wp-content/uploads/2018/05/word-image-6122.png" srcset="/wp-content/uploads/2018/05/word-image-6122.png 814w, /wp-content/uploads/2018/05/word-image-6122-300x242.png 300w, /wp-content/uploads/2018/05/word-image-6122-768x619.png 768w" sizes="(max-width: 814px) 100vw, 814px" /></p>
<p>在channel.lib.php中打印出执行的sql语句</p>
<p><img loading="lazy" decoding="async" width="746" height="224" class="wp-image-6718" src="/wp-content/uploads/2018/05/word-image-6124.png" srcset="/wp-content/uploads/2018/05/word-image-6124.png 746w, /wp-content/uploads/2018/05/word-image-6124-300x90.png 300w" sizes="(max-width: 746px) 100vw, 746px" /></p>
<p>打印到的效果如下:</p>
<p><img loading="lazy" decoding="async" width="1536" height="188" class="wp-image-6720" src="/wp-content/uploads/2018/05/word-image-6126.png" srcset="/wp-content/uploads/2018/05/word-image-6126.png 1536w, /wp-content/uploads/2018/05/word-image-6126-300x37.png 300w, /wp-content/uploads/2018/05/word-image-6126-768x94.png 768w, /wp-content/uploads/2018/05/word-image-6126-1024x125.png 1024w" sizes="(max-width: 1536px) 100vw, 1536px" /></p>
<p>这里虽然调用了标签,但是他的后面确实跟着一个php文件</p>
<h1><a id="post-6479-__________________2"></a><a id="post-6479-_Toc256000060"></a>取出如下电影数据（首页专题电影）</h1>
<h2><a id="post-6479-___arclist____"></a><a id="post-6479-_Toc256000061"></a>使用arclist标签实现</h2>
<h3><a id="post-6479-_channelid__"></a><a id="post-6479-_Toc256000062"></a>channelid属性</h3>
<p>用来确定是哪个模型下面的数据信息以及确定哪个附加表进行关联</p>
<h3><a id="post-6479-_addfields__"></a><a id="post-6479-_Toc256000063"></a>addfields属性</h3>
<p>如果不使用addfields属性，则只会关联内容主表和栏目表进行数据查询，所以当我们需要查询附加表中的数据时就必须要使用addfields属性。这个属性标明附加表dede_addmovie需要使用的字段.</p>
<p>格式：addfields=“字段1,字段2,字段3”;//指定的是要从附加表中获取的字段信息列表。</p>
<p>注意：要想从附加表中取得数据那么就必须同时使用addfields属性和channelid属性</p>
<p>取出数据的代码：</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>/%e4%ba%8c%e6%ac%a1%e5%bc%80%e5%8f%91/6479.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>Linux（一）安装、命令、目录</title>
		<link>/linux/4970.html</link>
					<comments>/linux/4970.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 13:27:58 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[基本操作]]></category>
		<category><![CDATA[命令]]></category>
		<category><![CDATA[安装]]></category>
		<category><![CDATA[目录]]></category>
		<guid isPermaLink="false">/?p=4970</guid>

					<description><![CDATA[Linux1 Linux系统概述（了解） 操作系统类别 windows 微软公司（DOS是微软公司的第一个操作 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>Linux1</h1>
<h1>Linux系统概述（了解）</h1>
<h2>操作系统类别</h2>
<ol>
<li>
  windows  						微软公司（DOS是微软公司的第一个操作系统）
</li>
</ol>
<p>
  电影《硅谷传奇》
</p>
<p>
  5w美元收购                  -&gt;   收购程序员Q-DOS操作系统并优化更名为MS-DOS
</p>
<p>
  3美元获利                   -&gt;   和IBM合作授予使用权（每卖出）
</p>
<p>
  window 1.0（图形诞生）     -&gt;   据说乔布斯受骗（技术被偷）
</p>
<p>
  2）UNIX操作系统（尤尼斯） 1969年在贝尔实验室开发
</p>
<p>
  3）Mac OS						  	 苹果公司（基于Unix内核的图形化操作系统）
</p>
<p>
  4）linux							   一套免费使用和自由传播的类Unix操作系统
</p>
<p>
  Unix     收费的   只属于几个大的公司
</p>
<p>
  Linux    全宇宙的  不要钱，开源
</p>
<p>
  windows  微软的   收费的 不开源
</p>
<p>
  mac      苹果的   收费的 不开源
</p>
<h2>什么是Linux</h2>
<p>
  就是一个操作系统，和window、mac os一样都有用户管理功能、文件夹等功能，一般PHP服务器（有没显示器的主机）推荐使用Linux的centos版本，当然也有部分公司使用window2003、window2008
</p>
<h2>为什么要使用Linux操作系统</h2>
<p>
  特点：开源，免费，高效，稳定，安全。庞大的技术社区等。
</p>
<p>
  价格方面：Linux免费、开源，windows收费
</p>
<p>
  性能方面：Linux系统非常稳定、安全，windows易蓝屏，后期项目上线性能高于windows终极目的：搭建LAML和LNMP环境
</p>
<p>
  A指apache
</p>
<p>
  N指nginx
</p>
<p>
  服务器：没有显示器的主机（配置比普通电脑高很多）
</p>
<p>
  web服务器：就是计算机上的一个软件，用户输入网址可以查看指定文件内容，该软件监听80端。
</p>
<h2>4、Linux发展史</h2>
<p>
  1969年，在AT&amp;T的贝尔实验室的研究员Ken Thompson编写了UNIX的第一个版本
</p>
<p>
  1979年，AT&amp;T宣布了使UNIX商业化的计划
</p>
<p>
  1991年，Linux操作系统诞生（作者：Linus Torvalds 林纳斯·托瓦兹）
</p>
<p>
  美国移动运行商
</p>
<h2>Linux名字含义</h2>
<p>
  1）linux is not unix之意
</p>
<p>
  2）最初起名是一linus为名，但由于linus谦虚，故该为linux ，意指大家一起研究出来的
</p>
<p>
  吉祥物企鹅
</p>
<p>
  1）他去澳大利亚旅游的时候被澳大利亚国家动物园的企鹅咬了一口，这只企鹅在Linus的心里也是留下了非常深刻的印象，于是Linus在决定吉祥物的时候就想起这只小可爱.
</p>
<p>
  2）南极不属于任何国家，特显开源的精神.
</p>
<h2>Linux主要发行版本</h2>
<p>
  Red Hat		商业公司维护的发行版本代表，最著名的Linux版本
</p>
<p>
  CentOS6.x  最新的centos 7 基于Red Hat扩展，大部分PHP服务器的选择
</p>
<p>
  Debian						社区组织维护的发行版本代表
</p>
<p>
  Ubuntu（乌班图）	   桌面应用为主基于Debian扩展
</p>
<p>
  BackTrack5（BT5）    黑客圈比较出名的，可用于渗透攻击
</p>
<p>
  &#8230;..
</p>
<p><img loading="lazy" decoding="async" width="815" height="460" src="/wp-content/uploads/2018/05/word-image-4485.png" class="wp-image-4971" srcset="/wp-content/uploads/2018/05/word-image-4485.png 815w, /wp-content/uploads/2018/05/word-image-4485-300x169.png 300w, /wp-content/uploads/2018/05/word-image-4485-768x433.png 768w" sizes="(max-width: 815px) 100vw, 815px" /></p>
<h1>Linux安装</h1>
<h2>︴思考：如何安装操作系统？</h2>
<p>
  答：通过第三方软件，虚拟机（VMware 或  VirtualBox）
</p>
<h2>1、VMware安装和创建虚拟主机</h2>
<h3>1）什么是虚拟机</h3>
<p>
  虚拟机：就是一个软件
</p>
<p>
  功  能：可以创建N个完整的操作系统，每个操作系统都是一个完整的电脑
</p>
<h3>安装</h3>
<ul>
<li>
    安装步骤
  </li>
</ul>
<p>
  步骤1：双击下一步
</p>
<p><img loading="lazy" decoding="async" width="725" height="556" src="/wp-content/uploads/2018/05/word-image-4486.png" class="wp-image-4972" srcset="/wp-content/uploads/2018/05/word-image-4486.png 725w, /wp-content/uploads/2018/05/word-image-4486-300x230.png 300w" sizes="(max-width: 725px) 100vw, 725px" /></p>
<p>
  步骤2：同意协议下一步
</p>
<p><img loading="lazy" decoding="async" width="488" height="375" src="/wp-content/uploads/2018/05/word-image-4487.png" class="wp-image-4973" srcset="/wp-content/uploads/2018/05/word-image-4487.png 488w, /wp-content/uploads/2018/05/word-image-4487-300x231.png 300w" sizes="(max-width: 488px) 100vw, 488px" /></p>
<p>
  步骤3：选择典型安装
</p>
<p><img loading="lazy" decoding="async" width="494" height="378" src="/wp-content/uploads/2018/05/word-image-4488.png" class="wp-image-4974" srcset="/wp-content/uploads/2018/05/word-image-4488.png 494w, /wp-content/uploads/2018/05/word-image-4488-300x230.png 300w" sizes="(max-width: 494px) 100vw, 494px" /></p>
<p>
  步骤4：更改安装目录
</p>
<p><img loading="lazy" decoding="async" width="492" height="376" src="/wp-content/uploads/2018/05/word-image-4489.png" class="wp-image-4975" srcset="/wp-content/uploads/2018/05/word-image-4489.png 492w, /wp-content/uploads/2018/05/word-image-4489-300x229.png 300w" sizes="(max-width: 492px) 100vw, 492px" /></p>
<p>
  步骤5：创建快捷方式继续下一步
</p>
<p><img loading="lazy" decoding="async" width="493" height="376" src="/wp-content/uploads/2018/05/word-image-4490.png" class="wp-image-4976" srcset="/wp-content/uploads/2018/05/word-image-4490.png 493w, /wp-content/uploads/2018/05/word-image-4490-300x229.png 300w" sizes="(max-width: 493px) 100vw, 493px" /></p>
<p>
  步骤6：确定准备完毕安装，继续
</p>
<p><img loading="lazy" decoding="async" width="498" height="372" src="/wp-content/uploads/2018/05/word-image-4491.png" class="wp-image-4977" srcset="/wp-content/uploads/2018/05/word-image-4491.png 498w, /wp-content/uploads/2018/05/word-image-4491-300x224.png 300w" sizes="(max-width: 498px) 100vw, 498px" /></p>
<p>
  步骤7：完成安装
</p>
<p><img loading="lazy" decoding="async" width="498" height="379" src="/wp-content/uploads/2018/05/word-image-4492.png" class="wp-image-4978" srcset="/wp-content/uploads/2018/05/word-image-4492.png 498w, /wp-content/uploads/2018/05/word-image-4492-300x228.png 300w" sizes="(max-width: 498px) 100vw, 498px" /></p>
<p>
  步骤8：安装成功桌面出现快捷方式
</p>
<p><img loading="lazy" decoding="async" width="1032" height="558" src="/wp-content/uploads/2018/05/word-image-4493.png" class="wp-image-4979" srcset="/wp-content/uploads/2018/05/word-image-4493.png 1032w, /wp-content/uploads/2018/05/word-image-4493-300x162.png 300w, /wp-content/uploads/2018/05/word-image-4493-768x415.png 768w, /wp-content/uploads/2018/05/word-image-4493-1024x554.png 1024w" sizes="(max-width: 1032px) 100vw, 1032px" /></p>
<p>
  vmware10版本之后不支持32位操作系统
</p>
<p>
  安装成功会自动多出连个和虚拟机相关的网卡
</p>
<p><img loading="lazy" decoding="async" width="576" height="246" src="/wp-content/uploads/2018/05/word-image-4494.png" class="wp-image-4980" srcset="/wp-content/uploads/2018/05/word-image-4494.png 576w, /wp-content/uploads/2018/05/word-image-4494-300x128.png 300w" sizes="(max-width: 576px) 100vw, 576px" /></p>
<h3>创建CentOS虚拟主机</h3>
<p>
  安装虚拟机主机目的：
</p>
<p>
  说明：
</p>
<p>
  步驟1：双击图片，点击创建虚拟机（创建一个电脑，后期安装操作系统）
</p>
<p><img loading="lazy" decoding="async" width="874" height="461" src="/wp-content/uploads/2018/05/word-image-4495.png" class="wp-image-4981" srcset="/wp-content/uploads/2018/05/word-image-4495.png 874w, /wp-content/uploads/2018/05/word-image-4495-300x158.png 300w, /wp-content/uploads/2018/05/word-image-4495-768x405.png 768w" sizes="(max-width: 874px) 100vw, 874px" /></p>
<p>
  步骤2：选择典型，继续下一步
</p>
<p><img loading="lazy" decoding="async" width="817" height="475" src="/wp-content/uploads/2018/05/word-image-4496.png" class="wp-image-4982" srcset="/wp-content/uploads/2018/05/word-image-4496.png 817w, /wp-content/uploads/2018/05/word-image-4496-300x174.png 300w, /wp-content/uploads/2018/05/word-image-4496-768x447.png 768w" sizes="(max-width: 817px) 100vw, 817px" /></p>
<p>
  步骤3：稍后选择镜像文件
</p>
<p><img loading="lazy" decoding="async" width="497" height="422" src="/wp-content/uploads/2018/05/word-image-4497.png" class="wp-image-4983" srcset="/wp-content/uploads/2018/05/word-image-4497.png 497w, /wp-content/uploads/2018/05/word-image-4497-300x255.png 300w" sizes="(max-width: 497px) 100vw, 497px" /></p>
<p>
  步骤4：选择需要安装的操作系统类型
</p>
<p><img loading="lazy" decoding="async" width="482" height="422" src="/wp-content/uploads/2018/05/word-image-4498.png" class="wp-image-4984" srcset="/wp-content/uploads/2018/05/word-image-4498.png 482w, /wp-content/uploads/2018/05/word-image-4498-300x263.png 300w" sizes="(max-width: 482px) 100vw, 482px" /></p>
<p>
  步骤5：选择安装目录
</p>
<p><img loading="lazy" decoding="async" width="917" height="504" src="/wp-content/uploads/2018/05/word-image-4499.png" class="wp-image-4985" srcset="/wp-content/uploads/2018/05/word-image-4499.png 917w, /wp-content/uploads/2018/05/word-image-4499-300x165.png 300w, /wp-content/uploads/2018/05/word-image-4499-768x422.png 768w" sizes="(max-width: 917px) 100vw, 917px" /></p>
<p>
  步骤6：设置磁盘大小
</p>
<p><img loading="lazy" decoding="async" width="488" height="412" src="/wp-content/uploads/2018/05/word-image-4500.png" class="wp-image-4986" srcset="/wp-content/uploads/2018/05/word-image-4500.png 488w, /wp-content/uploads/2018/05/word-image-4500-300x253.png 300w" sizes="(max-width: 488px) 100vw, 488px" /></p>
<p>
  步骤7：清单，直接点击完成即可
</p>
<p><img loading="lazy" decoding="async" width="499" height="417" src="/wp-content/uploads/2018/05/word-image-4501.png" class="wp-image-4987" srcset="/wp-content/uploads/2018/05/word-image-4501.png 499w, /wp-content/uploads/2018/05/word-image-4501-300x251.png 300w" sizes="(max-width: 499px) 100vw, 499px" /></p>
<p>
  点击完成出现的效果
</p>
<p><img loading="lazy" decoding="async" width="477" height="482" src="/wp-content/uploads/2018/05/word-image-4502.png" class="wp-image-4988" srcset="/wp-content/uploads/2018/05/word-image-4502.png 477w, /wp-content/uploads/2018/05/word-image-4502-297x300.png 297w" sizes="(max-width: 477px) 100vw, 477px" /></p>
<p>
  win8或win10 必须以管理员身份运行
</p>
<h2>2、安装Linux（Centos操作系统）</h2>
<p>
  步骤1：选择安装光盘（镜像）  和   网络适配器
</p>
<p><img loading="lazy" decoding="async" width="457" height="524" src="/wp-content/uploads/2018/05/word-image-4503.png" class="wp-image-4989" srcset="/wp-content/uploads/2018/05/word-image-4503.png 457w, /wp-content/uploads/2018/05/word-image-4503-262x300.png 262w" sizes="(max-width: 457px) 100vw, 457px" /><br />
<img loading="lazy" decoding="async" width="720" height="658" src="/wp-content/uploads/2018/05/word-image-4504.png" class="wp-image-4990" srcset="/wp-content/uploads/2018/05/word-image-4504.png 720w, /wp-content/uploads/2018/05/word-image-4504-300x274.png 300w" sizes="(max-width: 720px) 100vw, 720px" /><br />
<img loading="lazy" decoding="async" width="723" height="667" src="/wp-content/uploads/2018/05/word-image-4505.png" class="wp-image-4991" srcset="/wp-content/uploads/2018/05/word-image-4505.png 723w, /wp-content/uploads/2018/05/word-image-4505-300x277.png 300w" sizes="(max-width: 723px) 100vw, 723px" /></p>
<p>
  步骤2:开启虚拟机
</p>
<p><img loading="lazy" decoding="async" width="256" height="230" src="/wp-content/uploads/2018/05/word-image-4506.png" class="wp-image-4992" /></p>
<p>
  步骤3：单击开始，执行安装
</p>
<p><img loading="lazy" decoding="async" width="666" height="453" src="/wp-content/uploads/2018/05/word-image-4507.png" class="wp-image-4993" srcset="/wp-content/uploads/2018/05/word-image-4507.png 666w, /wp-content/uploads/2018/05/word-image-4507-300x204.png 300w, /wp-content/uploads/2018/05/word-image-4507-220x150.png 220w" sizes="(max-width: 666px) 100vw, 666px" /></p>
<p>
  步骤4：跳过光盘检测，点击Skip
</p>
<p><img loading="lazy" decoding="async" width="721" height="404" src="/wp-content/uploads/2018/05/word-image-4508.png" class="wp-image-4994" srcset="/wp-content/uploads/2018/05/word-image-4508.png 721w, /wp-content/uploads/2018/05/word-image-4508-300x168.png 300w" sizes="(max-width: 721px) 100vw, 721px" /></p>
<p>
  脚下留心：如果出现下图页面则表示内存不够（针对于32位操作系统内存&lt;=4G内存的同学，前期安装设置1G安装完毕后改为512M）
</p>
<p><img loading="lazy" decoding="async" width="600" height="321" src="/wp-content/uploads/2018/05/word-image-4509.png" class="wp-image-4995" srcset="/wp-content/uploads/2018/05/word-image-4509.png 600w, /wp-content/uploads/2018/05/word-image-4509-300x161.png 300w" sizes="(max-width: 600px) 100vw, 600px" /></p>
<p>
  步骤5：选择显示安装语言‘中文简体’
</p>
<p><img loading="lazy" decoding="async" width="813" height="560" src="/wp-content/uploads/2018/05/word-image-4510.png" class="wp-image-4996" srcset="/wp-content/uploads/2018/05/word-image-4510.png 813w, /wp-content/uploads/2018/05/word-image-4510-300x207.png 300w, /wp-content/uploads/2018/05/word-image-4510-768x529.png 768w" sizes="(max-width: 813px) 100vw, 813px" /></p>
<p>
  步骤6：选择语言
</p>
<p><img loading="lazy" decoding="async" width="806" height="555" src="/wp-content/uploads/2018/05/word-image-4511.png" class="wp-image-4997" srcset="/wp-content/uploads/2018/05/word-image-4511.png 806w, /wp-content/uploads/2018/05/word-image-4511-300x207.png 300w, /wp-content/uploads/2018/05/word-image-4511-768x529.png 768w, /wp-content/uploads/2018/05/word-image-4511-220x150.png 220w" sizes="(max-width: 806px) 100vw, 806px" /></p>
<p>
  步骤7：选择键盘
</p>
<p><img loading="lazy" decoding="async" width="805" height="546" src="/wp-content/uploads/2018/05/word-image-4512.png" class="wp-image-4998" srcset="/wp-content/uploads/2018/05/word-image-4512.png 805w, /wp-content/uploads/2018/05/word-image-4512-300x203.png 300w, /wp-content/uploads/2018/05/word-image-4512-768x521.png 768w, /wp-content/uploads/2018/05/word-image-4512-220x150.png 220w" sizes="(max-width: 805px) 100vw, 805px" /></p>
<p>
  步骤8：选择设备
</p>
<p><img loading="lazy" decoding="async" width="798" height="569" src="/wp-content/uploads/2018/05/word-image-4513.png" class="wp-image-4999" srcset="/wp-content/uploads/2018/05/word-image-4513.png 798w, /wp-content/uploads/2018/05/word-image-4513-300x214.png 300w, /wp-content/uploads/2018/05/word-image-4513-768x548.png 768w" sizes="(max-width: 798px) 100vw, 798px" /><br />
<img loading="lazy" decoding="async" width="496" height="355" src="/wp-content/uploads/2018/05/word-image-4514.png" class="wp-image-5000" srcset="/wp-content/uploads/2018/05/word-image-4514.png 496w, /wp-content/uploads/2018/05/word-image-4514-300x215.png 300w" sizes="(max-width: 496px) 100vw, 496px" /><br />
<img loading="lazy" decoding="async" width="802" height="594" src="/wp-content/uploads/2018/05/word-image-4515.png" class="wp-image-5001" srcset="/wp-content/uploads/2018/05/word-image-4515.png 802w, /wp-content/uploads/2018/05/word-image-4515-300x222.png 300w, /wp-content/uploads/2018/05/word-image-4515-768x569.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></p>
<p>
  步骤9：选择时区
</p>
<p><img loading="lazy" decoding="async" width="810" height="596" src="/wp-content/uploads/2018/05/word-image-4516.png" class="wp-image-5002" srcset="/wp-content/uploads/2018/05/word-image-4516.png 810w, /wp-content/uploads/2018/05/word-image-4516-300x221.png 300w, /wp-content/uploads/2018/05/word-image-4516-768x565.png 768w" sizes="(max-width: 810px) 100vw, 810px" /></p>
<p>
  步骤10：设置root管理员密码
</p>
<p><img loading="lazy" decoding="async" width="811" height="584" src="/wp-content/uploads/2018/05/word-image-4517.png" class="wp-image-5003" srcset="/wp-content/uploads/2018/05/word-image-4517.png 811w, /wp-content/uploads/2018/05/word-image-4517-300x216.png 300w, /wp-content/uploads/2018/05/word-image-4517-768x553.png 768w" sizes="(max-width: 811px) 100vw, 811px" /></p>
<p>
  步骤11：选择安装类型
</p>
<p><img loading="lazy" decoding="async" width="580" height="443" src="/wp-content/uploads/2018/05/word-image-4518.png" class="wp-image-5004" srcset="/wp-content/uploads/2018/05/word-image-4518.png 580w, /wp-content/uploads/2018/05/word-image-4518-300x229.png 300w" sizes="(max-width: 580px) 100vw, 580px" /></p>
<p>
  步骤12：选择安装方式
</p>
<p><img loading="lazy" decoding="async" width="791" height="582" src="/wp-content/uploads/2018/05/word-image-4519.png" class="wp-image-5005" srcset="/wp-content/uploads/2018/05/word-image-4519.png 791w, /wp-content/uploads/2018/05/word-image-4519-300x221.png 300w, /wp-content/uploads/2018/05/word-image-4519-768x565.png 768w" sizes="(max-width: 791px) 100vw, 791px" /><br />
<img loading="lazy" decoding="async" width="802" height="605" src="/wp-content/uploads/2018/05/word-image-4520.png" class="wp-image-5006" srcset="/wp-content/uploads/2018/05/word-image-4520.png 802w, /wp-content/uploads/2018/05/word-image-4520-300x226.png 300w, /wp-content/uploads/2018/05/word-image-4520-768x579.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></p>
<p>
  步骤13：等待安装成功后 -&gt;  重启 -&gt; 配置
</p>
<p><img loading="lazy" decoding="async" width="954" height="643" src="/wp-content/uploads/2018/05/word-image-4521.png" class="wp-image-5007" srcset="/wp-content/uploads/2018/05/word-image-4521.png 954w, /wp-content/uploads/2018/05/word-image-4521-300x202.png 300w, /wp-content/uploads/2018/05/word-image-4521-768x518.png 768w" sizes="(max-width: 954px) 100vw, 954px" /><br />
<img loading="lazy" decoding="async" width="790" height="437" src="/wp-content/uploads/2018/05/word-image-4522.png" class="wp-image-5008" srcset="/wp-content/uploads/2018/05/word-image-4522.png 790w, /wp-content/uploads/2018/05/word-image-4522-300x166.png 300w, /wp-content/uploads/2018/05/word-image-4522-768x425.png 768w" sizes="(max-width: 790px) 100vw, 790px" /></p>
<p>
  步骤14：重启继续配置
</p>
<p><img loading="lazy" decoding="async" width="835" height="483" src="/wp-content/uploads/2018/05/word-image-4523.png" class="wp-image-5009" srcset="/wp-content/uploads/2018/05/word-image-4523.png 835w, /wp-content/uploads/2018/05/word-image-4523-300x174.png 300w, /wp-content/uploads/2018/05/word-image-4523-768x444.png 768w" sizes="(max-width: 835px) 100vw, 835px" /><br />
<img loading="lazy" decoding="async" width="1051" height="301" src="/wp-content/uploads/2018/05/word-image-4524.png" class="wp-image-5010" srcset="/wp-content/uploads/2018/05/word-image-4524.png 1051w, /wp-content/uploads/2018/05/word-image-4524-300x86.png 300w, /wp-content/uploads/2018/05/word-image-4524-768x220.png 768w, /wp-content/uploads/2018/05/word-image-4524-1024x293.png 1024w" sizes="(max-width: 1051px) 100vw, 1051px" /><br />
<img loading="lazy" decoding="async" width="1141" height="485" src="/wp-content/uploads/2018/05/word-image-4525.png" class="wp-image-5011" srcset="/wp-content/uploads/2018/05/word-image-4525.png 1141w, /wp-content/uploads/2018/05/word-image-4525-300x128.png 300w, /wp-content/uploads/2018/05/word-image-4525-768x326.png 768w, /wp-content/uploads/2018/05/word-image-4525-1024x435.png 1024w" sizes="(max-width: 1141px) 100vw, 1141px" /><br />
<img loading="lazy" decoding="async" width="1034" height="529" src="/wp-content/uploads/2018/05/word-image-4526.png" class="wp-image-5012" srcset="/wp-content/uploads/2018/05/word-image-4526.png 1034w, /wp-content/uploads/2018/05/word-image-4526-300x153.png 300w, /wp-content/uploads/2018/05/word-image-4526-768x393.png 768w, /wp-content/uploads/2018/05/word-image-4526-1024x524.png 1024w" sizes="(max-width: 1034px) 100vw, 1034px" /><br />
<img loading="lazy" decoding="async" width="970" height="563" src="/wp-content/uploads/2018/05/word-image-4527.png" class="wp-image-5013" srcset="/wp-content/uploads/2018/05/word-image-4527.png 970w, /wp-content/uploads/2018/05/word-image-4527-300x174.png 300w, /wp-content/uploads/2018/05/word-image-4527-768x446.png 768w" sizes="(max-width: 970px) 100vw, 970px" /><br />
<img loading="lazy" decoding="async" width="1043" height="504" src="/wp-content/uploads/2018/05/word-image-4528.png" class="wp-image-5014" srcset="/wp-content/uploads/2018/05/word-image-4528.png 1043w, /wp-content/uploads/2018/05/word-image-4528-300x145.png 300w, /wp-content/uploads/2018/05/word-image-4528-768x371.png 768w, /wp-content/uploads/2018/05/word-image-4528-1024x495.png 1024w" sizes="(max-width: 1043px) 100vw, 1043px" /><br />
<img loading="lazy" decoding="async" width="744" height="493" src="/wp-content/uploads/2018/05/word-image-4529.png" class="wp-image-5015" srcset="/wp-content/uploads/2018/05/word-image-4529.png 744w, /wp-content/uploads/2018/05/word-image-4529-300x199.png 300w" sizes="(max-width: 744px) 100vw, 744px" /></p>
<p>
  步骤15：安装成功
</p>
<p><img loading="lazy" decoding="async" width="1075" height="562" src="/wp-content/uploads/2018/05/word-image-4530.png" class="wp-image-5016" srcset="/wp-content/uploads/2018/05/word-image-4530.png 1075w, /wp-content/uploads/2018/05/word-image-4530-300x157.png 300w, /wp-content/uploads/2018/05/word-image-4530-768x402.png 768w, /wp-content/uploads/2018/05/word-image-4530-1024x535.png 1024w" sizes="(max-width: 1075px) 100vw, 1075px" /></p>
<h2>3、虚拟主机使用</h2>
<h3>1）退出虚拟机返回win</h3>
<p>
  ctrl + alt
</p>
<h3>2）重新启动虚拟机/开启虚拟机/关闭虚拟机</h3>
<p><img loading="lazy" decoding="async" width="232" height="215" src="/wp-content/uploads/2018/05/word-image-4531.png" class="wp-image-5017" /></p>
<h3>3）显示隐藏侧边栏</h3>
<p><img loading="lazy" decoding="async" width="480" height="504" src="/wp-content/uploads/2018/05/word-image-4532.png" class="wp-image-5018" srcset="/wp-content/uploads/2018/05/word-image-4532.png 480w, /wp-content/uploads/2018/05/word-image-4532-286x300.png 286w" sizes="(max-width: 480px) 100vw, 480px" /></p>
<h3>4）快照</h3>
<p>
  就是把当前状态拍个照片，避免后期学习不小心删掉核心文件导致系统崩溃重需要重新安装，如果崩溃前拍了照片就可以回到照片状态。
</p>
<p><img loading="lazy" decoding="async" width="813" height="377" src="/wp-content/uploads/2018/05/word-image-4533.png" class="wp-image-5019" srcset="/wp-content/uploads/2018/05/word-image-4533.png 813w, /wp-content/uploads/2018/05/word-image-4533-300x139.png 300w, /wp-content/uploads/2018/05/word-image-4533-768x356.png 768w" sizes="(max-width: 813px) 100vw, 813px" /><br />
<img loading="lazy" decoding="async" width="838" height="604" src="/wp-content/uploads/2018/05/word-image-4534.png" class="wp-image-5020" srcset="/wp-content/uploads/2018/05/word-image-4534.png 838w, /wp-content/uploads/2018/05/word-image-4534-300x216.png 300w, /wp-content/uploads/2018/05/word-image-4534-768x554.png 768w" sizes="(max-width: 838px) 100vw, 838px" /></p>
<h1><a id="post-4970-_Toc448764483"></a>三、Linux目录介绍</h1>
<ul>
<li>
    目的：了解目录有利于后期学习知道目录作用方便管理
  </li>
<li>
    说明：
  </li>
</ul>
<ol>
<li>
  Linux只有一个目录叫根目录，用“/”表示（注：可以理解为win只有一个磁盘）
</li>
<li>
  了解
</li>
</ol>
<p>
  /boot  系统核心文件
</p>
<p>
  /lib   系统库文件
</p>
<p>
  /proc  内存映射目录（可以查看内存相关信息）
</p>
<ol>
<li>
  重要
</li>
</ol>
<p>
  / 		根目录（相当于win的c盘、d盘，脚下留心：linux只有一个根目录）
</p>
<p>
  /tmp   临时文件存放目录
</p>
<p>
  /usr   默认程序安装目录
</p>
<p>
  /bin   指令目录，可以给超级管理员和普通用户使用，如：ls、clear等
</p>
<p>
  /sbin  指令目录，仅给超级管理员使用，如：init、shutdown等
</p>
<p>
  /dev   设备目录，linux中硬件皆文件，如何/dev/cdrom光盘文件
</p>
<p>
  /media 挂载目录,将U盘、光驱等文件数据挂载到该目录中（系统自动识别）
</p>
<p>
  /mnt    挂载目录,将U盘、光驱等文件数据挂载到该目录中（临时<strong>挂载</strong>）/etc
</p>
<p>
  /root   超级管理员家目录（后期超级管理员登录会自动到该目录中）
</p>
<p>
  /home   普通用户家目录
</p>
<p>
       注：当通过指令/命令创建用户时会自动在/home目录下创建同名文件夹
</p>
<p>
  /etc/selinux 增加系统安全（注：部门软件安装会受到影响）
</p>
</p>
<h1>四、常用Linux命令（重点）</h1>
<h2>1、操作</h2>
<p>
  基本使用：在桌面任意空白区域 -&gt; 鼠标右击 -&gt; 选择在终端打开即可
</p>
<p><img loading="lazy" decoding="async" width="671" height="243" src="/wp-content/uploads/2018/05/word-image-4535.png" class="wp-image-5021" srcset="/wp-content/uploads/2018/05/word-image-4535.png 671w, /wp-content/uploads/2018/05/word-image-4535-300x109.png 300w" sizes="(max-width: 671px) 100vw, 671px" /></p>
<h2><a id="post-4970-_Toc448764488"></a><a id="post-4970-_Toc440642436"></a>2、【pwd】查看当前位置</h2>
<p><img loading="lazy" decoding="async" width="234" height="114" src="/wp-content/uploads/2018/05/word-image-4536.png" class="wp-image-5022" /></p>
<h2>3、【ls】查看当前位置的所有内容</h2>
<p>
  shell&gt; ls 	#查看当前位置内容
</p>
<p>
  shell&gt; ls -a #查看当前位置内容（包含隐藏文件）  a是all缩写
</p>
<p>
  shell&gt; ls -l #查看当前位置内容（列表形式查看）	list 简写l
</p>
<p><img loading="lazy" decoding="async" width="744" height="369" src="/wp-content/uploads/2018/05/word-image-4537.png" class="wp-image-5023" srcset="/wp-content/uploads/2018/05/word-image-4537.png 744w, /wp-content/uploads/2018/05/word-image-4537-300x149.png 300w" sizes="(max-width: 744px) 100vw, 744px" /></p>
<p>
  在linux参数前面一般都谢-，多个参数只用一个-，也就是说既列表展示又显示所有文件则命令
</p>
<p>
  为【ls -al】
</p>
<h2><a id="post-4970-_Toc440642438"></a><a id="post-4970-_Toc448764490"></a>4、【cd】切换目录</h2>
<p>
  shell&gt; cd .. #进入上一级目录
</p>
<p>
  shell&gt; cd ../../#进入上上一级目录
</p>
<p>
  shell&gt; cd /目录名/目录名 #通过绝对路径形式进入目录（<strong>推荐</strong>）
</p>
<p><img loading="lazy" decoding="async" width="294" height="249" src="/wp-content/uploads/2018/05/word-image-4538.png" class="wp-image-5024" /></p>
<h2>5、【clear】清屏</h2>
<h2>6、【history】查看历史命令</h2>
<p><img loading="lazy" decoding="async" width="426" height="359" src="/wp-content/uploads/2018/05/word-image-4539.png" class="wp-image-5025" srcset="/wp-content/uploads/2018/05/word-image-4539.png 426w, /wp-content/uploads/2018/05/word-image-4539-300x253.png 300w" sizes="(max-width: 426px) 100vw, 426px" /></p>
<h2><a id="post-4970-_Toc448764493"></a><a id="post-4970-_Toc440642441"></a>7、【shutdown】关机重启命令</h2>
<p>
  语法：shutdown 参数  时间/分钟
</p>
<p>
  参数：
</p>
<p>
  关机  shutdown -h 数字   （注：shut  关闭缩写）
</p>
<p>
  重启  shutdown -r  数字   （注：restart）
</p>
<p>
  取消  shutdown -c  数字   （注：cancel）
</p>
<p><img loading="lazy" decoding="async" width="929" height="364" src="/wp-content/uploads/2018/05/word-image-4540.png" class="wp-image-5026" srcset="/wp-content/uploads/2018/05/word-image-4540.png 929w, /wp-content/uploads/2018/05/word-image-4540-300x118.png 300w, /wp-content/uploads/2018/05/word-image-4540-768x301.png 768w" sizes="(max-width: 929px) 100vw, 929px" /></p>
<p>
  多学二招：
</p>
<p>
  1）基本不用，因为后期去阿里云买服务器后台控制器面板管理服务器
</p>
<p>
  2）init 0  关机
</p>
<p>
  3）init 6  重启
</p>
<h2>8、用户切换（switch user）</h2>
<p>
  shell&gt;  su 用户名
</p>
<p>
  超级管理员切换普通用户不用密码
</p>
<p>
  普通用户切换超级管理员回车时候需要密码
</p>
<p><img loading="lazy" decoding="async" width="508" height="374" src="/wp-content/uploads/2018/05/word-image-4541.png" class="wp-image-5027" srcset="/wp-content/uploads/2018/05/word-image-4541.png 508w, /wp-content/uploads/2018/05/word-image-4541-300x221.png 300w" sizes="(max-width: 508px) 100vw, 508px" /></p>
<h1>五、目录操作（重点）</h1>
<h2>创建（制造 make 文件夹 dir）</h2>
<p>
  语法：mkdir -p 路径及目录名
</p>
<p>
  说明：想要一次性创建多个必须增加参数 -p
</p>
<p>
  Linux中递归一般是【-r】参数，但是创建文件夹比较特殊单独记【-p】
</p>
<p><img loading="lazy" decoding="async" width="651" height="448" src="/wp-content/uploads/2018/05/word-image-4542.png" class="wp-image-5028" srcset="/wp-content/uploads/2018/05/word-image-4542.png 651w, /wp-content/uploads/2018/05/word-image-4542-300x206.png 300w, /wp-content/uploads/2018/05/word-image-4542-220x150.png 220w" sizes="(max-width: 651px) 100vw, 651px" /></p>
<h2>移动（修改 move）</h2>
<p>
  语法：mv  旧文件/目录  新文件/目录
</p>
<p>
  新文件或目录存在：移动，反之移动并更名
</p>
<p>
  【准备】
</p>
<p>
  mkdir -p /a
</p>
<p>
  mkdir -p /a2
</p>
<p>
  touch /a/1.php  #通过touch命令在a目录下创建1.php文件
</p>
<p>
  【文件】
</p>
<p><img loading="lazy" decoding="async" width="796" height="396" src="/wp-content/uploads/2018/05/word-image-4543.png" class="wp-image-5029" srcset="/wp-content/uploads/2018/05/word-image-4543.png 796w, /wp-content/uploads/2018/05/word-image-4543-300x149.png 300w, /wp-content/uploads/2018/05/word-image-4543-768x382.png 768w" sizes="(max-width: 796px) 100vw, 796px" /></p>
<p>
  【文件夹/目录】
</p>
<p><img loading="lazy" decoding="async" width="1101" height="463" src="/wp-content/uploads/2018/05/word-image-4544.png" class="wp-image-5030" srcset="/wp-content/uploads/2018/05/word-image-4544.png 1101w, /wp-content/uploads/2018/05/word-image-4544-300x126.png 300w, /wp-content/uploads/2018/05/word-image-4544-768x323.png 768w, /wp-content/uploads/2018/05/word-image-4544-1024x431.png 1024w" sizes="(max-width: 1101px) 100vw, 1101px" /></p>
<h2>复制（拷贝）  copy</h2>
<p>
  语法：cp -r 旧文件/目录  新文件/目录
</p>
<p>
  新文件或目录存在：复制，反之复制并更名
</p>
<p>
  【准备】
</p>
<p>
  mkdir -p /a
</p>
<p>
  mkdir -p /a2
</p>
<p>
  touch /a/1.php  #通过touch命令在a目录下创建1.php文件
</p>
<p>
  【文件】
</p>
<p><img loading="lazy" decoding="async" width="695" height="352" src="/wp-content/uploads/2018/05/word-image-4545.png" class="wp-image-5031" srcset="/wp-content/uploads/2018/05/word-image-4545.png 695w, /wp-content/uploads/2018/05/word-image-4545-300x152.png 300w" sizes="(max-width: 695px) 100vw, 695px" /></p>
<p>
  【文件夹/目录】
</p>
<p><img loading="lazy" decoding="async" width="891" height="435" src="/wp-content/uploads/2018/05/word-image-4546.png" class="wp-image-5032" srcset="/wp-content/uploads/2018/05/word-image-4546.png 891w, /wp-content/uploads/2018/05/word-image-4546-300x146.png 300w, /wp-content/uploads/2018/05/word-image-4546-768x375.png 768w" sizes="(max-width: 891px) 100vw, 891px" /></p>
<p>
  mv默认有递归特性，但是cp没有
</p>
<h2>删除（remove）</h2>
<p>
  语法：rm -rf  路基及文件
</p>
<p>
  说明：-r 递归  -f强制执行
</p>
<p><img loading="lazy" decoding="async" width="867" height="448" src="/wp-content/uploads/2018/05/word-image-4547.png" class="wp-image-5033" srcset="/wp-content/uploads/2018/05/word-image-4547.png 867w, /wp-content/uploads/2018/05/word-image-4547-300x155.png 300w, /wp-content/uploads/2018/05/word-image-4547-768x397.png 768w" sizes="(max-width: 867px) 100vw, 867px" /></p>
<h1>上午总结</h1>
<p>
  操作系统分类：四类
</p>
<p>
  window
</p>
<p>
  uninx
</p>
<p>
  mac os
</p>
<p>
  linux
</p>
<p>
  什么是linux：就是操作系统，一般PHP项目服务器推荐使用linux的centos系列（win2003和win2008）
</p>
<p>
  虚拟机：就一个软件，可以操作n个操作系统
</p>
<p>
  常用命令
</p>
<p>
  常看当前位置：pwd
</p>
<p>
  当前位置内容：ls
</p>
<p>
  清屏：clear
</p>
<p>
  进入目录：cd  路径（推荐使用绝对路径）
</p>
<p>
  切换用户：su 用户名
</p>
<p>
  历史命令：history
</p>
<p>
  关机重启命令：shutdown 参数  时间/min （-h shut  -r restart  -c  cancel）
</p>
<p>
  目录操作：
</p>
<p>
  创建文件夹：mkdir -p 路径及目录名
</p>
<p>
  移动文件夹：mv 旧文件/目录 新文件/目录 （脚下留心：新文件或目录存在：移动，反之移动并更名）
</p>
<p>
  复制（拷贝）：cp -r  旧文件/目录  新文件/目录
</p>
<p>
  删除：rm -rf 路径及文件/目录名
</p>
<h1>六、文件操作（重点）</h1>
<h2>查看</h2>
<p>
  shell&gt;  cat 路径及文件名
</p>
<p>
  shell&gt;  less 路径及文件名  （查看一部分按回车查看更多，q退出）  quit
</p>
<p>
  shell&gt;  more 路径及文件名 （查看一部分按回车查看更多，q退出）  quit
</p>
<p><img loading="lazy" decoding="async" width="451" height="143" src="/wp-content/uploads/2018/05/word-image-4548.png" class="wp-image-5034" srcset="/wp-content/uploads/2018/05/word-image-4548.png 451w, /wp-content/uploads/2018/05/word-image-4548-300x95.png 300w" sizes="(max-width: 451px) 100vw, 451px" /></p>
<h2>创建</h2>
<h3>1）方法1</h3>
<p>
  语法：touch  路径文件名（基本不用）
</p>
<p><img loading="lazy" decoding="async" width="320" height="197" src="/wp-content/uploads/2018/05/word-image-4549.png" class="wp-image-5035" srcset="/wp-content/uploads/2018/05/word-image-4549.png 320w, /wp-content/uploads/2018/05/word-image-4549-300x185.png 300w" sizes="(max-width: 320px) 100vw, 320px" /></p>
<h3>方法2</h3>
<p>
  语法：vi  路径及文件
</p>
<p>
  文件存在-修改，不存在-创建
</p>
<p>
  步骤1：vi  /php12/test.php
</p>
<p>
  步骤2：按【i】键左下角会出现insert标识这时候可以输入内容
</p>
<p>
  步骤3：按【esc】这时候左下角insert标识消失，按键盘【:wq】
</p>
<h2>给文件追加内容</h2>
<p>
  语法（覆盖）： echo 内容 &gt; 路径及文件
</p>
<p>
  语法（追加）： echo 内容 &gt;&gt; 路径及文件
</p>
<p><img loading="lazy" decoding="async" width="586" height="373" src="/wp-content/uploads/2018/05/word-image-4550.png" class="wp-image-5036" srcset="/wp-content/uploads/2018/05/word-image-4550.png 586w, /wp-content/uploads/2018/05/word-image-4550-300x191.png 300w" sizes="(max-width: 586px) 100vw, 586px" /></p>
<p>
  基本不用，一般写shell脚本使用
</p>
<h1>七、网卡设置（重要）</h1>
<h2>1、window网卡</h2>
<h3>1）说明（禁用会怎么样？）</h3>
<ul>
<li>
    不可以相互飞秋发消息
  </li>
<li>
    不可以访问其他人的apache站点
  </li>
<li>
    等
  </li>
</ul>
<h3>修改</h3>
<p><img loading="lazy" decoding="async" width="1124" height="728" src="/wp-content/uploads/2018/05/word-image-4551.png" class="wp-image-5037" srcset="/wp-content/uploads/2018/05/word-image-4551.png 1124w, /wp-content/uploads/2018/05/word-image-4551-300x194.png 300w, /wp-content/uploads/2018/05/word-image-4551-768x497.png 768w, /wp-content/uploads/2018/05/word-image-4551-1024x663.png 1024w" sizes="(max-width: 1124px) 100vw, 1124px" /></p>
<h3>远程访问（了解）</h3>
<p>
  步骤1：win键 + r  输入 mstsc
</p>
<p><img loading="lazy" decoding="async" width="375" height="231" src="/wp-content/uploads/2018/05/word-image-4552.png" class="wp-image-5038" srcset="/wp-content/uploads/2018/05/word-image-4552.png 375w, /wp-content/uploads/2018/05/word-image-4552-300x185.png 300w" sizes="(max-width: 375px) 100vw, 375px" /></p>
<p>
  步骤2：回车弹出远程连接窗口可以连接window服务器（该软件只支持win产品）
</p>
<p><img loading="lazy" decoding="async" width="459" height="335" src="/wp-content/uploads/2018/05/word-image-4553.png" class="wp-image-5039" srcset="/wp-content/uploads/2018/05/word-image-4553.png 459w, /wp-content/uploads/2018/05/word-image-4553-300x219.png 300w" sizes="(max-width: 459px) 100vw, 459px" /></p>
<h2>Linux网卡</h2>
<h3>1）说明</h3>
<ul>
<li>
    Linux硬件皆文件
  </li>
<li>
    第一个网卡 /etc/sysconfig/network-scripts/ifcfg-eth0
  </li>
<li>
    第一个网卡 /etc/sysconfig/network-scripts/ifcfg-eth1
  </li>
</ul>
<h3>修改</h3>
<ul>
<li>
    查看IP命令：ifconfig
  </li>
<li>
       重启命令：service network restart/stop/start
  </li>
<li>
       检    查：ping  ip地址
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="612" height="432" src="/wp-content/uploads/2018/05/word-image-4554.png" class="wp-image-5040" srcset="/wp-content/uploads/2018/05/word-image-4554.png 612w, /wp-content/uploads/2018/05/word-image-4554-300x212.png 300w" sizes="(max-width: 612px) 100vw, 612px" /></p>
<ul>
<li>
    自动
  </li>
</ul>
<p>
  1）将虚拟机网络适配器设置为：桥接模式 【虚拟机 -&gt; 设置 -&gt; 网络适配器 （选择桥接） 】
</p>
<p>
  2）配置网卡
</p>
<p>
     步骤1：【打开网卡】vi  /etc/sysconfig/network-scripts/ifcfg-eth0
</p>
<p>
     步骤2：配置网卡， 按键盘“i”键修改网卡信息
</p>
<p>
     步骤3：【修改内容如下】
</p>
<p>
      DEVICE=eth0     # eth0网卡
</p>
<p>
      ONBOOT=yes      # 是否启动网卡
</p>
<p>
  BOOTPROTO=dhcp # 动态获取IP地址 （修改后按esc键，接着按:wq回车即可）
</p>
<p>
  步骤4：按【:wq】保存并退出
</p>
<p>
  步骤5：重启网卡【service network restart】
</p>
<p><img loading="lazy" decoding="async" width="450" height="185" src="/wp-content/uploads/2018/05/word-image-4555.png" class="wp-image-5041" srcset="/wp-content/uploads/2018/05/word-image-4555.png 450w, /wp-content/uploads/2018/05/word-image-4555-300x123.png 300w" sizes="(max-width: 450px) 100vw, 450px" /></p>
<ul>
<li>
    手动
  </li>
</ul>
<p>
  DEVICE=eth0
</p>
<p>
  ONBOOT=yes
</p>
<p>
  BOOTPROTO=static
</p>
<p>
  IPADDR=192.168.21.81  #设置网卡ip地址
</p>
<p>
  NETMASK=255.255.255.0 #设置网卡的子网掩码，
</p>
<p>
  GATEWAY=192.168.21.1  #默认网关（注：一般是ip地址前三个段不变第四个段改为1即可）
</p>
<h3>远程访问（重要）</h3>
<p><img loading="lazy" decoding="async" width="621" height="457" src="/wp-content/uploads/2018/05/word-image-4556.png" class="wp-image-5042" srcset="/wp-content/uploads/2018/05/word-image-4556.png 621w, /wp-content/uploads/2018/05/word-image-4556-300x221.png 300w" sizes="(max-width: 621px) 100vw, 621px" /><br />
<img loading="lazy" decoding="async" width="759" height="425" src="/wp-content/uploads/2018/05/word-image-4557.png" class="wp-image-5043" srcset="/wp-content/uploads/2018/05/word-image-4557.png 759w, /wp-content/uploads/2018/05/word-image-4557-300x168.png 300w" sizes="(max-width: 759px) 100vw, 759px" /><br />
<img loading="lazy" decoding="async" width="648" height="191" src="/wp-content/uploads/2018/05/word-image-4558.png" class="wp-image-5044" srcset="/wp-content/uploads/2018/05/word-image-4558.png 648w, /wp-content/uploads/2018/05/word-image-4558-300x88.png 300w" sizes="(max-width: 648px) 100vw, 648px" /></p>
<p>
  桥接模式    以太网      可以上网
</p>
<p>
  NAT模式	    vm8	    可以上网（学校网络较为特色，之前想要上网只能用nat）
</p>
<p>
  仅主机模式  vm1	       不可以上网
</p>
<h1>︴扩展知识</h1>
<p>
  【ctrl + c】强制退出
</p>
<p>
  【ctrl + a】光标回行首
</p>
<p>
  【ctrl + e】光标回行尾
</p>
<p>
  【键盘↑和↓】查看上次指令
</p>
<p>
  【tab】补全命令</p>
]]></content:encoded>
					
					<wfw:commentRss>/linux/4970.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
