在控制器中调用自定义 Artisan 命令 |拉拉维尔

Posted

技术标签:

【中文标题】在控制器中调用自定义 Artisan 命令 |拉拉维尔【英文标题】:Calling a custom Artisan command in a Controller | Laravel 【发布时间】:2018-02-11 20:24:48 【问题描述】:

我正在尝试在控制器中执行自定义 Artisan 命令,但它会引发 CommandNotFound 异常。在实现中我运行命令,而不是执行整个命令'php artisan scan url',我只是运行扫描url,因为这个答案:Running Artisan Command。我不明白我做错了什么?

自定义 Artisan 命令签名

protected $signature = 'scan url
                            --r= : y or n | to follow or not to follow the robot.txt 
                            --fm= : set follow mode
                            --u= : username 
                            --p= : password 
                            --s : SQL module 
                            --x : XSS module';

实施

switch ($select) 

   case 'full':

     \Artisan::call('scan ' . $customer->cms_url); //url == http://localhost:8888
     return $request;

     break;

错误

1/1) CommandNotFoundException
There are no commands defined in the "scan http" namespace.
in Application.php (line 548)
at Application->findNamespace('scan http')
in Application.php (line 582)
at Application->find('scan http://localhost:8888')
in Application.php (line 205)

【问题讨论】:

【参考方案1】:

首先在app/console/Kernel.php 中注册您的 Artisan 命令:在命令数组中添加您的命令类。之后你可以像这样调用你的命令

\Artisan::call('scan', ['url' => "$customer->cms_url"]);

您必须将 url 包裹在 " " 中,否则它不会设置完整的字符串

【讨论】:

感谢您的回复。这是正确的解决方案。

以上是关于在控制器中调用自定义 Artisan 命令 |拉拉维尔的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Artisan 控制台命令无法检索模型集合

Laravel - 在部署自定义 Artisan 命令时未部署 composer.json 文件

sh 运行自定义artisan命令

如何从命令的“php artisan list”中隐藏默认的 artisan 命令?

如何使用 Artisan 命令 (PHP) 在 Laravel 5.2 中创建 RESTful 资源控制器

在 Laravel artisan 命令中使用详细