在项目研发时,很多时候不是简单的一个项目在运行着,比如你研发一个电商系统,那么必然有客户端,必然有后台,根据业务可能还有物流系统等等。这些项目中基本都会用到一些公共的组件,比如推送、短信、搜索、队列以及数据库模型等。要是每个项目都单独写一套,那么后期维护就显得力不从心了,所以采用公共组件或者服务的形式,多个项目直接引用就方便多了。
本人文笔不是很好,所以下面就直接上干货了。
- 首先登录你的github账号,如果没有注册,那么先去注册了吧。然后新建一个项目,项目名字可以任意取也可以和我的名字一样
pack-test
(反正都是测试)。
2.把github上的pack-test
拉取到本地,如下图
3.因为是基于自动加载机制,接下来就是composer配置了,首先切换到pack-test目录,然后命令行运行composer init
这个是在当前目录配置composer的意思,然后命令行中会要求输入一些基本配置信息,包括报名、作者、版本等,如果不是很明白这些配置,请移步composer教程,填写完成之后,就直接运行composer install
安装即可,环境基本搭建完成,下面贴一个我的图:
下面就是相关文件的代码了,同学自己去看吧
Service.php
namespace Pack\Test;
class Service
{
public function __construct()
{
}
public function hello()
{
return 'hello world!!';
}
}
test.php
require_once __DIR__ . '/vendor/autoload.php';
use Pack\Test\Service;
$obj = new Service();
$msg = $obj->hello();
var_dump($msg);
composer.json
{
"name": "pack/test",
"description": "pack test",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "brucelli",
"email": "brucelli1993@gmail.com"
}
],
"minimum-stability": "stable",
"autoload": {
"psr-4": {
"Pack\\Test\\": "src/"
}
},
"require": {}
}
autoload_psr4.php
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Pack\\Test\\' => array($baseDir . '/src'),
);
autoload_static.php
namespace Composer\Autoload;
class ComposerStaticInitda0d8c2657ac15f2ea7ec7835540a0dd
{
public static $prefixLengthsPsr4 = array (
'P' =>
array (
'Pack\\Test\\' => 10,
),
);
public static $prefixDirsPsr4 = array (
'Pack\\Test\\' =>
array (
0 => __DIR__ . '/../..' . '/src',
),
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitda0d8c2657ac15f2ea7ec7835540a0dd::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitda0d8c2657ac15f2ea7ec7835540a0dd::$prefixDirsPsr4;
}, null, ClassLoader::class);
}
}
因为只是测试,所以代码很少,直接运行test.php php test.php
,出现如下结果:
5.将代码提交到github,然后将这个包引入项目,这里我以YII2为例子,首先在项目的composer.json中的require中添加需要引入的包,前面的pack/test
是前面定义的包名,后面的dev-master
指的的master分支
6.指定自定义包的引入地址,如下图
7.更新指定的包,即更新测试包
8.就是测试项目中包能否运行了,在YII2中添加命令行
HelloController.php
namespace app\commands;
use yii\console\Controller;
use yii\console\ExitCode;
use Pack\Test\Service;
/**
* This command echoes the first argument that you have entered.
*
* This command is provided as an example for you to learn how to create console commands.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class HelloController extends Controller
{
/**
* This command echoes what you have entered as the message.
* @param string $message the message to be echoed.
* @return int Exit code
*/
public function actionIndex($message = 'hello world')
{
echo $message . "\n";
return ExitCode::OK;
}
public function actionPack()
{
$obj = new Service();
$msg = $obj->hello();
echo $msg;
return ExitCode::OK;
}
}
最后的最后在命令行运行代码php yii hello/pack
,不出意外,看到如图结果。
恭喜你又学会了一个神奇的操作。感谢同学的细心阅读,有缘江湖再见了。