使用Artisan创建新命令,无需shell访问

时间:2015-01-09 13:36:45

标签: laravel laravel-4 artisan

我需要在 Laravel 网站上设置一些cron个工作。似乎首先我必须在shell中运行以下命令才能开始:

php artisan command:make CustomCommand

然而,由于我没有shell访问权限,我唯一的另一种选择是使用Artisan::call并通过HTTP访问它。语法是这样的:

\Artisan::call( 'command:make', 
    array(
        'arg-name' => 'CustomCommand',
        '--option' => ''
    )
);

我遇到的问题是我似乎无法找到arg-name命令的command:make值。

如果有人提到make命令的参数名称,或者建议不需要shell访问的替代解决方案,我真的很感激。

1 个答案:

答案 0 :(得分:2)

您可以通过创建代表您的命令的类来手动添加它。 cli命令生成下一个文件:

    <?php

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

class Test 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()
    {
        //
    }

    /**
     * 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),
        );
    }

}

将其放在commands目录中(对于L4,它是app/commands)。接下来只需在您的app/start/artisan.php文件中添加自定义命令的绑定:

Artisan::add(new Test); 就是这样。当您不需要触摸服务器的crontab时,这是理想的解决方案。如果您可以从CP访问它,那将是最简单的解决方案。如果您没有这种能力,现在可以设置crontab来运行您的自定义命令。希望这会有所帮助。