资讯专栏INFORMATION COLUMN

TP5学习记录(Controller篇)

leone / 1374人阅读

摘要:可以在入口文件中定义,然后新建文件夹,达到将应用配置放到该文件的目的,这样方便将配置进行统一管理。动态配置返回数据类型功能同上张三男请求成功

ThinkPHP5

ThinkPHP是一个免费开源的、快速简单的、面向对象的、轻量级PHP开发框架。

为什么选择ThinkPHP5

ThinkPHP5采用了全新的架构思想;

优化了核心是一个颠覆性的版本;

支持composer方式安装;

API进行了大量的优化更符合了现代web开发的方式;

MVC定义:
MVC全名Model-View-Controller,是模型、视图、控制器的缩写,是一种软件设计典范,而不是一种设计模式。其特点:

耦合性低

重用行高

可维护性高

有利于软件的工程化

开发环境:
PHP >= 5.4.0
Mysql
Apache/Nginx

Mysql默认端口号3306Apache/Nginx默认端口号80

三种安装方法:

github上下载think, framework

composer下载

thinkphp官网下载

composer简介
composerphp的一个依赖管理工具
文档:http://docs.phpcomposer.com/
安装:

curl -sS https://getcomposer.org/installer | php        #下载composer安装工具
sudo mv composer.phar /usr/local/bin/composer            #将下载下来的composer.phar移动到系统的PATH目录,这样全局能够进行访问。

composer安装TP5
composer create-project --prefer-dist topthink/think proj_name

Apache设置根目录

/Applications/XAMPP/etc/httpd.conf文件为Apache的核心配置文件,打开后重新设置DocumentRoot的值,DocumentRootweb的根目录,然后重启Apache服务器即可。

TP5目录讲解

tp5
|-application                    #应用目录
    |-index
        |-controller    #控制器
        |-view            #视图
        |-model            #模型
    |-command.php        #控制台的配置文件
    |-common.php        #项目全局的公共文件
    |-config.php        #应用的配置文件
    |-database.php        #数据库配置文件
    |-route.php            #路由文件
    |-tag.php            #应用行为扩展文件
|-extend                        #扩展类库目录
|-public                        #网站对外访问目录
    |-index.php            #应用入口文件,所有的请求都是通过index.php之后进行转发
    |-robots.text        #定义哪些文件能被搜索引擎爬取,哪些不能
    |-router.php        #框架快速启动的配置文件
    |-static            #存放网站的静态资源,如css,html,image等
|-runtime                        #运行时目录,包含项目运行时的缓存文件、编译文件、日志等
|-thinkphp                        #框架核心目录
    |-lang                #语言包目录
    |-library            #框架核心类库目录
    |-tpl                #系统模版文件
    |-base.php            #框架基础文件,常用于定义一些常量
    |-composer.json        #composer定义文件
    |-console.php        #控制台入口文件
    |-convention.php    #惯例配置文件
    |-helper.php        #助手函数文件
    |-phpunit.xml        #单元测试配置文件
    |-README.md            #README文件
    |-start.php            #框架引导文件
|-vendor                        #第三方类库目录
|-bulid.php                        #自动生成定义文件
|-composer.json                    #composer定义文件
|-LICENSE.text                    #授权说明文件
|-README.md                        #README文件
|-think                            #命令行工具入口

开发规范:

目录名使用小写+下划线的方式命名

类文件名采用大驼峰法,类文件中的类和类文件名一致,其他文件名均使用小写

方法名采用小驼峰法

属性名采用小驼峰法

以双下划线__开头的方法属于魔术方法

常量以大写字母和下划线命名

配置参数以小写字母和下划线命名

数据库表和字段采用小写+下划线的命名方式 不能以下划线开头

应用类库的命名空间统一为app(可以配置)

ThinkPHP5模块设计
5.0版本对模块的功能做了灵活设计,默认采用多模块的架构,并且支持单一模块设计,所有模块的命名空间均以app作为根命名空间(可配置更改,一般不进行更改)。
注意:application目录下创建的common文件夹,common会默认作为公共模块,里面的文件,不能通过url直接访问

设置命名空间:namespace appindexcontroller;
设置别名:use appcommoncontrollerIndex as commonIndex;

ThinkPHP5配置

惯例配置
ThinkPHP框架下的默认配置,在think/convention.php文件中,一般不进行修改。

应用配置
应用配置文件是应用初始化的时候首先加载的公共配置文件,默认位于application/config.php,作用域为整个应用项目。可以在入口文件public/index.php中定义CONF_PATH,然后新建文件夹,达到将应用配置放到该文件的目的,这样方便将配置进行统一管理。
config目录下创建config.php,添加应用配置或者对惯例配置进行修改(需要更改惯例配置时,一般不在原文件中直接更改,可以在创建的config.php中进行更改)
config目录下创建database.php,在里面配置数据库连接

//定义配置文件目录
define("CONF_PATH", __DIR__ . "/../application/config/");

扩展配置
在上面应用配置config目录下添加名为extra的文件夹,然后添加配置文件,将会以数组形式作为元素添加到应用配置下。

场景配置
在不同场景下设置不同的配置,可以利用设置数据库的连接参数
home.php:家庭办公环境的配置项
office.php:公司办公环境的配置项

模块配置
模块配置文件是针对某个模块下的配置文件,一般位于application/模块名/config.php,可以在和application同级目录下创建文件路径config/index/config.php,然后在public/index.php中定义CONF_PATH为该路径,这种情况也分为应用配置config/config.php和模块配置config/index/config.php,但会忽略application路径下的配置。

动态配置
在具体的控制器或者方法里面进行动态配置,动态配置只在当前的控制器或者当前的方法中有效。比如在Index.php下设置如下代码,就可以为Index控制器动态的添加或修改配置。

public function __construct()
{
    config("before", "beforeAction");
    Config::set("before", "beforeAction");  //功能同上,动态配置
}

Config类下的方法
目录:thinkphp/library/think/Config.php
range($range):设定配置参数的作用域
parse($config, $type = "", $name = "", $range = ""):解析配置文件或内容
load($file, $name = "", $range = ""):加载配置文件(PHP格式)
has($name, $range = ""):检测配置是否存在
get($name = null, $range = ""):获取配置参数 为空则获取所有配置
set($name, $value = null, $range = ""):设置配置参数 name 为数组则为批量设置
reset($range = ""):重置配置参数

环境变量配置和使用

入口文件
单入口文件:应用程序的所有http请求都由某一个文件接受并由这个文件转发到功能代码中。ThinkPHP符合这种功能规范,所有的http请求都由public/index.php文件接收并转发,根据不同的参数,转发到不同的控制器调用不同的方法,最终实现不同的功能。

隐藏入口文件

public/.htaccess里面:

# 将请求转发到index.php之后
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

入口文件绑定

public/index.php中添加:

define("BIND_MODULE", "admin");           #绑定模块为admin,只能访问admin模块下的所有文件
define("BIND_MODULE", "admin/Index");  #绑定的模块为admin下的Index控制器,只能访问Index控制器下的所有方法

可以在public目录下添加文件api.php,然后在文件下定义应用目录、加载框架引导文件等..,然后进行模块绑定,这样可以实现通过访问api.php下的模块实现让用户只能访问具体模块api下的文件,这样一个项目中可以进行多种开发(API开发等)。

应用配置中:
auto_bind_module:自动绑定模块
其值设置为true之后
入口文件api.php会自动绑定为api模块
但入口文件index.php不会自动绑定为index模块

路由
将请求地址url和具体控制器中的具体方法绑定,通过路由来转发使其对应。

conf/config.php中添加(也可以不添加,系统默认开启路由):

"url_route_on"           => true

index/Index控制器下有方法:

public function info($id = "")
{
    return "{$id}";
}

然后在config/route.php中添加:

return [
    //设置路由
    "info/:id" => "index/Index/info"
];

这样就实现了通过访问localhost/info/5可以访问localhost/index/Index/info/5

请求对象Request
ThinkPHP是一个单入口框架,所有的请求都通过index.php,可以通过index.php来接收所有的http请求,请求中的所有参数都可以通过Request对象来接收。

获取Request对象的三种方式:

public function index()
{
    //获取方式一:通过助手函数request()
    $request = request();
    
    //获取方式二:通过Request对象实例
    $request = Request::instance();
}

//获取方式三:通过注入对象的方式(常用)
public function index(Request $request)
{
    dump($request);
}

Request中常用方法:

#注意:Requset中所有的方法都在thinkphp/think/Request.php文件中,可查阅

public function index(Request $request)
{
    #url信息
    dump($request->domain());                  #域名
    dump($request->pathinfo());                #url的pathinfo信息(含URL后缀)
    dump($request->path());                    #url的pathinfo信息(不含URL后缀)
    dump($request->url());                     #url
    
    #请求方式 GET、POST
    dump($request->method());                  #请求方式
    dump($request->isGet());                   #是否为GET请求
    dump($request->isPost());                  #是否为POST请求
    dump($request->isAjax());                  #是否为AJAX请求
    
    #请求参数
    dump($request->get());                     #获取所有参数的数组
    dump($request->param());                   #获取所有参数的数组(包含get、post、pathinfo等)
    dump($request->get("name"));                  #获取name参数的值
    dump($request->get("age"));                #获取age参数的值
    dump($request->param("name"));             #获取name参数的值
    dump($request->param("age"));                 #获取age参数的值
    
    #获取模型 控制器 操作
    dump($request->module());                   #当前模块
    dump($request->controller());               #当前控制器
    dump($request->action());                   #当前方法
}

input助手函数

/*
 * function input($key = "", $default = null, $filter = ...)
 * $key:表示传入参数
 * $default:参数默认值
 * $filter:参数过滤函数
 * 获取输入数据 支持默认值和过滤
 * 
 * 其中$key支持"."语法,支持如下:
 * ["get", "post", "put", "patch", "delete", "route", "param", "request", "session", "cookie",   "server", "env", "path", "file"]
 *
 */
public function index(Request $request)
{
    $res_get = $request->get("name");
    $res_param_get = $request->param("name");
    $res_input_get = input("get.name");           #功能同上,获取get请求中参数name对应的数据
    $res_input_get1 = input("get.name", "张三");    #如果参数name对应的数据为null,设置默认值
    
    $res_post = $request->post("name");
    $res_param_get = $request->param("name");
    $res_input_post = input("post.name");            #功能同上,获取post请求中参数name对应的数据
}


响应对象Response

http对每个请求都有相应的响应。

public function getUserInfo()
{
    //动态配置返回数据类型
    //config("default_return_type", "json");
    Config::set("default_return_type", "json");  //功能同上

    $res = [
        "code"  => 200,
        "body"  => [
            "name"  =>  "张三",
            "age"   =>   22,
            "sex"   =>   "男"
        ],
        "msg"  => "请求成功"
    ];
    return $res;
}












文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28751.html

相关文章

  • TP5学习记录(Model

    摘要:数据库操作数据库连接在设置数据库连接参数或者利用方法设置数据库连接数据库初始化,并取得数据库类实例数据库配置信息数组,可以在该方法里面进行配置数据库查找直接操作语句描述查询语句,然后类型语句字符串语句中绑定的字符串常用查询语句返回所有记录, ThinkPHP 数据库操作 数据库连接 #在config/database.php设置数据库连接参数或者利用Db::connect()方法设置数...

    bingo 评论0 收藏0
  • TP5实现支付宝电脑网站支付学习笔记

    摘要:第一次做支付宝的支付,踩了点小坑,还算顺利。第一步当然是在支付宝开放平台申请公钥私钥等,支付宝关官方文档都有详细介绍,这里就省略。就是那个支付宝二维码的页面。支付宝支付成功后会执行这两个方法,系统会把你支付的信息用方式异步传给你的方法。 这两天在公司做一个小型WEB项目,需要有支付功能。第一次做支付宝的支付,踩了点小坑,还算顺利。激动的我赶紧记下实现的流程。第一步当然是在支付宝开放平台...

    TNFE 评论0 收藏0
  • Nginx 实现 pathinfo 模式

    摘要:现在要做的就是在接收的模式的请求时,将它还原成标准的模式,这样服务器就能正常处理了。还好,中有个指令可以实现我们的目的,。 使用过 ThinkPHP 框架开发应用的同学应该都会知道,它有一种 URL 模式是 pathinfo,看起来类似下面的 URL: http://example.com/module/controller/action/key1/value1/key2/value2...

    shixinzhang 评论0 收藏0
  • Nginx 实现 pathinfo 模式

    摘要:现在要做的就是在接收的模式的请求时,将它还原成标准的模式,这样服务器就能正常处理了。还好,中有个指令可以实现我们的目的,。 使用过 ThinkPHP 框架开发应用的同学应该都会知道,它有一种 URL 模式是 pathinfo,看起来类似下面的 URL: http://example.com/module/controller/action/key1/value1/key2/value2...

    econi 评论0 收藏0
  • TP5.1+Vue前后端分离实践

    摘要:配置主域名二级子域名列表项目其中加入了版本控制,使用的是路由传入方式在路由文件中配置,如下版本路由省略方法名时有方法名时同时控制器里加入版本号这个例子最终的显示为项目最终目录结构为配置主域名配置此处可作反向代理二级接口子域名配置配置解决 配置: 主域名 www.demo.xyz 二级子域名 api.demo.xyz 列表项目其中api.demo.xyz加入...

    nemo 评论0 收藏0

发表评论

0条评论

leone

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<