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

1
  • 3
    You should to create own service provider extendind the destination class and overwrite it. Commented Dec 21, 2017 at 13:21

1 Answer 1

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'); 
Sign up to request clarification or add additional context in comments.

3 Comments

the trick is that you need to specify your custom class first, and the class you want to override - as second
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
this is not working i did every thing, "vendor\beyondcode\laravel-er-diagram-generator\src\GraphBuilder" => "app\Support\vendor\LaravelGraphBuilder"

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.