Artikel

Panyadia Ladenan di Laravel: naon aranjeunna sareng kumaha ngagunakeun Panyadia Ladenan di Laravel

Panyadia ladénan Laravel mangrupikeun pusat dimana aplikasi dimimitian. Nyaéta, jasa Laravel inti sareng jasa aplikasi, kelas, sareng katergantunganna disimpen dina wadah jasa liwat panyadia. 

Dina basa sejen, panyadia ladenan téh kawas corong ngaliwatan nu urang tuang suluh "kelas" kana tank disebut "wadah jasa" mesin disebut Laravel.

conto

Lamun urang muka config/app.php urang bakal ningali hiji Asép Sunandar Sunarya kalawan nami "panyadia"

'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,
        .
        .
        .
],

Ieu mangrupikeun sababaraha panyadia ladenan anu disayogikeun sareng laravel, nyaéta jasa dasar anu disimpen dina wadah jasa.

Nalika abdi service provider aranjeunna dilaksanakeun?

Lamun urang nempo dokuméntasi on pamundut lifecycle , file di handap ieu dijalankeun dina mimiti:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php sareng na Middlewares
  • Service Providers: eusi artikel ieu

Kang service provider aranjeunna dimuat? 

Éta maranéhanana definites dina Asép Sunandar Sunarya 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,
 
    ],
 
];

Sakumaha urang tiasa tingali, aya daptar service provider teu publik dina folder /vendor, urang henteu kedah nyabak atanapi ngarobih aranjeunna. Jalma anu dipikaresep ku urang handap, jeung BroadcastServicerProvider ditumpurkeun sacara standar, meureun sabab jarang dipaké.

Sadaya panyadia ladenan ieu ngajalankeun ti luhur ka handap, malikan daptar dua kali:

  • Iteration munggaran néangan hiji metodeu pilihan register(), mangpaat pikeun (antukna) ngalaksanakeun hal anu dikonpigurasi sateuacan metodeu boot().
  • iteration kadua executes metoda boot() sadaya panyadia. Deui, hiji-hiji, luhur ka handap, tina susunan 'providers'.
  • Tungtungna, saatos sadaya panyadia ladenan parantos diolah, Laravel ngalih ka parsing jalur (rute), ngajalankeun controller, nganggo témplat, jsb.

Panyadia jasa Laravel pradefihenteu

I Service Providers kaasup dina Laravel, nyaeta sakabeh jalma anu aya dina polder app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Éta sadayana kelas PHP, masing-masing aya hubunganana sareng topikna sorangan: App, Auth, Broadcasting, Events e Routes. Tapi aranjeunna sadayana gaduh hiji hal anu umum: metode boot().

Di jero metode éta, urang tiasa nyerat kode naon waé anu aya hubunganana sareng bagian-bagian éta: auth, events, route, jsb. Kalayan kecap sanésna, Panyadia Ladénan ngan ukur kelas pikeun ngadaptarkeun sababaraha fungsionalitas global.

Aranjeunna misah salaku "panyadia" sabab ngajalankeun pisan mimiti dina lifecycle aplikasi, jadi hal global merenah didieu saméméh skrip executing meunang Models atanapi Controllers.

Kaseueuran pungsionalitasna aya dina RouteServiceProvider, ieu kodeu:

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());
        });
    }
}

Ieu mangrupikeun kelas dimana file dikonpigurasi routejeung routes/web.phproutes/api.php kaasup sacara standardefinita. Catet yén pikeun API ogé aya konfigurasi anu béda: Awalan Endpoint /api jeung middleware api pikeun sakabéh routes.

Urang tiasa ngedit service providers, nu teu aya dina folder /vendor. Nyaluyukeun file ieu dilakukeun nalika anjeun gaduh seueur jalur sareng hoyong misahkeun kana file khusus. Anjeun nyiptakeun routes/auth.php sareng nempatkeun jalur éta, teras anjeun "ngaktipkeun" file éta dina metodeu boot() di RouteServiceProvider, tambahkeun kalimah katilu:

`Route::middleware('web') // or maybe you want another middleware?
    ->group(base_path('routes/auth.php'));

AppServiceProvider éta kosong. Hiji conto has pikeun nambahkeun kode AppServiceProvider, nyaeta ngeunaan nganonaktipkeun puguh loading dina Eloquent. Jang ngalampahkeun ieu, anjeun ngan perlu tambahkeun dua garis dina métode boot():

newsletter inovasi
Entong luput warta anu paling penting ngeunaan inovasi. Ngadaptar pikeun nampa aranjeunna ku email.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Ieu bakal buang iwal lamun model hubungan teu dimuat.

Ngadamel sorangan service provider ngaropéa

Sajaba ti file predefinites, urang bisa kalayan gampang nyieun nu anyar Service Provider, patali jeung jejer sejenna ti maranéhanana predefiréngsé salaku auth/event/routes.

Conto anu cukup umum nyaéta konfigurasi tampilan Blade. Urang tiasa ngadamel diréktif Blade, teras tambahkeun kode éta kana metodeu boot() tina sagala service provider, kaasup standar AppServiceProvider. Hayu urang ayeuna nyieun a ViewServiceProvider misahkeun.

Urang tiasa ngahasilkeun éta kalayan paréntah ieu:

php artisan make:provider ViewServiceProvider

Nu bakal ngahasilkeun kelas jadi predefipeuting:

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()
    {
        //
    }
}

Sakumaha urang tingali di jero aya dua metode:

Métode register ().

Metodeu register () ngamungkinkeun urang pikeun definish Tumbu ka wadahna jasa kami. Contona, dina kode handap:

public function register()
{
    $this->app->singleton(my_class, function($app){
        return new MyClass($app);
    });
}

$this->app mangrupikeun variabel global dina laravel anu tiasa diaksés ku kelas tunggal ngalangkungan aplikasi.

Singleton mangrupikeun fitur. Nalika nerapkeun fitur ieu, kami nginpokeun ka aplikasi yén kelas naon waé anu disalurkeun salaku parameter dina aplikasi ngan ukur gaduh hiji conto dina sadaya aplikasi. Ieu ngandung harti yén MyClass bakal direngsekeun sakali sarta bakal boga ngan hiji conto, nu bisa diaksés maké variabel my_class.

Métode boot().

Metodeu boot () ngamungkinkeun anjeun ngaksés sadaya jasa anu kadaptar sateuacana nganggo metode register. Anjeun teras tiasa ngalebetkeun sadayana jasa dina aplikasi anjeun nganggo metode ieu.

Balik deui ka conto sateuacana, hayu urang hapus metodeu register() jeung jero boot() tambahkeun kode diréktif Blade:

use Illuminate\Support\Facades\Blade;
 
public function boot()
{
    Blade::directive('datetime', function ($expression) {
        return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
    });
}

conto sejen tina ViewServiceProvider hal View Composers, ieu snippet ti situs resmi 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) {
            //
        });
    }
}

Pikeun ngajalankeun, panyadia anyar ieu kudu ditambahkeun/didaptarkeun kana di array panyadia 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

Anjeun tiasa ogé resep:

newsletter inovasi
Entong luput warta anu paling penting ngeunaan inovasi. Ngadaptar pikeun nampa aranjeunna ku email.

Artikel panganyarna

Masa Depan Ieu Ieu: Kumaha Industri Pengiriman Revolutionizing Ékonomi Global

Sektor angkatan laut mangrupikeun kakuatan ékonomi global anu leres, anu nuju ka arah pasar 150 milyar ...

1 Méi 2024

Penerbit sareng OpenAI nandatanganan perjanjian pikeun ngatur aliran inpormasi anu diolah ku Artificial Intelligence

Senén kamari, Financial Times ngumumkeun deal sareng OpenAI. FT ngalisensikeun jurnalisme kelas dunya na…

April 30 2024

Pamayaran Online: Ieu Kumaha Ladenan Streaming Ngadamel Anjeun Mayar Salamina

Jutaan jalma mayar jasa streaming, mayar biaya langganan bulanan. Pendapat umum yén anjeun…

April 29 2024

Veeam nampilkeun dukungan anu paling komprehensif pikeun ransomware, tina panyalindungan dugi ka réspon sareng pamulihan

Coveware ku Veeam bakal terus nyayogikeun jasa réspon kajadian cyber extortion. Coveware bakal nawiskeun kamampuan forensik sareng remediasi…

April 23 2024