如何在Laravel 5中获取当前使用的Artisan控制台命令名称?

时间:2016-03-07 10:22:41

标签: php laravel artisan

问题/我尝试了什么:

在Laravel 5中获取当前使用的控制器和操作非常简单(但不是很容易)但是我仍然无法获得当前使用的工匠控制台命令。

要获取控制器名称,请执行以下操作:

$route = Route::getRoutes()->match(Request::capture());
$listAction = explode('\\', $route->getActionName());
$rawAction = end($listAction);
// controller name and action in a simple array
$controllerAndAction = explode('@', $rawAction);

但是当从控制台动作调用时,它总是返回默认索引控制器的名称(Laravel中的“IndexController”左右)。有人知道怎么做吗?

顺便说一句,我也在Request::capture()工作过,但这仍然没有提供有关该命令的信息。

3 个答案:

答案 0 :(得分:3)

最简单的方法是查看命令行中指定的参数:

if (array_get(request()->server(), 'argv.1') === 'cache:clear') {
    // do things
}

是的,您可以直接使用$_SERVER,但我喜欢使用辅助函数或Facades,因为它们会为您提供当前数据。 我假设 - 在单元测试期间 - 超级全局可能并不总是反映当前测试的请求。

顺便说一下:显然也可以array_get(request()->server('argv'), '1')或类似的东西。 (request()->server('argv.1')此时无效)。或者使用\Request::server()。取决于你最喜欢什么。

答案 1 :(得分:2)

根据git commit类,返回命令名称的方法(例如Symfony\Component\Console\Command\Command)是:

my:command

您应该在扩展$this->getName(); 的Artisan命令中使用它(默认为Artisan命令)。

请记住,它只返回命令名而不返回可用参数(例如,对于命令签名Illuminate\Console\Command,它只会返回my:command {--with-params=})。

答案 2 :(得分:-2)

反思可能会有所帮助?试试这个:

$var = new \ReflectionClass($this);
dd($var);