使用 Artisan 创建一个新命令,没有 shell 访问权限

Creating a new Command using Artisan, without shell access

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

php artisan command:make CustomCommand

但是由于我没有 shell 访问权限,我唯一的其他选择是使用 Artisan::call 并且通过 HTTP 进行访问。语法是这样的:

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

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

如果有人提到 make 命令的 参数名称 或提出不需要 shell 访问权限的替代解决方案,我将非常感激。

您可以通过创建代表您的命令的 class 来手动添加它。 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 设置为 运行 您的自定义命令。希望这有帮助。