Cet article est écrit par la colonne tutorielle laravel pour présenter comment obtenir l'instance de conteneur dans le code. J'espère qu'il sera utile aux amis qui en ont besoin !
L'instance de conteneur Laravel est unique tout au long du cycle de vie de la demande et gère toutes les instances de composants de service. Alors, quels sont les moyens d'obtenir une instance du conteneur Laravel ? Les méthodes suivantes sont couramment utilisées :
1) Via la fonction d'aide de l'application :
$app = app();
La fonction auxiliaire de l'application est définie dans le fichier
Ce fichier définit de nombreuses fonctions d'aide et sera automatiquement chargé dans le fichier
. fichier via le projet composer. Par conséquent, les fonctions sont accessibles à n’importe quel emplacement de code impliqué dans le traitement des requêtes http, tel que app(). 2) Via l'App Facade<?php Route::get('/', function () { dd(App::basePath()); return ''; });
<?php namespace ThirdProviders\CasServer\Facades; use Illuminate\Support\Facades\Facade; use ThirdProviders\CasServer\CasServerManager; class CasServer extends Facade { protected static function getFacadeAccessor() { return CasServerManager::class; } }
<?php namespace Illuminate\Support\Facades; /** * @see \Illuminate\Foundation\Application */ class App extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'app'; } }
<?php Route::get('/', function () { dd(App::basePath()); return ''; });
'aliases' => [ 'App' => Illuminate\Support\Facades\App::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, 'Blade' => Illuminate\Support\Facades\Blade::class, 'Bus' => Illuminate\Support\Facades\Bus::class, 'Cache' => Illuminate\Support\Facades\Cache::class, 'Config' => Illuminate\Support\Facades\Config::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Crypt' => Illuminate\Support\Facades\Crypt::class, 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Event' => Illuminate\Support\Facades\Event::class, 'File' => Illuminate\Support\Facades\File::class, 'Gate' => Illuminate\Support\Facades\Gate::class, 'Hash' => Illuminate\Support\Facades\Hash::class, 'Lang' => Illuminate\Support\Facades\Lang::class, 'Log' => Illuminate\Support\Facades\Log::class, 'Mail' => Illuminate\Support\Facades\Mail::class, 'Notification' => Illuminate\Support\Facades\Notification::class, 'Password' => Illuminate\Support\Facades\Password::class, 'Queue' => Illuminate\Support\Facades\Queue::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class, 'Redis' => Illuminate\Support\Facades\Redis::class, 'Request' => Illuminate\Support\Facades\Request::class, 'Response' => Illuminate\Support\Facades\Response::class, 'Route' => Illuminate\Support\Facades\Route::class, 'Schema' => Illuminate\Support\Facades\Schema::class, 'Session' => Illuminate\Support\Facades\Session::class, 'Storage' => Illuminate\Support\Facades\Storage::class, 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class ],
<?php namespace Illuminate\Foundation\Bootstrap; use Illuminate\Support\Facades\Facade; use Illuminate\Foundation\AliasLoader; use Illuminate\Contracts\Foundation\Application; class RegisterFacades { /** * Bootstrap the given application. * * @param \Illuminate\Contracts\Foundation\Application $app * @return void */ public function bootstrap(Application $app) { Facade::clearResolvedInstances(); Facade::setFacadeApplication($app); AliasLoader::getInstance($app->make('config')->get('app.aliases', []))->register(); } }
Le fournisseur de services sera présenté plus tard, mais il vient tout juste d'être introduit maintenant. Étant donné que les classes du fournisseur de services sont instanciées par le conteneur Laravel, ces classes héritent d'IlluminateSupportServiceProvider, qui définit un attribut d'instance $app
🎜🎜Lorsque Laravel instancie le fournisseur de services, il injectera l'instance du conteneur Laravel Allez dans ce $app. Ainsi, chez le fournisseur de services, nous pouvons toujours accéder à l'instance de conteneur Laravel via $this->$app, sans utiliser la fonction app() ou App Facade. 🎜Pour plus d'articles techniques sur Laravel, veuillez visiter la colonne tutoriel laravel !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!