Udders
Udders

Reputation: 6976

laravel 4.2 artisan command:name with arguments

I have created an artisan command called sendUnreadNotifications this triggers the system to send users emails if they have unread notifications. Eventually this will be run via a cron job, and a user can either have hourly updates or daily updates.

For this reason I am wanting to send an argument with my command, something like this,

php artisan command:name sendUnreadNotifications H --env=local

However running this, I get the following error,

[RuntimeException]
Too many arguments.

My code, looks like this,

<?php

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class sendUnreadNotifications extends Command {

/**
 * The console command name.
 *
 * @var string
 */
protected $name = 'command:name';

/**
 * 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 mixed
 */
public function fire()
{
    $request = Request::create('api/notifications/send/unread', 'GET', array($this->getArguments()));
    Route::dispatch($request)->getContent();
}

/**
 * Get the console command arguments.
 *
 * @return array
 */
protected function getArguments()
{
    return array(
        array('frequency', InputArgument::OPTIONAL, 'How often should the email be sent', 'H'),
    );
}

/**
 * Get the console command options.
 *
 * @return array
 */
protected function getOptions()
{
    return array(
        array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),
    );
}

}

I cannot see why I would be getting the too many arguments exception?

Upvotes: 1

Views: 4872

Answers (1)

baao
baao

Reputation: 73251

You do only have one argument set, for frequency

protected function getArguments()

{
    return array(
        array('frequency', InputArgument::OPTIONAL, 'How often should the email be sent', 'H'),
    );
}

so the

php artisan command:name sendUnreadNotifications H --env=local

here the H is the argument that is too much. You should change your command's name to what you want to do, the command names need to be unique btw...

Change this:

protected $name = 'command:name';

to

protected $name = 'send:unreadNotifications';

and run your job with

php artisan send:UnreadNotifications H

and it will work.

Upvotes: 3

Related Questions