Как переопределить класс из vendor package?
Как переопределить класс из vendor package?
Пытался сделать так:
App\Providers
namespace App\Providers;
use Barryvdh\Debugbar\Controllers\BaseController;
use Barryvdh\Debugbar\DataCollector\ModelsCollector;
use Illuminate\Support\ServiceProvider;
/**
* Collector for Models.
*/
class ModelsCollectorCustom extends ModelsCollector
{
public function collect()
{
ksort($this->models, SORT_NUMERIC);
return ['data' => array_reverse($this->models), 'count' => $this->count];
}
}
class DebugbarServiceProvider extends ServiceProvider
{
public function register(){
$this->app->when(BaseController::class)
->needs(ModelsCollector::class)
->give(function ($app) {
return $app->make(ModelsCollectorCustom::class);
});
}
}
app.php конфиг
App\Providers\DebugbarServiceProvider::class,
но что-то новый класс не работает
P.S.
use Barryvdh\Debugbar\LaravelDebugbar;
use Barryvdh\Debugbar\ServiceProvider as BarrServiceProvider;
class DebugbarServiceProvider extends BarrServiceProvider
{
// public function boot() {
// parent::boot();
// dump('butt');
//
// $this->app->when(LaravelDebugbar::class)
// ->needs(ModelsCollector::class)
// ->give(function ($app) {
// return $app->make(ModelsCollectorCustom::class);
// });
// }
public function register(){
parent::register();
// $this->app->when(LaravelDebugbar::class)
$this->app->when(BarrServiceProvider::class)
->needs(ModelsCollector::class)
->give(function ($app) {
return $app->make(ModelsCollectorCustom::class);
});
}
}
Ответы (1 шт):
Автор решения: Vasin Yuriy
→ Ссылка
Есть похожий вопрос. Ключевое отличие от вашего подхода в том, что в app/config/app.php кроме регистрации класса производится подмена расширяемого:
'VendorClass' => 'App\Providers\NewServiceProvider',
но у меня и так не получилось, рабочее решение нашел тут. Смысл состоит в регистрации своего Service Provider с кодом:
public function register(): void
{
$this->app->singleton(
// изначальный vendor class
'Orchid\Platform\Http\Controllers\LoginController',
// пользовательский class для замены
'App\Http\Controllers\NewLoginController'
);
}