Väzby a observery
register() aj boot() zostávajú prepísateľné pre vlastné zapojenie — prepíšte ich a najprv zavolajte rodičovskú metódu. Najčastejšie zapojenie riadené konfiguráciou pokrývajú dva pomocníci:
public function register(): void
{
parent::register();
// Bind a contract to the class named in config, with a default. Absent/null/blank → the
// default; a value that isn't an existing class implementing the contract (false, a
// typo'd class name) throws InvalidConfigurationException when the contract resolves.
$this->bindFromConfig(CommentRepository::class, 'comments.repository', EloquentCommentRepository::class);
}
public function boot(): void
{
parent::boot();
// Attach an observer to the model named in config.
$this->observesModel('comments.models.comment', CommentObserver::class);
}bindFromConfig()
bindFromConfig(string $contract, string $configKey, string $default) naviaže kontrakt na closure, ktorá pri každom resolvovaní prečíta konfiguračný kľúč a danú triedu vytvorí cez kontajner. Chýbajúci kľúč, null alebo prázdna hodnota ('' či len medzery) naviaže predvolenú triedu. Akákoľvek iná hodnota musí byť názvom existujúcej triedy, ktorá je $contract — false, preklep v názve triedy či trieda nesprávneho typu vyhodí pri resolvovaní kontraktu InvalidConfigurationException („Configuration value [comments.repository] must be a class-string of [{contract}], [{given}] given.“), nikdy sa potichu nepoužije predvolená trieda. Volajte ju z register() po parent::register(), aby už bola konfigurácia balíka zlúčená.
observesModel()
observesModel(string $configKey, string $observer) zistí triedu modelu z konfiguračného kľúča a zaregistruje na ňu observer. Trieda sa overí cez ModelResolver bez predvolenej hodnoty, takže kľúč je povinný: chýbajúci alebo prázdny kľúč či kľúč, ktorý neurčuje Eloquent model, vyhodí InvalidConfigurationException už pri boote namiesto tichého zlyhania. Volajte ju z boot().
Konfigurácia v pozadí
Oba kľúče sú v konfigurácii balíka, takže ich hostiteľ vymení bez zásahu do balíka:
// config/comments.php
return [
'repository' => EloquentCommentRepository::class,
'models' => [
'comment' => Comment::class,
],
];
// A host swaps either one without touching the package:
// 'repository' => App\Comments\CachedCommentRepository::class,
// 'models' => ['comment' => App\Models\Comment::class],Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.