Artisans! I have a question.
In a package I'm creating the current way for using the class is by first using the Quickpay::api() method, and then tacking on any other method.
How could I change my code to skip this Quickpay::api()->payments()->create() and just go directly to Quickpay::payments()->create();
github.com/mortenebak/laravel-quickpay
Any help appriciated :)
Use the service container with a binding (or singleton) in your ServiceProvider to inject a QuickPay instance instead of wiring it up in the constructor. This should allow to to skip the static constructor / api() method call.
Hmm I wouldn’t recommend. There is already a facade so why not use that if you like the static syntax but leave it as it is, so it’s possible to access the methods in the default way when using dependency injection.
Ahh I didn't see the Facade. Then you're right, no need of doing that.
That wouldn’t work out very well. The static methods wouldn’t have access to the instance properties and therefore the injected client. A static call on the Quickpay class would basically bypass the service container.
Well. Thats kinda what I want to do, but struggling to grasp how 🫣
It should just work :) Just be sure you use the facade and not the actual implementation class
\Netbums\Quickpay\Facades\Quickpay::payments()->create();
Thanks 👍 Next question that arises is the lack of autocomplete og methods 🫣
You add them in a php doc in the facade file. Open any laravel facade file to see how they do it github.com/laravel/framework/blob/b9cf7d3217732e9a0fa4f00e996b3f9cc5bf7abd/src/Illuminate/Support/Facades/Storage.php#L8
Or you can use laravel idea for phpstorm (it costs a bit)
Or try this github.com/barryvdh/laravel-ide-helper
But as it's a package you should do the first one :)