vd/vendor/dipper/console/src/Commands/ServeCommand.php
2018-11-05 09:26:30 +08:00

100 lines
2.2 KiB
PHP

<?php
namespace Dipper\Console\Commands;
use Dipper\Console\Finder;
use Dipper\Console\Command;
use Illuminate\Support\ProcessUtils;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Process\PhpExecutableFinder;
use Symfony\Component\Console\Command\Command as SymfonyCommand;
class ServeCommand extends SymfonyCommand
{
use Finder;
use Command;
/**
* The console command name.
*
* @var string
*/
protected $name = 'serve';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Serve the application on the PHP development server';
/**
* Execute the console command.
*
* @return int
*
* @throws \Exception
*/
public function fire()
{
chdir($this->basePath('public'));
$this->info("<info>Laravel development server started:</info> <http://{$this->host()}:{$this->port()}>");
passthru($this->serverCommand(), $status);
return $status;
}
/**
* Get the full server command.
*
* @return string
*/
protected function serverCommand()
{
return sprintf(
'%s -S %s:%s %s',
ProcessUtils::escapeArgument((new PhpExecutableFinder)->find(false)),
$this->host(),
$this->port(),
ProcessUtils::escapeArgument(__DIR__.'/../../server.php')
);
}
/**
* Get the host for the command.
*
* @return string
*/
protected function host()
{
return $this->option('host');
}
/**
* Get the port for the command.
*
* @return string
*/
protected function port()
{
return $this->option('port');
}
/**
* Get the console command options.
*
* @return array
*/
public function getOptions()
{
return [
['host', null, InputOption::VALUE_OPTIONAL, 'The host address to serve the application on.', '127.0.0.1'],
['port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the application on.', 8000],
];
}
}