EDIT: Figured out where I was going wrong and placed an answer at the end
I'm trying to create a Laravel Command, I can see it's changed considerably from "tasks" in Laravel 3. However I can't seem to get it to run. These are the steps I have taken:
php artisan command:make Import
Returns
Command created successfully
The file in the commands directory is then created and I have slightly modified to return "Hello World" like so:
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class Import extends Command {
/**
* The console command name.
*
* @var string
*/
protected $name = 'command:import';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return void
*/
public function fire()
{
return 'Hello World';
}
/**
* Get the console command arguments.
*
* @return array
*/
protected function getArguments()
{
return array(
array('example', InputArgument::REQUIRED, 'An example argument.'),
);
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return array(
array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),
);
}
}
However when I try and run the command like so:
php artisan Import
I get the following error:
[InvalidArgumentException] Command "Import" is not defined.
I have tried it with and without capitals as well as naming it "ImportCommand" since the documentation names its command "FooCommand" but with no luck.
Any help would be most appreciated.
Actually figured this out. Further down the documentation it states that you must register your command in "app/start/artisan.php" using the following method:
Also the name you give in your command class is significant as that's what you need to use to call it. So I should have actually been calling it like so:
One final thing. What the fire() returns is unimportant, to return strings you must echo them.
In newer Laravel versions there isn't an
import
command. You just have to do the following two thing:Register your command in
app/start/artisan.php
:Run the command in Artisan:
try this.
also add this in
/app/start/artisan.php
then Run Command on Root directory
there's a mis-understanding on Artisan commands because of the used wording.
In your case you choose : 'command:import' as a name of one of your 'Import' commands.
Think about it as an object, with methods.
If "Import" has many commands:
you can use as command name > protected $name = 'import:csv';
another command would be > protected $name = 'import:txt';
and > protected $name = 'import:contacts';
so your commands with "Import" nature are better organised.
and when you request , you see your commands organised as a single entity.
If not,
and you have only a single command then give your command a single clear name. protected $name = 'import';