ໃນຄໍາສັບຕ່າງໆອື່ນໆ, ຜູ້ໃຫ້ບໍລິການແມ່ນຄ້າຍຄືຊ່ອງທາງທີ່ພວກເຮົາເອົາ "ຫ້ອງຮຽນ" ນໍ້າມັນເຊື້ອໄຟເຂົ້າໄປໃນຖັງທີ່ເອີ້ນວ່າ "ຕູ້ບໍລິການ" ຂອງເຄື່ອງຈັກທີ່ເອີ້ນວ່າ Laravel.
ຖ້າພວກເຮົາເປີດ config/app.php ພວກເຮົາຈະເຫັນ array ທີ່ມີຊື່ "ຜູ້ໃຫ້ບໍລິການ"
'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,
.
.
.
],
ເຫຼົ່ານີ້ແມ່ນບາງຜູ້ໃຫ້ບໍລິການທີ່ສະຫນອງໃຫ້ພ້ອມກັບ Laravel, i.e. ການບໍລິການພື້ນຖານທີ່ວາງໄວ້ໃນຖັງບໍລິການ.
service provider
ພວກເຂົາເຈົ້າໄດ້ຖືກປະຕິບັດ?ຖ້າພວກເຮົາເບິ່ງເອກະສານ ຕາມການຮ້ອງຂໍວົງຈອນຊີວິດ , ໄຟລ໌ຕໍ່ໄປນີ້ຖືກປະຕິບັດໃນຕອນເລີ່ມຕົ້ນ:
public/index.php
bootstrap/app.php
app/Http/Kernel.php
ແລະລາວ Middlewares
Service Providers
: ເນື້ອໃນຂອງບົດຄວາມນີ້ເຊິ່ງ service provider
ເຂົາເຈົ້າໂຫຼດແລ້ວບໍ?
ເຫຼົ່ານັ້ນ definited ໃນ array ໄດ້ config/app.php
:
return [
// ... other configuration values
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
// ... other framework providers from /vendor
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
/*
* PUBLIC Service Providers - the ones we mentioned above
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
],
];
ດັ່ງທີ່ພວກເຮົາສາມາດເຫັນໄດ້, ມີບັນຊີລາຍຊື່ຂອງ service provider
ບໍ່ແມ່ນສາທາລະນະໃນໂຟນເດີ /vendor
, ພວກເຮົາບໍ່ຄວນແຕະຕ້ອງ ຫຼືແກ້ໄຂພວກມັນ. ຄົນທີ່ພວກເຮົາສົນໃຈແມ່ນຂ້າງລຸ່ມນີ້, ມີ BroadcastServicerProvider
ປິດການໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ, ອາດຈະເປັນຍ້ອນວ່າມັນບໍ່ຄ່ອຍໄດ້ໃຊ້.
ຜູ້ໃຫ້ບໍລິການທັງຫມົດເຫຼົ່ານີ້ດໍາເນີນການຈາກເທິງຫາລຸ່ມ, ຊ້ໍາບັນຊີລາຍຊື່ ສອງເທື່ອ:
register()
, ເປັນປະໂຫຍດສໍາລັບການປະຕິບັດ (ອາດຈະເປັນ) ບາງສິ່ງບາງຢ່າງທີ່ກໍາຫນົດຄ່າກ່ອນວິທີການ boot()
.boot()
ຂອງຜູ້ໃຫ້ບໍລິການທັງຫມົດ. ອີກເທື່ອຫນຶ່ງ, ຫນຶ່ງໂດຍຫນຶ່ງ, ຈາກເທິງຫາລຸ່ມສຸດ, ຂອງ array 'providers'
.I Service Providers
ລວມຢູ່ໃນ Laravel, ແມ່ນທັງຫມົດທີ່ຢູ່ໃນໂຟນເດີ app/Providers
:
AppServiceProvider
AuthServiceProvider
BroadcastServiceProvider
EventServiceProvider
RouteServiceProvider
ພວກເຂົາເຈົ້າແມ່ນຫ້ອງຮຽນ PHP ທັງຫມົດ, ແຕ່ລະຄົນກ່ຽວຂ້ອງກັບຫົວຂໍ້ຂອງຕົນເອງ: App
, Auth
, Broadcasting
, Events
e Routes
. ແຕ່ພວກເຂົາທັງຫມົດມີສິ່ງຫນຶ່ງທີ່ຄ້າຍຄືກັນ: ວິທີການ boot()
.
ພາຍໃນວິທີການນັ້ນ, ພວກເຮົາສາມາດຂຽນລະຫັດໃດໆທີ່ກ່ຽວຂ້ອງກັບຫນຶ່ງໃນພາກສ່ວນເຫຼົ່ານັ້ນ: auth
, events
, route
, ແລະອື່ນໆ. ໃນຄໍາສັບຕ່າງໆອື່ນໆ, ຜູ້ໃຫ້ບໍລິການແມ່ນພຽງແຕ່ຫ້ອງຮຽນເພື່ອລົງທະບຽນບາງຫນ້າທີ່ທົ່ວໂລກ.
ພວກເຂົາຖືກແຍກອອກເປັນ "ຜູ້ໃຫ້ບໍລິການ" ເພາະວ່າພວກເຂົາແລ່ນໄວຫຼາຍໃນວົງຈອນຊີວິດຂອງແອັບພລິເຄຊັນ, ສະນັ້ນມັນສະດວກທີ່ຈະມີບາງສິ່ງບາງຢ່າງທົ່ວໂລກຢູ່ທີ່ນີ້ກ່ອນທີ່ສະຄິບປະຕິບັດຈະໄປຫາຕົວແບບຫຼືຕົວຄວບຄຸມ.
ຈໍານວນຫນ້າທີ່ສູງສຸດແມ່ນຢູ່ໃນ RouteServiceProvider, ນີ້ແມ່ນລະຫັດ:
class RouteServiceProvider extends ServiceProvider
{
public const HOME = '/dashboard';
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('api')
->middleware('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->group(base_path('routes/web.php'));
});
}
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
}
}
ນີ້ແມ່ນຫ້ອງຮຽນທີ່ໄຟລ໌ຖືກຕັ້ງຄ່າ route
ມີ routes/web.php
e routes/api.php
ລວມຢູ່ຕາມຄ່າເລີ່ມຕົ້ນdefiນິຕາ. ໃຫ້ສັງເກດວ່າສໍາລັບ API ຍັງມີການຕັ້ງຄ່າທີ່ແຕກຕ່າງກັນ: Endpoint prefix /api
ແລະເຄື່ອງກາງ api
ສໍາລັບທັງຫມົດ routes
.
ພວກເຮົາສາມາດປັບປຸງແກ້ໄຂ service providers
, ທີ່ບໍ່ໄດ້ຢູ່ໃນໂຟນເດີ /vendor
. ການປັບແຕ່ງໄຟລ໌ເຫຼົ່ານີ້ແມ່ນເຮັດໄດ້ເມື່ອທ່ານມີຫຼາຍເສັ້ນທາງ ແລະຕ້ອງການແຍກພວກມັນອອກເປັນໄຟລ໌ສະເພາະ. ເຈົ້າສ້າງ routes/auth.php
ແລະວາງເສັ້ນທາງໃສ່ບ່ອນນັ້ນ, ຫຼັງຈາກນັ້ນທ່ານ "ເປີດໃຊ້" ໄຟລ໌ນັ້ນໃນວິທີການ boot()
di RouteServiceProvider
, ພຽງແຕ່ເພີ່ມປະໂຫຍກທີສາມ:
`Route::middleware('web') // or maybe you want another middleware?
->group(base_path('routes/auth.php'));
AppServiceProvider
ມັນຫວ່າງເປົ່າ. ຕົວຢ່າງປົກກະຕິຂອງການເພີ່ມລະຫັດ AppServiceProvider
, ແມ່ນກ່ຽວກັບການປິດການໂຫຼດ lazy ໃນ Eloquent. ເພື່ອເຮັດສິ່ງນີ້, ທ່ານພຽງແຕ່ຕ້ອງການ ເພີ່ມສອງແຖວ ໃນວິທີການ boot()
:
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot()
{
Model::preventLazyLoading(! $this->app->isProduction());
}
ນີ້ຈະຖິ້ມຂໍ້ຍົກເວັ້ນຖ້າແມ່ແບບຄວາມສໍາພັນບໍ່ໄດ້ຖືກໂຫລດ.
service provider
ລູກຄ້ານອກເຫນືອໄປຈາກກ່ອນdefinited ທີ່ມີຢູ່ແລ້ວ, ພວກເຮົາສາມາດສ້າງໃຫມ່ໄດ້ຢ່າງງ່າຍດາຍ Service Provider
, ກ່ຽວຂ້ອງກັບຫົວຂໍ້ອື່ນໆກ່ວາຫົວຂໍ້ທີ່ຜ່ານມາdefiຈະແຈ້ງເປັນ auth
/event
/routes
.
ຕົວຢ່າງທີ່ຂ້ອນຂ້າງປົກກະຕິແມ່ນການຕັ້ງຄ່າທີ່ກ່ຽວຂ້ອງກັບການເບິ່ງ Blade
. ພວກເຮົາສາມາດສ້າງຄໍາສັ່ງ Blade
, ແລະຫຼັງຈາກນັ້ນຕື່ມລະຫັດນັ້ນເຂົ້າໄປໃນວິທີການ boot(
) ຂອງໃດໆ service provider
, ລວມທັງຄ່າເລີ່ມຕົ້ນ AppServiceProvider
. ຕອນນີ້ໃຫ້ສ້າງ a ViewServiceProvider
ແຍກ.
ພວກເຮົາສາມາດສ້າງມັນດ້ວຍຄໍາສັ່ງນີ້:
php artisan make:provider ViewServiceProvider
ເຊິ່ງຈະສ້າງຊັ້ນຮຽນກ່ອນdefiກາງຄືນ:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
ດັ່ງທີ່ພວກເຮົາເຫັນພາຍໃນມີສອງວິທີ:
ວິທີການລົງທະບຽນ () ອະນຸຍາດໃຫ້ພວກເຮົາ definish ການເຊື່ອມຕໍ່ກັບຖັງບໍລິການຂອງພວກເຮົາ. ຕົວຢ່າງ, ໃນລະຫັດຕໍ່ໄປນີ້:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->app ແມ່ນຕົວແປທົ່ວໂລກໃນ laravel ທີ່ສາມາດເຂົ້າເຖິງຫ້ອງຮຽນ singleton ຜ່ານແອັບ.
Singleton ແມ່ນລັກສະນະ. ໃນເວລາທີ່ການນໍາໃຊ້ຄຸນສົມບັດນີ້, ພວກເຮົາກໍາລັງແຈ້ງໃຫ້ກັບຄໍາຮ້ອງສະຫມັກວ່າຊັ້ນໃດກໍຕາມທີ່ຖືກຜ່ານເປັນພາລາມິເຕີໃນ app ຄວນຈະມີພຽງແຕ່ຫນຶ່ງໃນຄໍາຮ້ອງສະຫມັກທັງຫມົດ. ນີ້ຫມາຍຄວາມວ່າ MyClass ຈະຖືກແກ້ໄຂຄັ້ງດຽວແລະຈະມີຕົວຢ່າງດຽວເທົ່ານັ້ນ, ເຊິ່ງສາມາດເຂົ້າເຖິງໄດ້ໂດຍໃຊ້ຕົວແປ my_class.
ວິທີການ boot() ອະນຸຍາດໃຫ້ທ່ານເຂົ້າເຖິງການບໍລິການທັງຫມົດທີ່ລົງທະບຽນກ່ອນຫນ້ານີ້ໂດຍໃຊ້ວິທີການລົງທະບຽນ. ຫຼັງຈາກນັ້ນທ່ານສາມາດລວມເອົາການບໍລິການທັງຫມົດໃນຄໍາຮ້ອງສະຫມັກຂອງທ່ານໂດຍໃຊ້ວິທີນີ້.
ກັບຄືນໄປຫາຕົວຢ່າງທີ່ຜ່ານມາ, ໃຫ້ເອົາວິທີການອອກ register()
ແລະພາຍໃນ boot()
ເພີ່ມລະຫັດຄໍາສັ່ງ Blade:
use Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::directive('datetime', function ($expression) {
return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
});
}
ຕົວຢ່າງອີກອັນຫນຶ່ງຂອງ ViewServiceProvider
ນັບຖື View Composers
, ນີ້ແມ່ນ snippet ໄດ້ ຈາກເວັບໄຊທ໌ທາງການ Laravel :
use App\View\Composers\ProfileComposer;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ViewServiceProvider extends ServiceProvider
{
public function boot()
{
// Using class based composers...
View::composer('profile', ProfileComposer::class);
// Using closure based composers...
View::composer('dashboard', function ($view) {
//
});
}
}
ເພື່ອດໍາເນີນການ, ຜູ້ໃຫ້ບໍລິການໃຫມ່ນີ້ຕ້ອງໄດ້ຮັບການເພີ່ມ / ລົງທະບຽນກັບ array ຜູ້ໃຫ້ບໍລິການ config/app.php
:
return [
// ... other configuration values
'providers' => [
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
// Add your provider here
App\Providers\ViewServiceProvider::class,
],
];
Ercole Palmeri
ທ່ານອາດຈະສົນໃຈໃນ:
ວັນຈັນທີ່ຜ່ານມາ, Financial Times ໄດ້ປະກາດຂໍ້ຕົກລົງກັບ OpenAI. FT ອະນຸຍາດໃຫ້ນັກຂ່າວລະດັບໂລກຂອງຕົນ…
ຫລາຍລ້ານຄົນຈ່າຍຄ່າບໍລິການສະຕີມ, ຈ່າຍຄ່າທໍານຽມການສະຫມັກປະຈໍາເດືອນ. ມັນເປັນຄວາມຄິດເຫັນທົ່ວໄປທີ່ທ່ານ…
Coveware ໂດຍ Veeam ຈະສືບຕໍ່ໃຫ້ບໍລິການຕອບໂຕ້ເຫດການ extortion cyber. Coveware ຈະສະ ເໜີ ຄວາມສາມາດດ້ານນິຕິສາດແລະການແກ້ໄຂ…
ການຮັກສາການຄາດເດົາແມ່ນການປະຕິວັດຂະແໜງນ້ຳມັນ ແລະ ອາຍແກັສ, ດ້ວຍແນວທາງນະວັດຕະກໍາ ແລະ ຕັ້ງໜ້າໃນການຄຸ້ມຄອງພືດ.…