ThinkPHP框架基础知识一
- Application文件夹是默认存放项目的文件夹,当然也可以更改。
- Public文件夹是默认存放公有的东西,比如CSS,JS,图片等,不过一般这些东西我们会放在项目里面。
- ThinkPHP文件夹是核心文件夹,里面又包含很多文件夹,尽量不要修改这里面的文件,若要修改,最好在模块里面修改。其中:
- Common文件夹是核心函数库,存放用户函数的。
- Conf文件夹是存放配置文件的,主要是convention.php核心配置文件,所有关于TP框架的配置都在里面。
- Lang文件夹是语言包,切换语言的时候可以用到。
- Library文件夹是核心资源库,里面存放核心类文件,其中Behavior/是系统行为目录,Org/是功能目录,Think/存放核心文件,Vendor是模板类文件目录。Think/下的App.class.php是应用核心文件,Controller.class.php是控制器类,Dispatcher.class.php是目录解析类,Model.class.php是模型类,Think.class.php是框架核心类,View.class.php是视图类。
- Mode文件夹是模型文件夹。
- Tpl文件夹是模板文件夹。
- ThinkPHP.php是TP框架的入口文件。
- index.php是入口文件,所有项目必须通过入口文件。
这里将应用目录Application改为JiaoWu,运行入口文件后系统会自动生成JiaoWu文件夹,里面有三个文件夹,其中Common是存放函数的,Runtime是存放缓存文件的,Home是项目里面的模块,我们的代码都写在Home模块里面。Home/下,Conf里面的config.php是配置文件夹,可以在这里修改配置;Controller是控制器,存放控制器类文件;Model是模型文件夹;View是视图文件夹,存放显示模板文件。一般项目分前端和后台,就需要两个模块:Home和Admin。这里只有一个默认的Home模块。
二、MVC模式
Model:模型,模型(数据)层,操作数据(数据连接,数据访问);
View:视图,视图层,提供显示模板;
Controller:控制器,逻辑层,实现业务逻辑。
action:操作,放在控制器里面的方法。
C层比较重要,基本上所有的业务逻辑都是在C层实现的,用户的请求都是请求的C层,若请求比较简单,就从V层调用模板展现给客户端;若要访问数据库,就调用M层,将数据与模板结合起来展现给客户端。C层不仅要控制用户请求,还要进行逻辑的操作。与Smarty相比,多了M层操作数据。
tp框架url地址可以由以下四种
- http://网址/index.php?m=模块名称&c=控制器&a=方法 基本get模式
- http://网址/index.php/模块/控制器/操作方法 路径模式pathinfo
- http://网址/模块/控制器/操作方法 rewrite重写模式
- http://网址/index.php?s=/模块/控制器/方法 兼容模式
具体url地址模式设置(配置文件ThinkPHP/Conf/convertion.php)
URL_MODEL => 0/1/2/3 分别代表四种url地址模式。
我们当前项目的配置文件为JiaoWu/Home/Conf/config.php,我们可以通过修改该文件达到配置变量的目的,这个文件在系统运行过程中会覆盖convertion.php的配置变量
include "convertion.php";
include "config.php"; 后引入的文件要把先引入的文件配置变量给覆盖掉。
URL_MODEL配置是控制URL的生成模式,而不是访问模式,事实上四种模式都可以访问。默认是1路径模式。
我们用快捷函数U("模块/控制器/方法"),根据参数和URL模式来创建URL地址,例如:
<?php
//控制器必须按照约定来做
namespace Home\Controller; //命名空间
use Think\Controller; //引入父类控制器
class IndexController extends Controller { public function Login()
{
echo U("Admin/Index/Login"); //控制生成的URL模式 //默认配置下输出:/tp/index.php/Admin/Index/Login.html
}
}
四、开发、生产模式
要在页面显示trace信息,需要在config.php配置文件中设置:
控制器是MVC模式中的核心,tp默认有一个Index控制器:Home/Controller/IndexController.class.php,Index控制器里面有一个操作方法:index()
<?php
//控制器必须按照约定来做
namespace Home\Controller; //命名空间
use Think\Controller; //引入父类命名空间
class IndexController extends Controller {
public function index(){
$this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;font-size:24px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px } a,a:hover{color:blue;}</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP</b>!</p><br/>版本 V{$Think.version}</div><script type="text/javascript" src="http://ad.topthink.com/Public/static/client.js"></script><thinkad id="ad_55e75dfae343f5a1"></thinkad><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>','utf-8'); }
我们在访问http://localhost/tp/index.php入口文件的时候,会默认访问Index控制器下面的index方法。
如果要自己创建一个控制器Main:
- 在\JiaoWu\Home\Controller文件夹下新建一个控制器文件MainController.class.php
注意:文件命名规则,按照驼峰法命名
2. 打开该文件,在里面造控制器Main类,并自定义操作方法XianShi()
<?php
namespace Home\Controller; //注意是反斜杠
use Think\Controller;
class MainController extends Controller
{
public function XianShi()
{
echo "主页面显示";
}
}
这样我们就完成了控制器和操作方法的建立,如果要访问我们刚才的Main控制器下的XianShi方法:
3. 控制器中如果要调用视图层中的模板:
public function XianShi()
{
$this->display(); //调用XianShi模板
}
这样再次访问,会发现报错:
原因:模板文件没有创建,这时候我们就要去创建模板文件
- 配置
使用C方法获取已经设置的参数值:C('参数名称'),如:
public function XianShi()
{
echo C('URL_MODEL');
}
参数不区分大小写,但是建议使用大写方式的规范。
注意:配置参数名称中不能含有 “.” 和特殊字符,允许字母、数字和下划线。
如果URL_MODEL尚未存在设置,则返回NULL。
C('参数名称','新的参数值');
public function XianShi()
{
C('URL_MODEL',0);
echo U('XianShi');
}
请求XianShi操作:
动态配置赋值仅对当前请求有效,不会对以后的请求造成影响。
- 控制器
- 控制器定义
<?php
namespace Home\Controller;
use Think\Controller;
class MainController extends Controller
{
public function XianShi()
{
echo "主页面显示";
}
}
Home\MainController
类就代表了Home模块下的Main控制器,而XianShi操作就是Home\IndexController
类的XianShi(公共)方法。
当访问 http://localhost/tp/index.php/Home/Main/XianShi
后会输出:
主页面显示
控制器通常需要继承系统的Controller类或者其子类。
控制器的名称采用驼峰法命名(首字母大写),控制器文件位于 Home/Controller/IndexController.class.php
。
2. 前置和后置操作
前置和后置操作指的是在执行某个操作方法之前和之后会自动调用的方法,不过仅对访问控制器有效。
<?php
namespace Home\Controller; //注意是反斜杠
use Think\Controller;
class MainController extends Controller //继承父类
{
//前置操作
public function _before_XianShi()
{
echo "执行显示之前 ";
}
public function XianShi() //调用方法时,前置操作和后置操作会自动调用
{
echo "主页面显示";
}
//后置操作
public function _after_XianShi()
{
echo " 执行显示之后";
}
}
当访问 http://localhost/tp/index.php/Home/Main/XianShi
后会输出:
public function XianShi($name)
{
echo $name."主页面显示";
}
public function XianShi($name,$id)
{
echo $name.$id."主页面显示";
}
public function CeShi()
{
$this->display();
}
在Home/View/Main/下新建CeShi.html文件,在里面写上显示代码:
<body>
<a href="/tp/index.php/Home/Main/XianShi/ids/123/name/lisi">调用显示操作</a><!--不要忘了传参数 -->
</body>
访问http://localhost/tp/index.php/Home/Main/CeShi
public function CeShi()
{
$this->assign("test","hello");
$this->display();
}
CeShi.html文件中:
<body>
<a href="/tp/index.php/Home/Main/XianShi/ids/123/name/lisi">调用显示操作</a><!--不要忘了传参数 -->
<div><{$test}></div>
</body>
再次请求CeShi操作:
<form action="/tp/index.php/Home/Main/XianShi/id/123/name/lisi" method="post">
<input type="text" name="name" />
<input type="submit" value="提交" /> </form>
XianShi操作:
public function XianShi($name,$id)
{
// echo $_POST["name"];
echo I('post.name');
}
请求CeShi操作:
public function CeShi()
{
var_dump(get_defined_constants(true));//获取TP框架常量信息 //true会分类显示
}
请求CeShi操作:得到常量信息,是二维数组的形式,里面又分了35个数组,来存储所有的常量信息。下图是常量user的部分信息:
这样写路径的时候不要写死,可以调用常量来显示,即方便,也不用担心写错。若想找到操作,就用__ACTION__;若想找到控制器,就用__CONTROLLER__;若想找到模块,就用__MODULE__;若想找到当前路径,就用__SELF__(URL路径全部信息,包括参数)。这里要注意的是以双下划线开头的可以直接写,而不用<{}>标记。
例如:上文中的表单就可以调用常量来显示,因为是在同一控制器下的不同方法,所以用__CONTROLLER__:
<form action="__CONTROLLER__/XianShi/id/123/name/lisi" method="post">
9. 一个方法,实现两个逻辑
例如登录,添加,修改等,即要显示页面,又要实现相应功能。这里以登录为例:
public function login()
{
//一个方法,实现两个逻辑,显示页面,实现登录
if(empty($_POST["uid"]))
{
$this->display();
}
else
{
//具体处理以后讲
echo "实现登录";
}
}
Home/View/Main/login.html模板代码:
<body>
<!--提交到当前方法来处理 -->
<form action="__ACTION__" method="post"> <!--__ACTION__代表当前操作(方法)路径即/tp/index.php/Home/Main/login -->
<input type="text" name="uid" />
<input type="password" name="pwd" />
<input type="submit" value="登录" />
</form>
</body>
请求login操作:
直接点击登录不会跳转还是显示当前页面,只有写上数据才会实现登录:
ThinkPHP框架基础知识一的更多相关文章
- ThinkPHP框架基础知识二
一.空操作和空控制器处理 空操作:没有指定的操作方法:空控制器:没有指定控制器,例如: http://网址/index.php/Home/Main/login 正常 http://网址/index. ...
- ThinkPHP框架基础知识三
一.JS文件与Css文件存放位置 其实JS与Css文件放在任意位置都可以找到,只要路径正确就行. 在TP框架中我们访问的所有文件都要走入口文件index.php,相当于访问的是index.php页面. ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类
一.程序设计 1.设计功能系统——数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理——原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的 ...
- DDD框架基础知识
DDD框架基础知识 参考: https://www.cnblogs.com/zhili/p/OnlineStorewithDDD.html(领域驱动设计,分层架构) https://www.cnblo ...
- 4-1 Spring框架基础知识
Spring框架基础知识 1.Spring 框架作用 主要解决了创建对象和管理对象的问题. 自动装配机制 2.Spring 框架 (Spring容器,JavaBean容器,Bean容器,Spring容 ...
- ThinkPHP框架基础
ThinkPHP 一.php框架基础介绍 真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维 ...
- Spring框架基础知识
本人博客文章网址:https://www.peretang.com/basic-knowledge-of-spring-framework/ Spring框架简介 Spring , 一个开源的框架 , ...
- 6月13 ThinkPHP框架基础
ThinkPHP 一.php框架基础介绍 真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维 ...
随机推荐
- C++加密解密库之选择
项目中有这样一个需求,客户端登陆服务器时,为保证信息安全,需要对用户的密码进行加密传输,在服务器端接受到之后进行相应的解密. 一.加密算法分类 对称加密算法.不对称加密算法.不可逆加密算法 1.对称加 ...
- Java中List的排序和List的MAp
这里是一个类中类去实现条件优先排序的问题 package com.sun; import java.util.ArrayList; import java.util.Arrays; import ja ...
- TCP/IP笔记(一)网络基础知识
计算机与网络发展 计算机自诞生伊始,经历了一系列演变与发展.大型通用机计算机.超级计算机.小型机.个人电脑.工作站.便携式电以及现如今的智能手机终端都是这一过程的产物.它们性能逐年增强,价格却逐年下降 ...
- php做推送服务端实现ios消息推送
本文部分内容引用于 http://zxs19861202.iteye.com/blog/1532460 准备工作 1.获取手机注册应用的deviceToken(iphone手机注册应用时返回唯一值de ...
- linux 免密登录
ssh-keygen -t rsa -P "" ssh-copy-id -i ~/.ssh/id_rsa.pub root@服务器地址
- Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights
第一次提交遇到这样的情况,怎么回事呢,我在github上提交了ssh key 的啊. 排查先看看能不能解析, 1.先 ping https://github.com 把ip添加到 host : ...
- php 循环简写
<?php class a{ public function news($news){ $articles = array(); foreach ($news as $key => $va ...
- Eclipse 窗口说明
Eclipse 窗口说明 Eclipse 工作台(Workbench) 首先,让我们来看一下Eclipse 作台用户界面,和它里面的各种组件. 工作台是多个窗口的集合.每个窗口包含菜单栏,工具栏,快捷 ...
- Java Web -- Servlet(1) 必备知识
学习Java WEB开发必备的基本概念: 1.WEB 本意是蜘蛛网和网的意思.在网页设计中我们称为网页的意思. 现广泛译作网络.互联网等技术领域.表现为三种形式,即超文本(hypertext).超媒体 ...
- MTK驱动探索:mtk6582添加tp驱动s3203
代码从mtk6589平台移植,ic为用户定制. 解决的问题有: 一.build err:主要原因是89和82平台函数和宏定义冲突,如: extern void mt_eint_unmask(unsig ...