Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
April 16, 2021 11:12 am GMT

Package Artisan commands in 5 minutes

A while ago, I wrote a Laravel command that validates Blade templates in order to become part of my continuous integration pipeline.

It just compiles the given Blade templates and then uses the PHP internal linter to validate them.

Yesterday, someone just asked me if I planned to distribute it as a standalone phar archive.

I thought it would be interesting so here's how I did it.

First, make a standalone executable

Laravel Blade Linter is distributed as a Laravel package and is intended to be run as follow:

php artisan blade:lint <files>

Since it's an Artisan command, it cannot run outside of a Laravel project...

Or can it?

Turns out Artisan commands are built on top of Symfony console, so you can start them like this:

// create the Symfony console application$application = new Application();$application->add(new BladeLinterCommand);$application->run();

But the command leverage Laravel's services, so we need to provide them to it:

// create an empty container$laravel = new Container();$laravel['config'] = fn() => new Config([    // use current directory as view path    'view.paths' => getcwd(),    // send compiled views to /tmp    'view.compiled' => sys_get_temp_dir(),]);// register services the command needs(new FilesystemServiceProvider($laravel))->register();(new ViewServiceProvider($laravel))->register();// set the container so the Config::get calls resolveFacade::setFacadeApplication($laravel);// prepare the command$command = new BladeLinterCommand();$command->setLaravel($laravel);

And now it runs properly inside its Symfony application shell!

# now the command can run outside of Laravel!bin/blade-linter <files>

The final script is available here.

Time to package it

Building a phar archive is easier than I thought it would be. All you need is phar-composer.

# install phar-composer globallycomposer global require clue/phar-composer

Then register the executable we made above in composer.json:

{    "bin": [        "bin/blade-linter"    ]}

Now we can build the phar:

phar-composer build ./

The result is an executable archive that can be distributed as a standalone application.

$ laravel-blade-linter.phar lint tests/views/PHP Parse error:  syntax error, unexpected ')' in tests/views/invalid.blade.php on line 1

And voil

Don't forget to leave a like and tell me in the comments what you think of this article.

From the same author:


Original Link: https://dev.to/bdelespierre/package-artisan-commands-in-5-minutes-457j

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To