请选择 进入手机版 | 继续访问电脑版
查看: 101|回复: 0

Discuz使用composer第三方类库的安装和使用方法

[复制链接]

823

主题

830

帖子

4305

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4305
发表于 2022-6-7 13:30:42 | 显示全部楼层 |阅读模式
Discuz使用composer第三方类库的安装和使用方法

Discuz X3.1 是一个成熟的基于PHP开发的社区系统(广义上来讲是一个建站系统),自从被企鹅收购后悄无声息的被遗弃了,伤感啊。如今要在Discuz上加什么功能,改bug什么的只能依靠自力更生了;好在有各种开源社区,开发好的功能、类库你可以无偿的直接拿来用。

Composer 是一个PHP类库管理器(官网http://docs.phpcomposer.com)。Composer 优雅的解决了PHP项目中第三方类库的安装及依赖关系。很多成熟的项目(如 Laravel )已经把Composer作为首选的安装方式;

所以,在Discuz X3.1 上安装第三方类库使用Composer后,会很大提高生产力。

下面我来说说如何在 Discuz X3.1中使用 Composer 安装并使用第三方类库 ;

先说安装Composer到Discuz X3.1框架下
一、修改 class_core.php (\source\class\class_core.php) 如下
  1. $autoloadfile=DISCUZ_ROOT.'/vendor/autoload.php';
  2. if(!file_exists($autoloadfile)){  
  3.     if(function_exists('spl_autoload_register')) {
  4.         spl_autoload_register(array('core', 'autoload'));
  5.     } else {
  6.            function __autoload($class) {
  7.             return core::autoload($class);
  8.         }
  9.        }
  10. }else{
  11.     require_once  $autoloadfile;//如果存在Composer 加载器 ,则使用 ;
  12. }
复制代码

二、在 Discuz 目录下,新建一个 composer.json 内容如下:
  1. {

  2.     "require": {
  3.          "guzzlehttp/guzzle": "~6.0"
  4.     },

  5.     "autoload":{
  6.         "classmap": ["source/class/"]
  7.     }
  8. }
复制代码

三、终端上执行命令 composer install
看到类似这样的执行结果,表示已经安装成功了
  1. Loading composer repositories with package information
  2. Updating dependencies (including require-dev)
  3. Package operations: 10 installs, 0 updates, 0 removals
  4.   - Installing ralouphie/getallheaders (3.0.3): Loading from cache
  5.   - Installing psr/http-message (1.0.1): Loading from cache
  6.   - Installing guzzlehttp/psr7 (1.8.1): Loading from cache
  7.   - Installing guzzlehttp/promises (1.4.1): Loading from cache
  8.   - Installing symfony/polyfill-php72 (v1.19.0): Loading from cache
  9.   - Installing symfony/polyfill-intl-normalizer (v1.19.0): Loading from cache
  10.   - Installing paragonie/random_compat (v2.0.20): Loading from cache
  11.   - Installing symfony/polyfill-php70 (v1.19.0): Loading from cache
  12.   - Installing symfony/polyfill-intl-idn (v1.19.0): Loading from cache
  13.   - Installing guzzlehttp/guzzle (6.5.5): Loading from cache
  14. guzzlehttp/psr7 suggests installing laminas/laminas-httphandlerrunner (Emit PSR-   7 responses)
  15. symfony/polyfill-intl-normalizer suggests installing ext-intl (For best performa   nce)
  16. paragonie/random_compat suggests installing ext-libsodium (Provides a modern cry   pto API that can be used to generate random bytes.)
  17. symfony/polyfill-intl-idn suggests installing ext-intl (For best performance)
  18. guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middle   ware)
  19. Writing lock file
  20. Generating autoload files
  21. 4 packages you are using are looking for funding.
  22. Use the `composer fund` command to find out more!
复制代码
另外,也可以查看项目根目录下的vendor下面的文件,核验新引入的类库是否下载更新成功。
具体如何安装及使用 Composer 请参阅 http://docs.phpcomposer.com

再说在Discuz程序中如何使用 “composer安装”的第三方类库
通过Composer autoload 加载器会把这些第三方库自动加载进来,这些第三方类库程序中的类、方法(函数)等等 在Discuz 程序中你想怎么用都可以。

例如,以使用guzzle为例。在任何一个Discuz X3.1框架下的PHP文件中,直接使用下面代码即可。
  1. use GuzzleHttp\Client;

  2. $client = new Client([
  3.     // Base URI is used with relative requests
  4.     'base_uri' => 'http://httpbin.org',
  5.     // You can set any number of default request options.
  6.     'timeout'  => 2.0,
  7. ]);

  8. $response = $client->get('http://httpbin.org/get');

  9. $code = $response->getStatusCode(); // 200
  10. $reason = $response->getReasonPhrase(); // OK

  11. // Check if a header exists.
  12. if ($response->hasHeader('Content-Length')) {
  13.     echo "It exists";
  14. }
复制代码
另外,Discuz X3.2 也适用上述方法。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|蓄财网 ( 豫ICP备2021002293号 )

GMT+8, 2022-7-3 00:55 , Processed in 0.116065 second(s), 28 queries .

蓄财网 ©版权所有

© 2022 蓄财网(www.aixc.cn)

快速回复 返回顶部 返回列表