问题/我尝试了什么:
在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()
工作过,但这仍然没有提供有关该命令的信息。
答案 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);