软件开发的家园,编程爱好者的天地.

现在是:北京时间 2016/4/14 上午11:50:51 星期四

设为首页  |  加入收藏  |  网站地图

当前位置: 第八基地首页 > WEB开发 > PHP >
快速学习thinkphp(第一天)
发布于:第八基地 来源:第八基地 作者:天堂路上 时间:2017-05-16 点击:1100

讲的是thinkphp3.23版本,如果你学的其它版本,请查看文档看不同的地方。

注意我用的是window+phpstudy(php5.5+apache)环境,如果你是在线的或是其它环境,只须要把环境搭建好就可以,环境要求按照官方文档上面来(require PHP > 5.3.0 !)。

学习thinkphp3.23之前,先学习一下如下的知识

1)、库、框架、设计模式的理解与区别

2)、MVC

MVC

    MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。MVC就是类似三层的一种架构,主要还是采用封装(分层)的思想,来降低耦合度,从而使我们的系统更加的灵活,扩展性更好。

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责对数据库进行CURD操作。

View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分,是MVC的主要的操作部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。 MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

MVC的优点

(1)、首先,最重要的一点是多个视图能共享一个模型。同一个模型可以被不同的视图重用,大大提高了代码的可重用性。

(2)、由于MVC的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的松耦合的构件。

(3)、此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。

当然它也有一些缺点,我这里就不多说了,记住它的好就是。

记住:个东西都有自己适用的范围。

    对于开发存在大量用户界面,并且业务逻辑复杂的大型应用程序,MVC将会使你的软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC框架时会花费一定的工作量,但从长远角度看,它会大大提高后期软件开发的效率。

下载thinkphp3.23

去这里下载thinkphp3.23核心版:http://www.thinkphp.cn/down/611.html

运行thinkphp

搭建好自己的环境,如果连环境都不会搭建,那就先去学学再来吧。

直接把下载下来的thinkphp代码放在你的根目录里面,运行服务器,然后什么都不用管,打开浏览器,输入你配置好的域名(我配置的域名是tp01.com),看效果。。。

然后你试着去打开以下链接试试,他们是等价的

http://tp01.com/
http://tp01.com/index.php
http://tp01.com/index.php/Home
http://tp01.com/index.php/Home/Index
http://tp01.com/index.php/Home/Index/index

为什么他们是等价的呢?接着下面

理解单入口文件

顾名思义,所有的程序入口都是一个文件,一般都指的是index.php,原生PHP写项目的时候,你就会写很多的文件,例如,reg.html,login.html,reg.php等等,很多很多,这里我先不说单入口有什么好处,后面我再总结。

Thinkphp链接模式(url模式)

http://serverName/index.php(或者其他应用入口文件)/模块/控制器/操作/[参数名/参数值...]

注:中括号[]表示可有可无

在thinkphp核心文件thinkphp\Conf\convention.php里面有如下三句

'DEFAULT_MODULE' => 'Home', // 默认模块
'DEFAULT_CONTROLLER' => 'Index', // 默认控制器名称
'DEFAULT_ACTION' => 'index', // 默认操作名称

这就意味着我的网站默认执行的是http://tp01.com/index.php/Home/Index/index这个链接

因为默认的数据在不写的情况都用默认设置的来替换,所以上面4个链接是等价的

例如下面的链接:

http://tp01.com/index.php/User/Reg/doreg

执行的是User模块里面的Reg控制器里面的doreg操作方法

入口文件

// 检测PHP环境
if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');

// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',True);

// 定义应用目录(重点)
define('APP_PATH','./Project/');

// 引入ThinkPHP入口文件
require './ThinkPHP/ThinkPHP.php';

默认就这4句,重点第3句define('APP_PATH','./Project/'); 表示以后入口文件所执行的程序全部都在Project里面

那么由此得到,默认执行的控制的路径就是Project里面的Home模块,里面的Indexr控制器里面的Iindex方法

如果Project不存在,运行一下入口文件,会自动生成这个文件夹

自动生成目录

上面入口文件自动生成的项目目录文件是下面的这种结构

Project
├─Common         应用公共模块
│  ├─Common      应用公共函数目录
│  └─Conf        应用公共配置文件目录
├─Home           默认生成的Home模块
│  ├─Conf        模块配置文件目录
│  ├─Common      模块函数公共目录
│  ├─Controller  模块控制器目录
│  ├─Model       模块模型目录
│  └─View        模块视图文件目录
├─Runtime        运行时目录
│  ├─Cache       模版缓存目录
│  ├─Data        数据目录
│  ├─Logs        日志目录
│  └─Temp        缓存目录

重点关注Common模块与Home模块,程序默认执行的r控制器就在默认模块(Home)的Controller里面IndexController.class.php文件

控制器的命名

类名:控制器类的命名方式是:控制器名(驼峰法,首字母大写)+Controller

控制器文件的命名方式是:类名.class.php(类文件后缀)

所以要创建一个User控制器,命名就是UserController.class.php

URL简化

1、隐藏入口文件

下面分别在apche、IIS、Nginx介绍如何隐藏入口文件

1)apache隐藏入口文件

thinkphp3.23下载下来根目录默认有一个.htaccess文件,所以你如果是直接配置在apache里面,默认就可以隐藏index.php文件的

具体操作:

  1. httpd.conf配置文件中加载了mod_rewrite.so模块
  2. AllowOverride None 将None改为 All
  3. 把下面的内容保存为.htaccess文件放到应用入口文件的同级目录下
<IfModule mod_rewrite.c> 
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

2)IIS隐藏入口文件

如果你的服务器环境支持ISAPI_Rewrite的话,可以配置httpd.ini文件,添加下面的内容:

RewriteRule (.*)$ /index\.php\?s=$1 [I] 

在IIS的高版本下面可以配置web.Config,在中间添加rewrite节点:

<rewrite> 
<rules> 
<rule name="OrgPage" stopProcessing="true"> 
<match url="^(.*)$" /> 
<conditions logicalGrouping="MatchAll"> 
<add input="{HTTP_HOST}" pattern="^(.*)$" /> 
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
</conditions> 
<action type="Rewrite" url="index.php/{R:1}" /> 
</rule> 
</rules> 
</rewrite> 

2)Nginx隐藏入口文件

location / { // …..省略部分代码 
	if (!-e $request_filename) {
		rewrite  ^(.*)$  /index.php?s=$1  last;
		break;
	}
} 

2、隐藏默认模块

在模块以上的管理模块配置文件里面添加以下代码:

'MODULE_ALLOW_LIST'    =>    array('Home','Admin'),	// 允许访问的模块列表,多个模块用逗号分隔,模块必须存在
'DEFAULT_MODULE'       =>    'Home',	//设置默认访问的模块

为什么要放里外面,而不放在Home模块里面的配置文件???

理由很简单,因为这个配置是对模块进行管理,它自然要配置在进入模块之前

创建模块,前台与后台

创建Web与Admin两个模块来作为以后开发的前台与后台模块

第一步:在Common公共模块里面的Config下的config.php添加如下代码

<?php
  return array(
//'配置项'=>'配置值'
'MODULE_ALLOW_LIST'    =>    array('Web','Admin'),		//允许访问的模块列表
'DEFAULT_MODULE'       =>    'Web',						//默认访问的模块
);

意思是添加了两个模块,默认模块为Web,然后打开首页http://tp01.com,它会自动生成Web模块文件夹,但Admin模块不会自动生成,你可以自己复制一个Web出来,重命名为Admin,接下来打开Admin里面的Controller下的IndexController.class.php,把命名空间改成自己的,例如namespace Admin\Controller;

浏览器输入http://tp01.com/admin试试,如果能访问,模块暂时配置成功。

第一天结束,有问题留言。

对我有帮助
(0)
0%
对我没帮助
(0)
0%
返回顶部
在线反馈
在线反馈