100 lines
2.2 KiB
PHP
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],
|
|
];
|
|
}
|
|
}
|