cen*_*ob8 17 php laravel laravel-4
当我在终端中运行php artisan migrate
时,当确实没有任何迁移时,会导致"无法迁移".
当我Artisan::call('migrate')
在代码中使用(在自定义Artisan命令中使用它)时,这不会返回任何消息.它只是执行代码而没有任何反馈.
如果我vardump()
是Artisan::call
方法的结果,它只返回一个int(0)
是否有可能得到Artisan调用方法的响应?
PiT*_*ber 20
对于使用Laravel 5.1的所有这些都没有用,但你可以简单地使用:
Artisan::output()
Run Code Online (Sandbox Code Playgroud)
所有命令的返回结果都在类Symfony\Component\Console\Command\Command
,方法中定义run
:
return is_numeric($statusCode) ? (int) $statusCode : 0;
Run Code Online (Sandbox Code Playgroud)
的$statusCode
变量是通过调用命令的设置execute
方法,该方法在技术人员的情况下,在类定义Illuminate\Console\Command
:
protected function execute(InputInterface $input, OutputInterface $output)
{
return $this->fire();
}
Run Code Online (Sandbox Code Playgroud)
该fire
方法的结果由单个命令决定,在命令的情况下,php artisan migrate
从方法返回任何内容,因此$statusCode
为null(这就是为什么从Symfony\Component\Console\Command\Command::run
方法返回0 )
如果你想从自定义命令中获得响应,只需从你的fire
方法返回一个整数,它就会冒回来$statusCode
.您可以使用它以编程方式切换自定义命令的不同结果.
如果您特别想从artisan:migrate
命令中获取结果,那么除了在您自己调用它的自定义命令中包装命令之外,我认为您无法更改返回值.
小智 7
我能够通过以下方式获得Artisan :: call()的输出:
use Symfony\Component\Console\Output\StreamOutput;
$stream = fopen("php://output", "w");
Artisan::call("migrate", array(), new StreamOutput($stream));
var_dump($stream);
Run Code Online (Sandbox Code Playgroud)
是的,有可能。要从自定义命令中获取内置artisan命令的输出,OutputStream
请将命令中的传递到中Artisan::call
。例:
class MyCommand extends \Illuminate\Console\Command
{
public function fire()
{
\Artisan::call('optimize', [], $this->getOutput());
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8756 次 |
最近记录: |