Creating Custom Facades in Laravel

Creating Custom Facades in Laravel

Spread the word! Share with your fellow developers.

Facades provide a static interface to a class that gives access to an object from the service container. You can define a facade simply by using getFacadeAccessor method for a facade class.

In this post will create a custom facade in Laravel by following below few short steps.

  1. Create a PHP class file
  2. Bind that class to Service Provider
  3. Register that Service Provider in Config\app.php
  4. Create a class that extends Illuminate\Support\Facades\Facade
  5. Register your facade in Config\app.php as aliases

So let’s get started to create an awesome facade.

Step1

Create a PHP helper class Larashout.php in App\Larashout. You can create a folder of your own choice instead of Larashout.

namespace App\Larashout;

class Larashout
{
    public function sayHello()
    {
        echo "Hello, from Facade class.";
    }
}

Step2

Bind this class to a Service Provider, in my case I will create a service provider by executing below command

php artisan make:provider LarashoutServiceProvider

Then add below code in register method for binding our class.

$this->app->bind('larashout',function(){

        return new Larashout();

});

So your service provider class will look like below.

namespace App\Providers;

use App\Larashout;

use Illuminate\Support\Facades\App;
use Illuminate\Support\ServiceProvider;

class LarashoutServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('larashout',function(){

        return new Larashout();

        });
    }
}

Step3

Register that service provider in config\app.php as providers.

/*
         * Application Service Providers...
         */
        App\Providers\LarashoutServiceProvider::class,

Step4

Create a file LarashoutFacade in App\Larashout which will extend Illuminate\Support\Facades\Facade. For example, my class will look like below.

namespace App\Larashout;

use Illuminate\Support\Facades\Facade;

class LarashoutFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'larashout';
    }
}

Step5

Register class created in Step4 in config\app.php as aliases.

'Larashout'   =>  App\Larashout\LarashoutFacade::class

Testing

Let’s test your facade by adding a simple route which will resolve to a closure function implementing our facade class.

Route::get('/larashout', function() {

    Larashout::sayHello();

});

Visit your browser with the above route and you will see the hello message. I hope this post will help you to implement a custom facade.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

*
*

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Laravel Performance Tips
Laravel has been evolving consistently since its launch in 2011 and now it is considered one of the best PHP framework....