ThinkPHP5.0.11Day01: composer 、助手函数、配置文件
目录
0x00 composer安装步骤:
0x01 用composer将thinkphp框架下载到服务器的公开目录
0x03 composer详解
0x03 用Composer下载依赖
0x04 将自己的类上传到packagist
0x05 助手函数
0x06 tp系统常量
0x07 tp配置
0x08 获取配置值的方法:
0x09 扩展配置
0x00 composer安装步骤:
https://jingyan.baidu.com/article/eae078275907861fec548582.html
https://www.kancloud.cn/manual/thinkphp5/118006
0x01 用composer将thinkphp框架下载到服务器的公开目录
https://www.kancloud.cn/manual/thinkphp6_0/1037481
安装好后,可以尝试访问public下的index.php文件
https://www.kancloud.cn/manual/thinkphp5/118006
0x03 composer详解
composer中文文档: https://docs.phpcomposer.com/
首先,composer不是一个包管理工具,它是依赖管理工具(依赖=包libaries+项目projects(框架))。所谓依赖,就是指你做的项目需要依赖的东西,所以,composer不会再全局安装任何东西,在命令行使用composer前,你需要cd到你做的项目的目录下,然后,通过以下命令,来将一些包或者框架安装到你的项目目录下。
用composer实现自动加载:
第一步 生成composer.json文件
composer.json是composer的配置文件(对自己项目的描述)
composer init 命令生成composer.json
- Package name:vender/name:你的网名/包的名字
- Description:对包的描述
- Author:网名 <邮箱>
- Minimum Stability:stable
- Package Type:如果是库就填Library,如果是框架就填project
- License:协议,一般填MIT
以上详细解释,见中文文档的架构部分。
第二步 转中国镜像
https://pkg.phpcomposer.com/
第三步 生成vendor目录
composer install
将会自动在当前文件夹下生成vendor目录
如何实现php文件的自动加载呢?
例如:现在你在demo文件夹下有一个common目录,里面有一个function.php。你想让index.php自动加载该文件。
首先,你需要在composer.json文件夹中添加这么一段代码:
注意:这里填的相对路径都是相对于composer.json来说的。
然后,只需要在index.php中引入vendor/autoload.php即可。这样,当你需要在index.php中使用composer.json中添加好的某个文件的时候,vendor/autoload.php就会为你自动加载。
最后,为了让修改好的composer.json生效,需要在命令行执行 composer dump 重启。
那么如何实现类的自动加载呢?
首先在demo文件夹,下创建一个app文件夹,专门用来存写好的类。然后在app文件夹下创建一个home文件夹(用来存网站前台的代码)和一个admin文件夹(用来存网站后台的代码)。然后在home文件夹下 创建一个文件indexController.php(类的命名规范:xxxController.php)
然后,在composer.json中添加如下代码:
然后,composer dump
最后,在index.php中使用该类即可,注意:在之前加上命名空间
0x03 用Composer下载依赖
依赖商店:https://packagist.org/
然后该包就会被下载到vendor文件夹中,然后在composer.json中自动加入require词条
发短信的包:alidayu
packagist只是将包展示出来,包的代码存在github上面。
0x04 将自己的类上传到packagist
首先,在github上创建仓库,然后将仓库clone到本地,然后进入到本地文件夹,composer init,然后在composer.json中设置好自动加载,然后add commit push将类上传到github(不用上传vendor目录)
0x02 thinkphp目录结构
https://www.kancloud.cn/manual/thinkphp6_0/1037483
www WEB部署目录(或者子目录)
├─app 应用目录
│ ├─controller 控制器目录
│ ├─model 模型目录
│ ├─ ... 更多类库目录
│ │
│ ├─common.php 公共函数文件
│ └─event.php 事件定义文件
│
├─config 配置目录
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─console.php 控制台配置
│ ├─cookie.php Cookie配置
│ ├─database.php 数据库配置
│ ├─filesystem.php 文件磁盘配置
│ ├─lang.php 多语言配置
│ ├─log.php 日志配置
│ ├─middleware.php 中间件配置
│ ├─route.php URL和路由配置
│ ├─session.php Session配置
│ ├─trace.php Trace配置
│ └─view.php 视图配置
│
├─view 视图目录
├─route 路由定义目录
│ ├─route.php 路由定义文件
│ └─ ...
│
├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写
│
├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor Composer类库目录
├─.example.env 环境变量示例文件
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件
app 应用目录 你写的代码就存在这里
public:文件夹下:
robots.txt 是用来拒绝爬虫的协议
前端的js,css代码都放在static文件夹下
runtime:网站的所有缓存文件都在runtime下
0x05 助手函数
进入application下的index/controller/index.php
function index()中return就是输出,原生的return是没有输出的功能的。
用于调试的助手函数:
1.dump('xxx') 浏览器友好的变量输出
相当于var_dump()+<pre></pre>
2.halt(变量) 输出变量 并中断脚本,本质上封装了dump 和一个抛出异常,可以理解为dump +exit;
其他常用的助手函数:
1.exception('异常消息') 用于抛出异常,可以用try{}catch(\Exception $e){ $this->error($e->getMessage())} 来捕获异常
2.url(路由地址,变量) 生成url
例如
url('/admin/index',['id'=>$id,'status'=>$sta])
url('/admin/index','id=$id&status=$sta')
在模板使用助手函数{:助手函数名()} 例如 {:url('/admin/index')}
3.json():对变量进行json编码,相当于原生的json_encode:
https://www.php.net/manual/zh/function.json-encode.php
<?php
namespace app\index\controller;class Index
{public function index(){$arr =["a","b","c"];return json($arr);}
}
以上代码相当于原生的:echo json_encode($arr);
助手函数如何实现?
thinkphp/helper.php
thinkphp/library/Debug.php
0x06 tp系统常量
thinkphp/base.php中定义了许多系统常量,我们在application/index/controller/index.php中可以拿过来直接用:
比较常用的tp系统常量
- 目录分隔符(可以兼容windows和linux):define('DS', DIRECTORY_SEPARATOR)
- 指向框架的核心目录thinkphp:defined('THINK_PATH') or define('THINK_PATH', __DIR__ . DS)
- 指向thinkphp/library:define('LIB_PATH', THINK_PATH . 'library' . DS);
- 指向thinkphp/library/think:define('CORE_PATH', LIB_PATH . 'think' . DS);
- 指向thinkphp/library/traits:define('TRAIT_PATH', LIB_PATH . 'traits' . DS);
- 指向application目录:defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']) . DS)
- 指向application目录:defined('CONF_PATH') or define('CONF_PATH', APP_PATH); // 配置文件目 为什么同一个目录要定义两个名字呢?因为在application文件夹下有个config.php,想要得到该文件的路径,可以直接:CONF_PATH/config.php
- 指向tp框架的根目录tp5.0.11:defined('ROOT_PATH') or define('ROOT_PATH', dirname(realpath(APP_PATH)) . DS);
- 指向extend目录:EXTEND_PATH
- 指向vendor目录:VENDOR_PATH
0x07 tp配置
application/config.php 应用配置文件:
开发阶段打开以下两个选项,上线后关闭:
打开错误调试功能
打开trace:可以追踪整个代码执行的流程和时间等
0x08 获取配置值的方法:
1.助手函数法:
config(配置的键) 返回键对应的值
<?php
namespace app\index\controller;class Index
{public function index(){return config('app_namespace');}
}
2.调用Config::get("配置的键")
助手函数config源码:
if (!function_exists('config')) {/*** 获取和设置配置参数* @param string|array $name 参数名* @param mixed $value 参数值* @param string $range 作用域* @return mixed*/function config($name = '', $value = null, $range = ''){if (is_null($value) && is_string($name)) {return 0 === strpos($name, '?') ? Config::has(substr($name, 1), $range) : Config::get($name, $range);} else {return Config::set($name, $value, $range);}}
}
可以看到获取配置的值根本上调用的是Config::get()函数,显而易见,Config是一个类,get是该类的一个静态方法。tp5框架中类都在thinkphp/Library/think下,寻找对应的Config.php
public static function get($name = null, $range = ''){$range = $range ?: self::$range;// 无参数时获取所有if (empty($name) && isset(self::$config[$range])) {return self::$config[$range];}// 非二级配置时直接返回if (!strpos($name, '.')) {$name = strtolower($name);return isset(self::$config[$range][$name]) ? self::$config[$range][$name] : null;}// 二维数组设置和获取支持$name = explode('.', $name, 2);$name[0] = strtolower($name[0]);if (!isset(self::$config[$range][$name[0]])) {// 动态载入额外配置$module = Request::instance()->module();$file = CONF_PATH . ($module ? $module . DS : '') . 'extra' . DS . $name[0] . CONF_EXT;is_file($file) && self::load($file, $name[0]);}return isset(self::$config[$range][$name[0]][$name[1]]) ?self::$config[$range][$name[0]][$name[1]] :null;
所以,我们可以直接:
<?php
namespace app\index\controller;
use think\Config;class Index
{public function index(){return Config::get('app_namespace');}
}
注意:要先use think\Config,原因有两点
1.Config类本来就在think\Config这个命名空间下,所以要use
2.tp5自动加载需要根据命名空间来自动加载,打开thinkphp/library/think/Loader.php,可以看到
// 注册命名空间定义self::addNamespace(['think' => LIB_PATH . 'think' . DS,'behavior' => LIB_PATH . 'behavior' . DS,'traits' => LIB_PATH . 'traits' . DS,]);
think命名空间对应的是tp5/thinkphp/library/think/
0x09 扩展配置
如何添加自己的配置文件:
在application下创建一个文件夹extra,然后在extra下创建xxx.php(xxx为配置文件名),xxx.php的格式如下:
<?php
return ['MY_APP_ID'=>'123456',];
?>
如何读取呢?
config('配置文件名.MY_APP_ID');
也可以在根目录tp5下创建一个总的配置文件:.env文件,打开.env 这样写:
如果要获取配置的值:
<?php
namespace app\index\controller;
use think\Env;class Index
{public function index(){return Env::get('ALIPAY.ALI_ID');}
}
也可以再弄一个extra下的配置文件,在配置文件的数组中Env::get(),然后在index文件中config()
ThinkPHP5.0.11Day01: composer 、助手函数、配置文件相关推荐
- tp3的单字母函数在thinkphp5.0改为助手函数简介
thinkphp3.2中一些快捷大写单字母函数,比如 U(),I() , C(),M() , D() , W()等,这些在thinkphp5 中已经不再使用,而是改用助手函数来代替: S=>ca ...
- PHP:ThinkPHP5.0下载安装和各种配置
1.ThinkPHP5.0简介 composer包管理工具 ThinkPHP3.0不兼容 php环境: 测试 开发 线上 url路由 请求响应 模板视图 MVC 一种设计典范 分离 model 模型 ...
- ThinkPHP 5.0常用助手函数
ThinkPHP 5.0常用助手函数 总结thinkphp手册,以及自己学习中用到的关于tp5的助手函数 首先看看手册给我们提供的助手函数目录: 下面是学习中自己常用到的助手函数 一.url() 一般 ...
- yii2.0奥秘窥探:助手函数
欢迎php技术加入laravel技术交流群 :784030154 在中文手册'助手函数'只提了三个函数,分别是url .html.array.具体查看https://www.yiichina.com/ ...
- php 助手函数,助手函数 · ThinkPHP5.1完全开发手册 · 看云
>[info] 在5.1版本中,大部分的助手函数都可以归结为一个函数`app()`,因为5.1全面采用容器管理类的实例,而`app()`函数又是容器的"管家". ## 助手函 ...
- thinkphp 助手函数url不生成https_thinkphp5.0 URL 地址生成
有两个方法 使用系统类 使用助手函数 use think\Url; //输出首页地址 Url::build('index/index/index'); //这个也是输出首页地址 url('index/ ...
- Composer安装ThinkPHP5.0
1. 安装Composer 参考:https://blog.csdn.net/weixin_40393909/article/details/86978990 2. 安装tp5.1: 5.1版本开 ...
- php网站目录结构图,thinkPHP5.0站点目录结构-我心向阳
一.ThinkPHP5.0的目录结构 安装后(或者下载后的压缩文件解压后)可以看到下面的目录结构: tp5 ├─application 应用目录 ├─extend 扩展类库目录(可定义) ├─publ ...
- thinkphp5.0验证码使用
如果没有安装验证码类,可在composer.json 文件的require里面添加 "topthink/think-captcha":"1.*",然后compo ...
最新文章
- httpd启动不能加载模块
- LoadRunner的Socket脚本关联小技巧
- VS.NET2005中的WEBPART初步(一)
- 启明云端技术社区之星--张梦玉
- Condition - Java多线程编程
- 网速正常,一打开IE总是卡很久
- matlab的diray在哪,matlab笔记
- 为此计算机上的所有用户安装此加载项,activex 安装给所有计算机用户
- matlab如何创建callback函数_MATLAB作图实例:46:显示复杂的三维对象
- 剑指_复杂链表的复制(Python)
- informix sybase数据库下载地址
- Leetcode Problem108
- mysql 批量插入(记录帖)
- 计算机专业毕业顶岗实习周记,计算机专业毕业顶岗实习周记10篇
- 烟台移动dns网关_如何设置移动宽带DNS和IP地址
- 下载新浪android SDK
- Java 实现图片转换为ICO以及多种格式图片之间转换
- Timing Constraint介绍-Design Compiler(三)
- android+小米文件管理器源码,小米开源文件管理器MiCodeFileExplorer-源码研究(1)-2个模型Model...
- Learning to Rank 简介