向IOC 容器添加自己的类
程序员文章站
2022-06-09 23:34:03
...
从上一篇文章知道,serviceprovider是管理container的,所以在向container添加了自己的类的时候,也要注册serviceprovider来管理
1.创建自定义的类
需要注意的是,laravel能够对自身app目录内的php 类进行自动加载,只要是符合psr4的命名规则就行
app/Billing/Stripe.php //这里在app下建立了一个Billing目录,里面放了一个Stripe的类2.创建service provider
用这个命令创建
php artisan make:provider BillingServiceProviderapp/Providers/BillingServiceProvider.php //创建成功后会在这个目录生成php文件app->bind('billing',function(){ //这里用了bind方法来创建一个container,绑定了一个billing的关键字来关联,这个container里会返回一个Stripe实例,相当于实例化了。 return new Stripe(); }); }}3.注册service provider
在app.php里注册了才能被laravel识别这个service provider,才能在代码里面调用
config/app.php 'providers' => [ //在providers数组里面添加 /* * Laravel Framework Service Providers... */ Illuminate\Auth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Filesystem\FilesystemServiceProvider::class, Illuminate\Foundation\Providers\FoundationServiceProvider::class, Illuminate\Hashing\HashServiceProvider::class, Illuminate\Mail\MailServiceProvider::class, Illuminate\Pagination\PaginationServiceProvider::class, Illuminate\Pipeline\PipelineServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Redis\RedisServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, Illuminate\Session\SessionServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, Collective\Html\HtmlServiceProvider::class, 'Maatwebsite\Excel\ExcelServiceProvider', /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, App\Providers\BillingServiceProvider::class, //按照格式添加即可 ],4.管理路由(测试)
主要是为了测试目的,所以在路由里面直接来测试service provider
app/Http/routes.php//这里有两种方式使用,第一种是跟上一篇文章提到的两种container使用方式有关,第二种是通过自动解析机制来实现//Route::get('/', function () {// $billing = app('billing'); //用直接传入关键字,也可以用make()// dd($billing->charge());//});Route::get('/', function (App\Billing\Stripe $billing) { //传入一个class名字和一个变量,laravel会自动去寻找和解析 dd($billing->charge());});
上一篇: PHP jQuery表单,带验证具体实现方法_PHP
下一篇: EventBus3.0使用及原理笔记