在項(xiàng)目研發(fā)時(shí)荆永,很多時(shí)候不是簡(jiǎn)單的一個(gè)項(xiàng)目在運(yùn)行著,比如你研發(fā)一個(gè)電商系統(tǒng)国章,那么必然有客戶(hù)端屁魏,必然有后臺(tái),根據(jù)業(yè)務(wù)可能還有物流系統(tǒng)等等捉腥。這些項(xiàng)目中基本都會(huì)用到一些公共的組件氓拼,比如推送、短信、搜索桃漾、隊(duì)列以及數(shù)據(jù)庫(kù)模型等坏匪。要是每個(gè)項(xiàng)目都單獨(dú)寫(xiě)一套,那么后期維護(hù)就顯得力不從心了撬统,所以采用公共組件或者服務(wù)的形式适滓,多個(gè)項(xiàng)目直接引用就方便多了。
本人文筆不是很好恋追,所以下面就直接上干貨了凭迹。
- 首先登錄你的github賬號(hào),如果沒(méi)有注冊(cè)苦囱,那么先去注冊(cè)了吧嗅绸。然后新建一個(gè)項(xiàng)目,項(xiàng)目名字可以任意取也可以和我的名字一樣
pack-test
(反正都是測(cè)試)撕彤。
2.把github上的pack-test
拉取到本地鱼鸠,如下圖
3.因?yàn)槭腔谧詣?dòng)加載機(jī)制,接下來(lái)就是composer配置了,首先切換到pack-test目錄羹铅,然后命令行運(yùn)行composer init
這個(gè)是在當(dāng)前目錄配置composer的意思蚀狰,然后命令行中會(huì)要求輸入一些基本配置信息,包括報(bào)名职员、作者麻蹋、版本等,如果不是很明白這些配置焊切,請(qǐng)移步composer教程,填寫(xiě)完成之后扮授,就直接運(yùn)行composer install
安裝即可,環(huán)境基本搭建完成蛛蒙,下面貼一個(gè)我的圖:
下面就是相關(guān)文件的代碼了,同學(xué)自己去看吧
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);
}
}
因?yàn)橹皇菧y(cè)試抖格,所以代碼很少诺苹,直接運(yùn)行test.php php test.php
,出現(xiàn)如下結(jié)果:
5.將代碼提交到github,然后將這個(gè)包引入項(xiàng)目雹拄,這里我以YII2為例子收奔,首先在項(xiàng)目的composer.json中的require中添加需要引入的包,前面的pack/test
是前面定義的包名滓玖,后面的dev-master
指的的master分支
6.指定自定義包的引入地址坪哄,如下圖
7.更新指定的包,即更新測(cè)試包
8.就是測(cè)試項(xiàng)目中包能否運(yùn)行了,在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;
}
}
最后的最后在命令行運(yùn)行代碼php yii hello/pack
,不出意外翩肌,看到如圖結(jié)果模暗。
恭喜你又學(xué)會(huì)了一個(gè)神奇的操作。感謝同學(xué)的細(xì)心閱讀念祭,有緣江湖再見(jiàn)了兑宇。