Articles

Nā mea hoʻolako lawelawe ma Laravel: he aha lākou a pehea e hoʻohana ai i nā mea hoʻolako lawelawe ma Laravel

ʻO nā mea lawelawe ʻo Laravel kahi kikowaena kahi i hoʻomaka ai ka noi. ʻO ia hoʻi, waiho ʻia nā lawelawe Laravel koʻikoʻi a me nā lawelawe noi, nā papa, a me kā lākou mau hilinaʻi i loko o ka pahu lawelawe ma o nā mea hoʻolako. 

ʻO ia hoʻi, ua like nā mea hoʻolako lawelawe me kahi funnel kahi e ninini ai mākou i ka wahie "papa" i loko o kahi pahu i kapa ʻia ʻo "ka pahu lawelawe" o kahi mīkini i kapa ʻia ʻo Laravel.

Eia kekahi laʻana

Inā wehe mākou i ka config/app.php e ʻike mākou i kahi ʻano me ka inoa "mea hoʻolako"

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

ʻO kēia kekahi o nā mea lawelawe i hoʻolako pū ʻia me ka laravel, ʻo ia hoʻi nā lawelawe kumu i waiho ʻia i loko o ka pahu lawelawe.

I ka manawa i service provider hana ia?

Inā mākou e nānā i ka palapala ma ke noi olaola , ua hoʻokō ʻia nā faila ma ka hoʻomaka:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php a kāna Middlewares
  • Service Providers: maʻiʻo o kēia ʻatikala

ʻO Quali service provider Ua hoʻouka ʻia lākou? 

ʻO lākou kēlā definites ma ka papa 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,
 
    ],
 
];

E like me kā mākou e ʻike ai, aia kahi papa inoa o service provider ʻaʻole lehulehu ma ka waihona /vendor, ʻaʻole pono mākou e hoʻopā a hoʻololi iā lākou. Aia ma lalo ka poʻe hoihoi iā mākou, me BroadcastServicerProvider disabled by default, no ka mea kakaʻikahi ka hoʻohana ʻana.

Holo kēia mau mea lawelawe a pau mai luna a lalo, e hana hou ana i ka papa inoa pālua:

  • Ke ʻimi nei ka hana mua i kahi ala koho register(), pono no (ma hope) hoʻokō i kekahi mea i hoʻonohonoho ʻia ma mua o ke ʻano boot().
  • hoʻokō ka lua i ke ʻano boot() o na mea hoolako a pau. Eia hou, pakahi, mai luna a lalo, o ka laha 'providers'.
  • ʻO ka mea hope loa, ma hope o ka hoʻokō ʻia ʻana o nā mea lawelawe āpau, neʻe ʻo Laravel i ka parsing i ke ala (alanui), e holo ana i ka mea hoʻoponopono, hoʻohana i nā templates, etc.

Nā mea lawelawe Laravel predefiahiahi

I Service Providers i loko o Laravel, aia nā mea a pau i loko o ka waihona app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

ʻO lākou nā papa PHP āpau, pili kēlā me kēia me kāna kumuhana ponoʻī: App, Auth, Broadcasting, Events e Routes. Akā hoʻokahi mea like lākou a pau: ke ala boot().

I loko o ia ala, hiki iā mākou ke kākau i kekahi code e pili ana i kekahi o ia mau ʻāpana: auth, events, route, etc. I nā huaʻōlelo ʻē aʻe, ʻo nā mea hoʻolako lawelawe he mau papa e hoʻopaʻa inoa i kekahi mau hana honua.

Hoʻokaʻawale lākou ma ke ʻano he "mea hoʻolako" no ka mea holo mua lākou i ke ola o ka noi, no laila ua maʻalahi kekahi mea honua ma mua o ka hiki ʻana o ka palapala hoʻokō i nā Models a i ʻole Controllers.

Aia ka hapa nui o ka hana i ka RouteServiceProvider, eia ke code:

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

ʻO kēia ka papa kahi i hoʻonohonoho ʻia ai nā faila routeme ka routes/web.phproutes/api.php hoʻokomo ʻia e ka paʻamaudefinita. E hoʻomanaʻo, aia nā hoʻonohonoho like ʻole no ka API: Endpoint prefix /api a me ka middleware api no nā mea a pau routes.

Hiki iā mākou ke hoʻoponopono i ka service providers, ʻaʻole i loko o ka waihona /vendor. Hoʻopilikino ʻia kēia mau faila inā loaʻa iā ʻoe nā ala he nui a makemake ʻoe e hoʻokaʻawale iā lākou i nā faila kikoʻī. Hana ʻoe routes/auth.php a kau i nā ala ma laila, a laila "hoʻohana" ʻoe i kēlā faila ma ke ʻano boot() di RouteServiceProvider, hoʻohui wale i ka ʻōlelo ʻekolu:

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

AppServiceProvider ua nele. He laʻana maʻamau o ka hoʻohui code AppServiceProvider, e pili ana i ka hoʻopau ʻana i ka hoʻouka ʻana ma ka Eloquent. No ka hana ʻana i kēia, pono wale ʻoe hoʻohui i ʻelua laina ma ke ano boot():

Nupepa hou
Mai poina i ka nūhou nui loa e pili ana i ka hana hou. E kākau inoa e loaʻa iā lākou ma ka leka uila.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

E hoʻolei kēia i kahi ʻokoʻa inā ʻaʻole i hoʻouka ʻia kahi ʻano pilina.

Hana i kāu iho service provider hoʻopilikino i

Ma waho aʻe o nā faila muadefinites, hiki iā mākou ke hana maʻalahi i kahi hou Service Provider, pili i nā kumuhana ʻē aʻe ma mua o kēlā mau predefipau e like me auth/event/routes.

ʻO kahi hiʻohiʻona maʻamau ka hoʻonohonoho ʻike Blade. Hiki iā mākou ke hana i kahi kuhikuhi Blade, a laila hoʻohui i kēlā code i ke ʻano boot() o kekahi service provider, me ka paʻamau AppServiceProvider. E hana kākou i kēia manawa a ViewServiceProvider kaawale.

Hiki iā mākou ke hana me kēia kauoha:

php artisan make:provider ViewServiceProvider

Ka mea e hooulu i ka papa pela predefiahiahi:

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

E like me kā mākou e ʻike ai i loko, ʻelua mau ala:

ʻO ke ala hoʻopaʻa inoa ().

ʻO ke ala kākau inoa () hiki iā mākou ke definish nā loulou i kā mākou pahu lawelawe. No ka laʻana, ma kēia code:

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

ʻO $this->app he mea hoʻololi honua i ka laravel i hiki i kahi papa hoʻokahi ke komo ma o ka app.

ʻO Singleton kahi hiʻohiʻona. I ka hoʻohana ʻana i kēia hiʻohiʻona, ke haʻi aku nei mākou i ka noi ʻo kēlā me kēia papa i hoʻoholo ʻia ma ke ʻano he hoʻohālikelike i ka app pono e loaʻa i hoʻokahi manawa i ka noi holoʻokoʻa. ʻO ia hoʻi, e hoʻoholo ʻia ka MyClass i hoʻokahi manawa a loaʻa hoʻokahi wale nō laʻana, hiki ke kiʻi ʻia me ka hoʻohana ʻana i ka hoʻololi my_class.

ʻO ke ala boot().

ʻO ke ala boot () hiki iā ʻoe ke komo i nā lawelawe āpau i hoʻopaʻa inoa mua ʻia me ke ʻano hoʻopaʻa inoa. Hiki iā ʻoe ke hoʻokomo i ka lawelawe holoʻokoʻa i kāu noi me ka hoʻohana ʻana i kēia ʻano.

E hoʻi i ka laʻana mua, e wehe i ke ʻano register() a i loko boot() hoʻohui i ke code kuhikuhi Blade:

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

ʻO kekahi laʻana o ViewServiceProvider mahalo View Composers, eia ka snippet mai ka punaewele 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) {
            //
        });
    }
}

No ka holo ʻana, pono e hoʻohui ʻia kēia mea hoʻolako hou / hoʻopaʻa inoa ʻia i ka laha mea hoʻolako 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

Hiki paha iā ʻoe ke hoihoi i:

Nupepa hou
Mai poina i ka nūhou nui loa e pili ana i ka hana hou. E kākau inoa e loaʻa iā lākou ma ka leka uila.

Nā nūpepa hou

Eia ka wā e hiki mai ana: Pehea e hoʻololi ai ka ʻoihana moku i ka hoʻokele waiwai honua

He mana hoʻokele waiwai maoli ka ʻāpana moana, kahi i hoʻokele i kahi mākeke 150 biliona ...

1 Mei 2024

Hoʻopaʻa inoa nā mea hoʻopuka a me OpenAI i nā ʻaelike e hoʻoponopono i ka kahe o ka ʻike i hana ʻia e Artificial Intelligence

I ka Pōʻakahi i hala, ua hoʻolaha ka Financial Times i kahi kuʻikahi me OpenAI. Laikini ʻo FT i kāna nūpepa papa honua…

30ʻApelila 2024

Uku Online: Eia ke ʻano e uku mau ai nā lawelawe Streaming iā ʻoe

E uku ana nā miliona o ka poʻe no nā lawelawe streaming, e uku ana i nā uku kau inoa o kēlā me kēia mahina. He manaʻo maʻamau ʻoe…

29ʻApelila 2024

Hōʻike ʻo Veeam i ke kākoʻo piha loa no ka ransomware, mai ka pale ʻana i ka pane a me ka hoʻihoʻi

E hoʻomau ʻo Coveware e Veeam i ka hoʻolako ʻana i nā lawelawe pane ʻana i ka hanana cyber extortion. E hāʻawi ʻo Coveware i nā forensics a me nā mana hoʻoponopono…

23ʻApelila 2024