Python爬蟲必備技能,xpath的用法和實戰
951
2025-03-31
從某種意義上說,服務提供者有點類似HTTP控制器,HTTP控制器用于為相關路由注冊提供統一管理,而服務提供者用于為相關服務容器提供統一綁定場所,此外服務提供者還可以做一些初始化啟動操作。Laravel的每個核心組件都對應一個服務提供者,可以這么說,服務提供者是Laravel的心臟,是Laravel的核心,核心組件類在這里完成注冊、初始化以供后續調用。
既然這么重要,那么如何在自己的Laravel應用中定義和使用服務提供者呢?IT視頻資源分享列表IT視頻資源分享列表IT視頻資源分享列表,分享是一種積極的生活態度!!!https://mp.weixin.qq.com/s/HqeXW1T_Ftx7CI1wvMTPfQ
1、定義服務類
有了上一節有關服務容器的講述,理解起服務提供者來很簡單。我們這里先定義一個綁定到容器的測試類TestService,為了對類的定義加以約束,我們同時還定義一個契約接口TestContract。
定義TestContract如下:
namespace App\Contracts;
interface TestContract
{
public function callMe($controller);
}
定義TestService如下:
namespace App\Services;
use App\Contracts\TestContract;
class TestService implements TestContract
{
public function callMe($controller)
{
dd('Call Me From TestServiceProvider In '.$controller);
}
}
2、創建服務提供者
接下來我們定義一個服務提供者TestServiceProvider用于注冊該類到容器。創建服務提供者可以使用如下Artisan命令:
php artisan make:provider TestServiceProvider
該命令會在app/Providers目錄下生成一個TestServiceProvider.php文件,我們編輯該文件內容如下:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\TestService;
class TestServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
* @author LaravelAcademy.org
*/
public function register()
{
//使用singleton綁定單例
$this->app->singleton('test',function(){
return new TestService();
});
//使用bind綁定實例到接口以便依賴注入
$this->app->bind('App\Contracts\TestContract',function(){
return new TestService();
});
}
}
可以看到我們使用了兩種綁定方法,更多綁定方法參考服務容器文檔。
3、注冊服務提供者
定義完服務提供者類后,接下來我們需要將該服務提供者注冊到應用中,很簡單,只需將該類追加到配置文件config/app.php的providers數組中即可:
'providers' => [
//其他服務提供者
App\Providers\TestServiceProvider::class,
],
4、測試服務提供者
這樣我們就可以在應用中使用該服務提供者了,為了測試該服務提供者我們首先使用Artisan命令創建一個資源控制器TestController:
php artisan make:controller TestController
然后在路由配置文件routes.php中定義路由:
Route::resource('test','TestController');
最后去TestController中編寫測試代碼:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App;
use App\Contracts\TestContract;
class TestController extends Controller
{
//依賴注入
public function __construct(TestContract $test){
$this->test = $test;
}
/**
* Display a listing of the resource.
*
* @return Response
* @author LaravelAcademy.org
*/
public function index()
{
// $test = App::make('test');
// $test->callMe('TestController');
$this->test->callMe('TestController');
}
...//其他控制器動作
}
然后我們去瀏覽器中訪問http://laravel.app:8000/test,分別測試使用App::make和依賴注入解析綁定類調用callMe方法的輸出,結果一樣,都是:
"Call Me From TestServiceProvider In TestController"
好了,大功告成,是不是很簡單?!
此外,Laravel服務提供者還支持延遲加載,具體可參考服務提供者文檔。
Laravel
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。