7

I'm trying to override (not extend) a vendor class. So whenever the vendor class gets called (within the vendor code), I want it to call my custom class.

It looks like I need to alias the class in my App/Providers/AppServiceProvider

I've tried this:

$loader = \Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('Vendor\VendorName\Class', 'App\Vendor\MyCustomClass');

But this doesn't do anything.

I can get my class registered fine:

 $this->app->register(
       'App\Vendor\MyCustomClass'
   );

But this then fails as the constructor relys on other variables not available at that point. I literally just need the app to override any call to Vendor\VendorName\Class with App\Vendor\MyCustomClass

Kiksy
  • 1,272
  • 5
  • 20
  • 43

1 Answers1

11

So the solution was create a new ServiceProvider

php artisan make:provider MyServiceProvider

Which extended the Vendor service provider (found within config/app.php). Within that ServiceProvider, add my alias within the overridden Register method

 $loader->alias('Vendor\VendorName\Class', 'App\Vendor\MyCustomClass');
Kiksy
  • 1,272
  • 5
  • 20
  • 43
  • the trick is that you need to specify your custom class first, and the class you want to override - as second – Audiophile May 13 '18 at 21:49
  • 2
    for those who look at it at the future : don't forget to add your custom service provider on Config\App.php on providers array. thanks me later – punk73 Jan 31 '19 at 02:55
  • this is not working i did every thing, "vendor\beyondcode\laravel-er-diagram-generator\src\GraphBuilder" => "app\Support\vendor\LaravelGraphBuilder" – Fadi Sep 10 '19 at 08:02