>  기사  >  PHP 프레임워크  >  명령줄 스크립트를 실행하는 Laravel에 대해 이야기해 보겠습니다.

명령줄 스크립트를 실행하는 Laravel에 대해 이야기해 보겠습니다.

WBOY
WBOY앞으로
2022-04-06 17:49:562991검색

이 기사에서는 Laravel에 대한 관련 지식을 제공하며, 주로 명령줄 스크립트 실행과 관련된 문제를 소개합니다. Laravel에는 스크립트 파일을 저장하는 데 사용되는 콘솔 디렉터리가 별도로 있습니다. 함께 살펴보시고, 모두에게 도움이 되었으면 좋겠습니다.

명령줄 스크립트를 실행하는 Laravel에 대해 이야기해 보겠습니다.

추천 학습: Laravel 시작하기

우리는 Laravel에 스크립트 파일을 저장하는 데 사용되는 콘솔 디렉터리인 별도의 디렉터리가 있다는 것을 확인했습니다. 이 스크립트 파일은 일반적으로 php 명령을 통해 실행하는 명령줄 스크립트를 참조하며, 이는 많은 프레임워크에서 이러한 기능을 가지고 있습니다. 최신 애플리케이션 개발의 경우 데이터 통계, 데이터 내보내기, 대기열 처리, 일부 자동화된 백엔드 실행 프로그램 등 시간이 많이 소요되는 일부 기능을 이 명령줄 스크립트를 사용하여 실행해야 합니다.

기본적으로 제공되는 스크립트

현재 프레임워크 디렉터리에서는 루트 디렉터리에 있는 php artisan을 실행하며, 여기에는 기존의 모든 명령줄 스크립트가 나열되어 있는 명령줄 도움말 정보를 볼 수 있습니다. 첫 번째 기사에서 우리는 이러한 명령 중 두 가지를 접했습니다.

# php artisan key:generate
# php artisan serve

그 기능 중 하나는 암호화된 캐시 등에 사용해야 하는 고유 키를 생성하는 것이고, 다른 하나는 함께 제공되는 간단한 서버를 실행하는 것입니다. 스크립트 이름을 보면 스크립트가 :로 구분될 수 있으며 콜론 앞에는 캐시:xxx 관련, make:xxx 관련과 같은 큰 카테고리가 있음을 알 수 있습니다. 캐시는 일부 캐시 정보를 처리하는 것과 관련이 있고, make는 필요한 일부 파일을 생성하는 것과 관련되어 있습니다. 예를 들어 컨트롤러를 만들려면 make:controller를 사용할 수 있고, 데이터 모델을 만들려면 make:model을 사용할 수 있습니다.

이러한 기본 내장 스크립트에 대해서는 관련 콘텐츠를 배울 때 배우게 됩니다.

스크립트 사용자 정의

스크립트 사용자 정의는 매우 간단합니다. make:command 명령을 사용하여 명령줄 스크립트를 생성할 수 있습니다.

# php artisan make:command test1
Console command created successfully.

이때, app/Console/Commands 디렉토리에 test1.php 파일이 나타날 것입니다. 이 파일을 열면 몇 가지 수정이 필요합니다.

/**
 * The name and signature of the console command.
 *
 * @var string
 */
protected $signature = 'command:name';
/**
 * The console command description.
 *
 * @var string
 */
protected $description = 'Command description';

signature는 현재 스크립트의 이름을 설정하는 데 사용되며, 설명은 스크립트의 주석 설명을 정의하는 데 사용됩니다. 어디에 사용되나요? 실제로 서명은 php artisan을 통해 이 스크립트를 실행할 때 사용해야 하는 이름입니다. 예를 들어 지금 php artisan을 직접 실행하면 다음과 같은 실행 가능한 명령줄 스크립트가 나타나는 것을 볼 수 있습니다.

 command
  command:name         Command description

물론 이 기본 이름을 사용하는 것은 좋은 생각이 아니므로 이 두 속성을 수정할 수 있습니다.

/**
 * The name and signature of the console command.
 *
 * @var string
 */
protected $signature = 'ZyBlog:Test1';
/**
 * The console command description.
 *
 * @var string
 */
protected $description = '硬核测试1';

이때 다시 php artisan을 실행하면 우리가 정의한 정보를 볼 수 있습니다.

 ZyBlog
  ZyBlog:Test1         硬核测试1

이 스크립트를 실행하는 것은 매우 간단합니다.

# php artisan ZyBlog:Test1

물론 아직 아무것도 하지 않았기 때문에 결과물도 없을 겁니다. 다음으로 수신 매개변수와 출력 정보를 결합했습니다. 매개변수를 받으려면 서명으로 받고 싶은 매개변수와 옵션을 정의해야 합니다. PHP에서 스크립트 매개변수와 옵션 정보를 받는 방법에 대해 이전에 이야기했던 기사를 기억하시나요? Laravel은 이미 이러한 기능을 캡슐화했기 때문에 수신 및 처리를 위해 해당 기능을 사용할 필요가 없으며 직접 사용하면 됩니다. 복습이 필요한 학생은 [PHP 명령줄 매개변수를 얻는 방법] mp.weixin.qq.com/s/dFuGaM1JT…로 이동하여 복습하거나 학습할 수 있습니다.

protected $signature = 'ZyBlog:Test1 {a=1} {--b=*}';
/**
 * Execute the console command.
 *
 * @return int
 */
public function handle()
{
    echo "欢迎进来测试!", PHP_EOL;
    print_r($this->arguments());
    // Array
    // (
    //     [command] => ZyBlog:Test1
    //     [a] => 1
    // )
    print_r($this->options());
    // Array
    // (
    //     [b] => Array
    //         (
    //             [0] => 2
    //         )
    
    //     [help] => 
    //     [quiet] => 
    //     [verbose] => 
    //     [version] => 
    //     [ansi] => 
    //     [no-ansi] => 
    //     [no-interaction] => 
    //     [env] => 
    // )
    echo $this->argument('a'); // 1
    print_r($this->option('b'));
    // Array
    // (
    //     [0] => 2
    // )
    return 0;
}

handle() 함수에서는 현재 스크립트가 실행해야 하는 함수 코드를 작성할 수 있습니다. 그 중 스크립트의 매개변수 정보는args(), 인수()를 통해 전달받을 수 있고, 스크립트의 옵션 정보는 options(), option()을 통해 전달받을 수 있다. 매개 변수 및 옵션에 대해서는 이전 기사에서도 설명했으므로 여기서는 모든 내용을 기본으로 설명하지 않습니다.

매개변수 옵션 소스 코드 분석

매개변수 및 옵션의 경우 Laravel의 기본 호출은 실제로 Symfony의 Console 구성 요소입니다. Symfony/console/Input/ArgvInput.php에서 다음 코드를 볼 수 있습니다.

public function __construct(array $argv = null, InputDefinition $definition = null)
{
    $argv = $argv ?? $_SERVER['argv'] ?? [];
    // strip the application name
    array_shift($argv);
    $this->tokens = $argv;
    parent::__construct($definition);
}
// ……………………
// ……………………
protected function parse()
{
    $parseOptions = true;
    $this->parsed = $this->tokens;
    while (null !== $token = array_shift($this->parsed)) {
        if ($parseOptions && '' == $token) {
            $this->parseArgument($token);
        } elseif ($parseOptions && '--' == $token) {
            $parseOptions = false;
        } elseif ($parseOptions && 0 === strpos($token, '--')) {
            $this->parseLongOption($token);
        } elseif ($parseOptions && '-' === $token[0] && '-' !== $token) {
            $this->parseShortOption($token);
        } else {
            $this->parseArgument($token);
        }
    }
}

분명히 Symfony에서는 argv를 사용하여 매개변수와 옵션을 가져온 다음 입력 변수에 넣고 전달합니다. 이 입력 변수는 매우 중요하며 나중에 요청 관련 내용을 배울 때 이에 대해서도 다루겠습니다. 나중에 실행 코드에서 즉, Command의 핸들() 메서드에서 인수() 또는 옵션()을 사용하여 이 입력의 데이터를 얻습니다. 중단점 디버깅에서 이를 볼 수 있습니다.

명령줄 스크립트를 실행하는 Laravel에 대해 이야기해 보겠습니다.

그렇다면 Laravel은 핸들() 함수를 어떻게 실행하나요? 먼저 artisan 파일을 통해 laravel/framework/src/Illuminate/Foundation/Console/Kernel.php 파일을 호출합니다. Kernel.php의 handler() 메소드에서 Symfony/console/Application.php를 호출한 후 입력합니다. laravel/framework /src/Illuminate/Console/Command.php에서 Execution() 메소드를 실행하고 콜백을 통해 사용자 정의된 Handle() 메소드를 호출합니다.

laravel/framework/src/Illuminate/Console/Command.php 하단에서 Symfony 아래 console/command.php의 메서드가 여전히 호출된다는 점에 유의하세요.

전체 호출 체인은 매우 길지만, 우리 Laravel이 실제로 Symfony 기반 쉘임을 분명히 알 수 있습니다. 웹 요청 측면에서 Symfony는 여전히 하위 수준에서 중요한 역할을 합니다.

추천 학습: Laravel 비디오 튜토리얼

위 내용은 명령줄 스크립트를 실행하는 Laravel에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.im에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제