1、第一步在自己项目中根目录(和app同目录)创建packages目录,进入packages目录创建www目录(最好是作者名之类的),进入www目录创建扩展包名,我们这里是测试,所以就叫packagetest,进入packagetest创建src目录,src下就是放置我们代码的地方。
2、修改项目根目录下composer.json
"autoload": {
"psr-4": {
"App\\": "app/",
"Www\\": "packages/www/packagetest/src/"
},
},
3、执行composer dump-autoload
4、src 目录创建PackageTestService.php具体代码
<?php
namespace Www;
class PackageTestService {
public function do(){
echo "This is test package ...";
}
}
5、src下创建服务提供者
<?php
namespace Www;
use Illuminate\Support\ServiceProvider;
use Www\PackageTestService;
class PackageTestProvider extends ServiceProvider {
public function boot()
{
$this->publishes([
__DIR__.'/config/packagetest.php' => config_path('packagetest.php'), // 发布配置文件到 laravel 的config 下
]);
}
public function register()
{
$this->app->singleton('packagetest', function () {
return new PackageTestService();
});
}
6、src下创建config目录用来配置参数文件 config/packagetest.php
<?php
return [
];
7、如果想使用门面,可以创建一个门面Facades目录 Facades/PackageTest.php
<?php
namespace Www\Facades;
use Illuminate\Support\Facades\Facade;
class PackageTest extends Facade {
protected static function getFacadeAccessor()
{
// TODO: Change the autogenerated stub
return "packagetest";
}
}
8、根目录config/app.php下注册服务
'providers' => [
……
Www\PackageTestProvider::class,
],
'aliases' => [
……
'PackageTest' => Www\Facades\PackageTest::class,
],
9、测试
<?php
namespace App\Http\Controllers;
use Www\Facades\PackageTest;
class TestController extends Controller
{
public function index()
{
PackageTest::do();
}
}
10、发布扩展包
php artisan vendor:publish
在packages/www/packagetest/目录下执行
composer init
生成composer.json
{
"name": "www/packagetest",
"description": "packagetest",
"authors": [
{
"name": "name",
"email": "email@qq.com"
}
],
"require": {}
}
最后我们说 修改根目录的composer.json ,我们要发布我们的包,让所有人都能使用 composer 安装,那么执行如下步骤
去掉 添加的 那行 "Www\\": "packages/www/packagetest/src/"
然后 修改 packages/www/packagetest/composer.json 添加 autoload:
"autoload": {
"psr-4": {
"Www\\": "src/"
}
},
在github创建个项目,将www目录的代码推送到github上。
打开https://packagist.org/ 注册个账号,提交git的地址就可以了。
最后,如果拓展包第三方没有提供 composer 安装方法,手动将其放在vendor目录下,那么,就需要手动添加需要自动加载的目录或者文件。
在根目录composer.json
文件里的 autoload
的classmap
里加上第三方包的文件夹路径,如果是单独自动加载某个文件,则将其放在 files 里面,执行composer dump-autoload
。
例如:"vendor/www"
"autoload": {
"psr-4": {
"App\\": "app/"
},
"classmap": [
"vendor/www"
],
"files":[
"app/functions.php",
"vendor/www/packagetest/src/Functions.php"
]
},