Understanding Facade In Laravel
Today we are going to learn about the term “facade” that we use in Laravel. Since so many days I have wrote this question in my notebook that what it is actually.
Then I get to know that we can create custom facades in Laravel. So, I have decided that I should write a blog on this topic. we useFacades everyday like DB, Cache etc.
What are the Facade?
In Laravel, a Facade is a design pattern that provides a static interface to the classes that are available in the Laravel service container.
How does Facade works?
This is how facade works in Laravel.
- Static Proxy: Facades act as static proxies to underlying classes in Laravel’s service container. This means you can access methods on these classes in a static-like manner without needing to instantiate them directly.
- Clean Syntax: Facades provide a clean and expressive syntax for accessing Laravel services. For example we can use a facade to access its methods directly.
- Global Accessibility: You know Facades are globally accessible, that means you can use them anywhere in your application.
- Service Container Integration: Under the hood, facades interact with Laravel’s service container to resolve the actual instances of the classes they represent.
I hope you have got some understanding now. What facade do in Laravel. Now we are going to dive into practical way of how to create a custom Facade and how to use them in our application.
Creating A Custom Facade In Laravel
Let’s create a custom facade in Laravel in the context of an e-commerce website focusing on shipping services and how a custom facade can be beneficial.
Creating the ShippingService Class
The backbone of our shipping solution is the ShippingService
class, residing in app/Services/ShippingService.php
. This class contains methods for calculating shipping costs, validating addresses, and handling other shipping-related tasks.
namespace App\Services;
class ShippingService { public function calculateShipping($order) { // Logic to calculate shipping costs }
public function validateAddress($address) { // Logic to validate shipping address }
// Other shipping-related methods }
Registering the Custom Facade
To make the ShippingService
accessible via a facade, we create a custom facade class ShippingFacade
in app/Facades/ShippingFacade.php
.
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class ShippingFacade extends Facade { protected static function getFacadeAccessor() { return 'shipping'; } }
Binding with the Service Container
We bind the ShippingService
to Laravel’s service container in a custom service provider (CustomFacadeServiceProvider
) to enable dependency injection and resolution.
namespace App\Providers;
use Illuminate\Support\ServiceProvider; use App\Services\ShippingService;
class CustomFacadeServiceProvider extends ServiceProvider { public function register() { $this->app->bind('shipping', function ($app) { return new ShippingService(); }); } }
Usage in Controllers
With the facade and service provider in place, we can use the Shipping
facade in our controllers to perform shipping operations seamlessly.
use Shipping;
public function checkout(Request $request) { if (!Shipping::validateAddress($request->input('shipping_address'))) { // Handle invalid address }
$shippingCost = Shipping::calculateShipping($order);
// Process the order with shipping details }
Benefits and Conclusion
Implementing a custom facade for shipping services in Laravel offers several benefits. It abstracts complex shipping logic, promotes code organization, and enhances code readability. By encapsulating shipping functionalities behind a facade, developers can focus on building robust e-commerce solutions without worrying about intricate shipping operations.
I think, now you have got the pretty much idea of facade, and how we can create a readable code by using facades in Laravel (sorry custom facades in Laravel).
The post Understanding Facade In Laravel appeared first on Larachamp.