目录
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 appindexcontroller;
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 appindexcontroller;
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 appindexcontroller;
use thinkConfig;
class Index
{
public function index()
{
return Config::get('app_namespace');
}
}
注意:要先use thinkConfig,原因有两点
1.Config类本来就在thinkConfig这个命名空间下,所以要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 appindexcontroller;
use thinkEnv;
class Index
{
public function index()
{
return Env::get('ALIPAY.ALI_ID');
}
}
也可以再弄一个extra下的配置文件,在配置文件的数组中Env::get(),然后在index文件中config()
最后
以上就是落寞爆米花最近收集整理的关于ThinkPHP5.0.11Day01: composer 、助手函数、配置文件0x00 composer安装步骤:0x01 用composer将thinkphp框架下载到服务器的公开目录0x03 composer详解0x03 用Composer下载依赖0x04 将自己的类上传到packagist0x05 助手函数0x06 tp系统常量0x07 tp配置0x08 获取配置值的方法:0x09 扩展配置的全部内容,更多相关ThinkPHP5.0.11Day01:内容请搜索靠谱客的其他文章。
发表评论 取消回复