Reputation: 25509
I created a command with Artisan
$ php artisan command:make NeighborhoodCommand
This created the file app/commands/NeighborhoodCommand.php
Snippet of the code. I modified the name
value and filled in the fire()
function
<?php
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class NeighborhoodCommand extends Command {
protected $name = 'neighborhood';
public function fire()
{
// my code
}
}
But then when I try to run the command with
$ php artisan neighborhood
I get this error:
[InvalidArgumentException]
Command "neighborhood" is not defined.
Upvotes: 23
Views: 39969
Reputation: 1
you should also note, that if you fail to put in the proper value to $signature, you will get the same error
Upvotes: 0
Reputation: 1993
Just in case
I tried all the above and I would still get the "Command is not defined" message (even after a composer dumpautoload). This was before I embarrassingly realised my command file name was not binding the Command Class name.
I had
Filename : CommandThatDoesThis.php
Class: CommandThatDoesThat
Ran a composer dumpautoload just after and all was fine.
note: this would have never happened if I created the command properly, using the php artisan make:command. I ended up in this situation because I duplicated an existing command.
Upvotes: 2
Reputation: 429
if none of the above work for you you might want to try to composer dumpautoload
which fixed for me.
Upvotes: 3
Reputation: 726
By changing signature in your command class to your commandName. change
protected $signature = 'command:name';
TO
protected $signature = 'NeighborhoodCommand';
Now try to run
$ php artisan NeighborhoodCommand
It works for me.
Upvotes: 2
Reputation: 25509
Laravel 5.5+
https://laravel.com/docs/5.5/artisan#registering-commands
If you'd like, you can continue manually registering your commands. But L5.5 gives you the option to lazy load them. If you are upgrading from an older version add this method to your Kernel:
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__ . '/Commands');
require base_path('routes/console.php');
}
Laravel 5
http://laravel.com/docs/5.4/artisan#registering-commands
Edit your app/Console/Kernel.php
file and add your command to the $commands
array:
protected $commands = [
Commands\NeighborhoodCommand::class,
];
Laravel 4
http://laravel.com/docs/4.2/commands#registering-commands
Add this line to app/start/artisan.php
:
Artisan::add(new NeighborhoodCommand);
Upvotes: 36