1 自己创建一个ServiceProvider的步骤
1.1 创建服务提供者
php artisan make:provider FamilyServiceProvider
执行成功后会出现这个文件 appProvidersFamilyServiceProvider.php
<?php namespace AppProviders; use IlluminateSupportServiceProvider; class FamilyServiceProvider extends ServiceProvider { /** * Register services. * * @return void */ public function register() { } /** * Bootstrap services. * * @return void */ public function boot() { // } }
1.2 创建服务
1.2.1 appServiceFamilyFamilyService.php

<?php namespace AppServiceFamily; class FamilyService { public function __construct(PersonService $person,TvService $tv) { $this->person = $person; echo 'Family实例创建成功 <br>'; } public function testabc() { $this->person->test(); } }
1.2.2 appServiceFamilyPersonService.php

<?php namespace AppServiceFamily; class PersonService { public function __construct(Walk $walk) { echo "person实例创建成功</br>"; } public function test() { echo "我是person类中的方法"; } }
1.2.3 appServiceFamilyTvService.php

<?php namespace AppServiceFamily; class TvService { public function __construct() { echo "Tv实例创建成功</br>"; } public function test() { echo "我是tv类中的方法"; } }
1.2.4 appServiceFamilyWalk.php

<?php namespace AppServiceFamily; class Walk { public function __construct() { echo "Walk的实例创建成功<br>"; } }
1.3在 providers数组里声明服务提供者
configapp.php
/* * Package Service Providers... */ AppProvidersFamilyServiceProvider::class,
1.4 在服务提供者里注册服务
public function register() { //第1种方式 $this->app->singleton('Family', function () { return FamilyService(new PersonService(),new TvService()); }); //第2种方式 //$this->app->bind(FamilyService::class); //$this->app->bind("AppServiceFamilyFamilyService"); //第3种方式 //$this->app->bind("Family","AppServiceFamilyFamilyService"); }
1.5 使用
routesweb.php
Route::get('/', function () { // 别名的方式 // app("Family")->testabc(); // 完全路径调用 app('AppServiceFamilyFamilyService')->testabc(); // return view('welcome'); });
2 yansongda/laravel-pay 支付服务
2.1 安装
composer require yansongda/laravel-pay
* 如果不是laravel 用 yansongda/pay
vendoryansongdalaravel-paysrcPayServiceProvider.php
public function register() { $this->mergeConfigFrom(dirname(__DIR__).'/config/pay.php', 'pay'); $this->app->singleton('pay.alipay', function () { return Pay::alipay(config('pay.alipay')); }); $this->app->singleton('pay.wechat', function () { return Pay::wechat(config('pay.wechat')); }); }
2.2 使用说明
https://packagist.org/packages/yansongda/laravel-pay
https://github.com/yansongda/pay
2.3 注册
laravel >5.5 自动注册
php artisan vendor:publish --provider="YansongdaLaravelPayPayServiceProvider" --tag=laravel-pay
vendorlaravelframeworksrcIlluminateContractsFoundationApplication.php
'yansongda/laravel-pay' => array ( 'providers' => array ( 0 => 'Yansongda\LaravelPay\PayServiceProvider', ), 'aliases' => array ( 'Pay' => 'Yansongda\LaravelPay\Facades\Pay', ), ),
configpay.php

<?php return [ 'alipay' => [ // 支付宝分配的 APPID 'app_id' => env('ALI_APP_ID', ''), // 支付宝异步通知地址 'notify_url' => '', // 支付成功后同步通知地址 'return_url' => '', // 阿里公共密钥,验证签名时使用 'ali_public_key' => env('ALI_PUBLIC_KEY', ''), // 自己的私钥,签名时使用 'private_key' => env('ALI_PRIVATE_KEY', ''), // 使用公钥证书模式,请配置下面两个参数,同时修改 ali_public_key 为以 .crt 结尾的支付宝公钥证书路径,如(./cert/alipayCertPublicKey_RSA2.crt) // 应用公钥证书路径 // 'app_cert_public_key' => './cert/appCertPublicKey.crt', // 支付宝根证书路径 // 'alipay_root_cert' => './cert/alipayRootCert.crt', // optional,默认 warning;日志路径为:sys_get_temp_dir().'/logs/yansongda.pay.log' 'log' => [ 'file' => storage_path('logs/alipay.log'), // 'level' => 'debug' // 'type' => 'single', // optional, 可选 daily. // 'max_file' => 30, ], // optional,设置此参数,将进入沙箱模式 // 'mode' => 'dev', ], 'wechat' => [ // 公众号 APPID 'app_id' => env('WECHAT_APP_ID', ''), // 小程序 APPID 'miniapp_id' => env('WECHAT_MINIAPP_ID', ''), // APP 引用的 appid 'appid' => env('WECHAT_APPID', ''), // 微信支付分配的微信商户号 'mch_id' => env('WECHAT_MCH_ID', ''), // 微信支付异步通知地址 'notify_url' => '', // 微信支付签名秘钥 'key' => env('WECHAT_KEY', ''), // 客户端证书路径,退款、红包等需要用到。请填写绝对路径,linux 请确保权限问题。pem 格式。 'cert_client' => '', // 客户端秘钥路径,退款、红包等需要用到。请填写绝对路径,linux 请确保权限问题。pem 格式。 'cert_key' => '', // optional,默认 warning;日志路径为:sys_get_temp_dir().'/logs/yansongda.pay.log' 'log' => [ 'file' => storage_path('logs/wechat.log'), // 'level' => 'debug' // 'type' => 'single', // optional, 可选 daily. // 'max_file' => 30, ], // optional // 'dev' 时为沙箱模式 // 'hk' 时为东南亚节点 // 'mode' => 'dev', ], ];
dd(app());
可以看到 不用写一行代码 就已经注册到bindings数组里了。