Skip to main content

Laravel Magic

Updated 2 min readMarkdown
Laravel Magic

If you are new to Laravel or any framework, You may be confused and sometimes when you start learning you may find some built-in classes or functions that you don't know where it comes from and sometimes you are saying It's a magic trick.

So, I will give you one Example of Laravel Magic.

In the following Image I created a simple command that count the user in Database and you can find that we used DB Class from Illuminate\Support\Facades

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

class MagicTrick extends Command
{
    protected $signature = 'magic:run';

    protected $description = 'Show a magic trick';

    public function handle()
    {
        $usersCount = DB::table('users')->count();
        $this->info("Users count: $usersCount");
    }
}

And when we run it.

php artisan magic:run

We will find that.

Users count: 1

Till now its fine but what about if we removed this line use Illuminate\Support\Facades\DB;

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class MagicTrick extends Command
{
    protected $signature = 'magic:run';

    protected $description = 'Show a magic trick';

    public function handle()
    {
        $usersCount = \DB::table('users')->count();
        $this->info("Users count: $usersCount");
    }
}

We will get the same result.

So How it works?

Laravel behind the scene uses class alias.

Let Me explain it in a simple way. For Example create a simple Enum Class

<?php

namespace App\Enums;

enum Gender: string
{
    case MALE = 'M';
    case FEMALE = 'F';
}

Then get back to the command

<?php

namespace App\Console\Commands;

use App\Enums\Gender;
use Illuminate\Console\Command;

class MagicTrick extends Command
{
    protected $signature = 'magic:run';

    protected $description = 'Show a magic trick';

    public function handle()
    {
        $this->info('Male Enum value: ' . Gender::MALE->value);
    }
}

Then when we run we will get Male Enum value: M.

What will happen if we remove use App\Enums\Gender;

We will get an error Class "App\Console\Commands\Gender" not found

So if we want to use a magic here simply we can use a simple PHP function class_alias()

class_alias('App\Enums\Gender', 'Gender');

You can simply put the above snippet into your service provider to use the alias anywhere in your project

Your final code in command will be:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class MagicTrick extends Command
{
    protected $signature = 'magic:run';

    protected $description = 'Show a magic trick';

    public function handle()
    {
        $this->info('Male Enum value: ' . \Gender::MALE->value);
    }
}

Finally you can check the following link of Mohamed Said to learn more about Laravel magic tricks
Laravel Magic Tricks

About the author

No comments yet. Be the first to comment.