Lumen의 장인 서버

11375 단어 lumenartisanlaravel
나는 Lumen에서 php artisan serve 명령을 구현하기 위한 많은 제안을 발견했지만, 개발 중, 특히 마이크로서비스의 대중화와 함께, 일반적으로 포트만 사용하는 개발 환경에서 서로 다른 애플리케이션이 통신해야 하는 상황이 있을 수 있습니다. 입장.

따라서 php -S host:port -t public를 사용하여 응용 프로그램별로 응용 프로그램을 시작하는 것은 약간 까다롭거나 성가실 수 있습니다.

다행히 env에 APP_URL 값이 있으면 프로세스의 일부를 용이하게 할 수 있습니다.

먼저 ServeCommand.php 편집 후 ./app/Console/Commands/ 폴더에 app/Console/Kernel.php 라는 파일을 생성하고 다음과 같이 ServerCommand 를 넣습니다.

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Laravel\Lumen\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    protected $commands = [
        Commands\ServeCommand::class,
    ];


클래스Illuminate\Console\Command에는 getOptions()라는 보호된 메서드가 있습니다. 이를 사용하여 명령의 매개변수에 대한 기본값을 정의하거나 매개변수가 선택적( Symfony\Component\Console\Input\InputOption::VALUE_OPTIONAL )인지 또는 필수( Symfony\Component\Console\Input\InputArgument::REQUIRED )인지 알릴 수도 있습니다.

More details in: https://symfony.com/doc/current/console/input.html



제안은 옵션으로 사용하는 것입니다. 즉, 사용자가 원하는 경우 명령을 입력할 때 호스트 또는 포트를 변경할 수 있도록 하거나 APP_URL 값을 사용하는 것입니다. 내가 사용한 기본 호스트 및 포트 값을 얻으려면 parse_url 사용 예:

protected function getOptions()
{
    $url = env('APP_URL');

    return [
        [
            'host', null, InputOption::VALUE_OPTIONAL, 'The host address to serve the application on.', parse_url($url, PHP_URL_HOST)
        ], [
            'port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the application on.', parse_url($url, PHP_URL_PORT)
        ],
    ];
}


호스트와 포트(명령줄 또는 .env를 통해 정의됨)를 얻으려면 다음을 사용하십시오.

$host = $this->input->getOption('host');

$port = $this->input->getOption('port');


그러나 여전히 세부 사항이 있습니다. 사용자가 다른 폴더 수준에서 artisan serve를 시작할 수 있으므로 -t 디렉터리를 시작하도록 public ( php built in webserver )를 설정합니다. 프로젝트 디렉토리를 얻으려면 다음을 사용하십시오.

$base = $this->laravel->basePath();


명령 호출은 다음과 같아야 합니다.

passthru('"' . PHP_BINARY . '"' . " -S {$host}:{$port} -t \"{$base}/public\"");


요점의 출처: https://gist.github.com/brcontainer/44f47d35f47cd4e33f14023f8521bea1

전체 소스 코드:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;

class ServeCommand extends 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 void
     */
    public function handle()
    {
        $host = $this->input->getOption('host');

        $port = $this->input->getOption('port');

        $base = $this->laravel->basePath();

        $this->info("Lumen development server started on http://{$host}:{$port}/");

        passthru('"' . PHP_BINARY . '"' . " -S {$host}:{$port} -t \"{$base}/public\"");
    }

    /**
     * Get the console command options.
     *
     * @return array
     */
    protected function getOptions()
    {
        $url = env('APP_URL');

        return [
            [
                'host', null, InputOption::VALUE_OPTIONAL, 'The host address to serve the application on.', parse_url($url, PHP_URL_HOST)
            ], [
                'port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the application on.', parse_url($url, PHP_URL_PORT)
            ],
        ];
    }

}

좋은 웹페이지 즐겨찾기