phplaravelcomposer-phplaravel-artisanpackage-development

Composer Require then Inject service into Laravel App without leaving laravel command line


So I am making a Laravel artisan command. In that command I run 'composer require' for a package. I am trying to find a way to use that package I required without leaving the current command I am in.

I thought of temporarily adding The Namespace to Laravel the way it does when you auto load files.

So my first question is how do I use this code below inside of an Artisan Command? Since app in not automatically accessible inside an artisan command.

include_once __DIR__ .'/../vendor/....';

$this->app->make('My\Namespace');

My Second Question. Assuming I get the above code to work properly inside an Artisan command, is that to unstable? Should I just make a second artisan command for after the composer require?

Any advice would be appreciated.


Solution

  • To answer your first question, composer has its own API to do things manually what it does under the hood.

    You can required a package, then add the new Class fo usage in classmaps API using its vendor path and dump the autoloads in your command.

    Secondly, I will suggest to make 2 commands each responsible to do just one task. First to install and handle installation errors, the second to use it.

    Last but importantly, this is an unconventional way of requiring a package. Because mostly packages are required once and then may be updated/removed in the project. So you can install the package manually once and then run the command to eliminate the worry to install package using command.