如何在不使用命令行的情况下运行Laravel artisan命令

时间:2019-11-27 23:48:22

标签: php laravel

我正在开发一个Laravel package,它将使用自定义的工匠命令,即php artisan make:baserepository User -c-c表示我也将创建一个controller

我希望在运行此artisan命令时能够创建一个controller。这是我创建控制器的代码。

protected function createController() {
     $modelsingular = Str::singular(Str::ucfirst($this->getNameInput()));
     $modelplural = Str::plural($modelsingular);

     $controller = Str::studly(class_basename($this->argument('name')));
     $modelName = $this->qualifyClass($modelplural . '/' . $modelsingular);

     $this->call('make:controller', [
            'name' => "{$modelplural}\{$controller}Controller",
            '--model' => $this->option('resource') ? $modelName : null,
     ]);
}

看看这一行'name' => "{$modelplural}\{$controller}Controller"。我希望控制器在Admin\Admin.php中像这样Http\Controllers,而不是Admin\{Admin}Controller.php。我在哪里弄错了?

我希望我的问题很清楚。

3 个答案:

答案 0 :(得分:2)

您可以使用Artisan::call()函数调用命令

例如:

Route::get('/foo', function () {
    $exitCode = Artisan::call('email:send', [
        'user' => 1, '--queue' => 'default'
    ]);
});

原始文档可以在这里找到:Artisan #calling-commands-via-code

答案 1 :(得分:1)

@porloscerros的评论帮助我解决了问题,这是我的解决方法

protected function createController() {
     $modelsingular = Str::singular(Str::ucfirst($this->getNameInput()));
     $modelplural = Str::plural($modelsingular);

     $controller = Str::studly(class_basename($this->argument('name')));
     $modelName = $this->qualifyClass($modelplural . '/' . $modelsingular);

     $this->call('make:controller', [
            'name' => $modelplural.'\'.$controller.'Controller',
            '--model' => $this->option('resource') ? $modelName : null,
     ]);
}

答案 2 :(得分:1)

$a = 'there';

echo "hi\{$a}";
// hi\{there}

这里是\之前的{

echo "hi\\{$a}";
// hi\there

现在,我们将\转义为\\

"{$modelplural}\\{$controller}Controller"
// Admin\AdminController