TP5学习记录(Controller篇)

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 app\index\controller;
设置别名:use app\common\controller\Index 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;
}












  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值