> 백엔드 개발 > PHP 튜토리얼 > 기본을 넘어 Symfony 콘솔 - 도우미 및 기타 도구

기본을 넘어 Symfony 콘솔 - 도우미 및 기타 도구

Lisa Kudrow
풀어 주다: 2025-02-09 10:45:21
원래의
786명이 탐색했습니다.

기본을 넘어 Symfony 콘솔 - 도우미 및 기타 도구 키 테이크 아웃

Symfony Console 구성 요소를 통해 개발자는 구조화되고 테스트 가능한 CLI 명령을 작성하여 명령이 더 복잡해질 때 다양한 도구를 제공 할 수 있습니다. Symfony Console의 질문 도우미는 명령 실행을위한 대화식 정보를 수집하는 데 사용될 수 있으며, 사용자 입력이 유효하고 특정 기준을 충족하도록합니다.

. Symfony Console은 테이블 클래스를 통해 테이블 ​​클래스를 표시 할 수있는 기능을 제공하며, 이는 구조화 된 데이터를 보여주는 데 유용 할 수 있습니다. Symfony 콘솔을 사용하면 진행률 표시 줄을 구현하여 명령 실행에 대한 피드백을 제공하고 운영 시간에 대한 추정치를 제공합니다. Symfony 콘솔 구성 요소는 채색 및 스타일을 통한 명령 줄 도구 출력을 사용자 정의 할 수 있으며 outputformatterstyle 클래스를 사용하여 사용자 정의 스타일을 생성 할 수도 있습니다.

숫자를 1에서 x로 인쇄하는 프로그램을 작성하십시오. 그러나 숫자 대신 3 개의 인쇄 "fizz"의 배수 및 5 개의 인쇄 "버즈"의 배수. 3과 5의 배수 인 숫자의 경우 "fizzbuzz"를 인쇄합니다. 우리의 명령은 fizzbuzz의 최고 한도가 될 인수를 받게됩니다. 우선, fizzbuzz 클래스를 만들어 봅시다

<span>composer require symfony/console
</span>
로그인 후 복사
로그인 후 복사
로그인 후 복사
꽤 간단합니다. FirstNfizzBuzz () 메소드는 FizzBuzz의 결과를 $ maxValue의 숫자에 대해 인쇄합니다. 그것은 acculateFizzBuzz () 메소드를 재귀 적으로 호출하여이를 수행합니다 다음, 우리의 명령을 쓰자. 다음 내용이있는 fizzcommand.php 파일을 만듭니다

그리고 마지막으로 콘솔 파일.

여기서는 새 콘솔 애플리케이션을 생성하고 fizzcommand ()를 등록합니다. 이 파일을 실행할 수 있도록하는 것을 잊지 마십시오.

이제 ./console 명령을 실행하여 명령이 올바르게 등록되어 있는지 확인할 수 있습니다. 우리는 또한 ./console fizzbuzz : fizzbuzz 25로 명령을 실행할 수 있습니다. 이것은 fizzbuzz 결과를 1에서 25로 계산하고 인쇄합니다. 지금까지 우리는 새로운 일을하지 않았습니다. 그러나 우리의 명령을 향상시킬 수있는 몇 가지 방법이 있습니다. 우선, 명령은 그다지 직관적이지 않습니다. 우리는 명령에 한도를 전달해야한다는 것을 어떻게 알 수 있습니까? 이를 위해 Symfony Console은 질문 도우미를 제공합니다.
<span><span><?php 
</span></span><span><span>declare(strict_types=1);
</span></span><span>
</span><span><span>namespace FizzBuzz;
</span></span><span>
</span><span><span>class Fizzbuzz{
</span></span><span>
</span><span>    <span>public function isFizz(int $value): bool{
</span></span><span>        <span>if($value % 3 === 0){
</span></span><span>            <span>return true;    
</span></span><span>        <span>}
</span></span><span>        <span>return false;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function isBuzz(int $value): bool{
</span></span><span>        <span>if($value % 5 === 0){
</span></span><span>            <span>return true;    
</span></span><span>        <span>}
</span></span><span>        <span>return false;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function calculateFizzBuzz(int $number): bool{
</span></span><span>        <span>if($this->isFizz($number) && $this->isBuzz($number)){
</span></span><span>            <span>echo "FizzBuzz \n";
</span></span><span>            <span>return true;
</span></span><span>        <span>}
</span></span><span>        <span>if($this->isFizz($number)){
</span></span><span>            <span>echo "Fizz \n";
</span></span><span>            <span>return true;
</span></span><span>        <span>}
</span></span><span>        <span>if($this->isBuzz($number)){
</span></span><span>            <span>echo "Buzz \n";
</span></span><span>            <span>return true;
</span></span><span>        <span>}
</span></span><span>        <span>echo $number . "\n";
</span></span><span>        <span>return true;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function firstNFizzbuzz(int $maxValue): void{
</span></span><span>        <span>$startValue = 1;
</span></span><span>
</span><span>        <span>while($startValue <= $maxValue){
</span></span><span>            <span>$this->calculateFizzBuzz($startValue);
</span></span><span>            <span>$startValue++;
</span></span><span>        <span>}
</span></span><span>    <span>}
</span></span><span><span>}
</span></span>
로그인 후 복사
로그인 후 복사
질문 도우미 질문 도우미는 사용자에게 자세한 정보를 요청할 수있는 기능을 제공합니다. 이렇게하면 명령 실행을위한 대화식 정보를 수집 할 수 있습니다. 명령 실행 프롬프트를 통해 실행 한도를 수신하는 대신 명령을 변경하겠습니다. 사용자에게 제한을 요청하십시오. 이를 위해 질문 도우미에는 단일 방법이 있습니다 : ask (). 이 메소드는 인수로서 입력 인터페이스, 출력 인터페이스 및 질문을받습니다. fizzcommand.php 파일을 변경하여 다음과 같이 보입니다.

우리는 더 이상 configure () 메소드에 대한 인수를 기대하지 않습니다. 우리는 기본값이 25 인 새로운 질문을 인스턴스화하고 이전에 이야기 한 Ask () 메소드에서 사용합니다.

이제 우리는 fizzbuzz를 실행하기 전에 제한을 요구하는 대화식 명령을 가지고 있습니다. 질문 도우미는 또한 우리에게 답을 검증 할 수있는 기능을 제공합니다. 한계가 정수인지 확인하는 데 사용해 봅시다.
<span><span><?php
</span></span><span>
</span><span><span>namespace FizzBuzz;
</span></span><span>
</span><span><span>use Symfony<span>\Component\Console\Command\Command</span>;
</span></span><span><span>use Symfony<span>\Component\Console\Input\InputInterface</span>;
</span></span><span><span>use Symfony<span>\Component\Console\Output\OutputInterface</span>;
</span></span><span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>;
</span></span><span>
</span><span><span>use FizzBuzz<span>\Fizzbuzz</span>;
</span></span><span>
</span><span><span>class FizzCommand extends Command{
</span></span><span>
</span><span>    <span>protected function configure(){
</span></span><span>        <span>$this->setName("FizzBuzz:FizzBuzz")
</span></span><span>                <span>->setDescription("Runs Fizzbuzz")
</span></span><span>                <span>->addArgument('Limit', InputArgument<span>::</span>REQUIRED, 'What is the limit you wish for Fizzbuzz?');
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>protected function execute(InputInterface $input, OutputInterface $output){
</span></span><span>
</span><span>        <span>$fizzy = new FizzBuzz();
</span></span><span>        <span>$input = $input->getArgument('Limit');
</span></span><span>
</span><span>        <span>$result = $fizzy->firstNFizzbuzz($input);
</span></span><span>    <span>}
</span></span><span>
</span><span><span>}
</span></span>
로그인 후 복사

우리는 setValidator () 함수를 사용하여 한계가 정수인지 확인할뿐만 아니라 사용자가 빈 공간을 삽입하고 허용 된 최대 시도 양을 2로 설정하는 경우 입력을 정규화하고 있습니다. <.> 질문 도우미는 사용자가 답변 목록, 여러 답변, 사용자 답변 숨기기 및 자동 완성과 같은 더 많은 기능을 제공합니다. 공식 문서에는 이에 대한 더 많은 정보가 있습니다.

테이블 콘솔 구성 요소가 제공하는 또 다른 매우 유용한 기능은 테이블 데이터를 표시 할 수 있다는 것입니다. 테이블을 표시하려면 테이블 클래스를 사용해야합니다. 헤더와 행을 설정하고 마지막으로 테이블을 렌더링하십시오. 이것은 구조화 된 데이터를 보여줄 때 매우 유용 할 수 있습니다. 일부 메트릭 시스템에 대한 전환을 표시하기위한 명령을 만들고 싶다고 상상해 봅시다.

새로운 PHP 파일에 metricscommand.php를 추가하겠습니다

및 새 콘솔 파일 :
<span>composer require symfony/console
</span>
로그인 후 복사
로그인 후 복사
로그인 후 복사
매우 간단한 명령입니다. 일부 값이 인치에서 센티미터에서 센티미터로 변환 된 테이블을 렌더링합니다. ./console 메트릭을 사용하여 명령을 실행하면 결과는 다음과 같습니다.

테이블 클래스는 또한 테이블에 대한 다양한 분리기 스타일을 제공합니다. 더 알고 싶다면이 페이지를 확인하십시오. . 진행 막대

질문과 테이블이 매우 유용 할 수 있지만 가장 중요한 요소는 진행률 표시 줄 일 수 있습니다. 진행률 바는 명령 실행에 대한 피드백을 제공하고 작업이 완료되기까지 얼마나 오래 기다려야할지 명확하게 볼 수 있습니다. 진행 막대는 더 긴 실행 명령에 필수적입니다. 그것들을 사용하려면 진행대가 필요하고 총 단위를 전달하고 (실제로 얼마나 많은 단위를 알고 있다면) 명령이 실행될 때이를 전진시킵니다. 진행 막대가있는 간단한 명령은 다음과 같이 보일 수 있습니다. 기본을 넘어 Symfony 콘솔 - 도우미 및 기타 도구 및 각 콘솔 :

이것은 매우 간단한 명령입니다. 우리는 수면 () 함수를 통해 막대와 루프를 설정합니다. 최종 출력은 다음과 같습니다

진행 막대에 대한 자세한 내용은 공식 문서에서 찾을 수 있습니다.

진행 상황을 커스터마이징합니다 사용자가 대기하는 동안 추가 정보를 제공하는 데 유용 할 수 있습니다. 기본적으로 진행률 표시 줄에 표시된 정보는 outputinterface 인스턴스의 구두 수준에 따라 다릅니다. 따라서 다른 수준의 정보를 표시하려면 setformat () 메소드를 사용할 수 있습니다.

내장 형식은 다음과 같습니다. 정상, 장황, 매우 _verbose 및 디버그 우리가 사용하면 예를 들어 일반 형식을 사용하면 결과가 다음과 같습니다.

우리는 또한 우리 자신의 형식을 설정할 수 있습니다 진행 막대는 다른 특정 자리 표시 자로 구성된 문자열입니다. 우리는 이러한 특정 자리 표시자를 결합하여 자신의 진행률 표시 줄을 만들 수 있습니다. 사용 가능한 장소 보유자는 현재, 최대, 막대, 백분율, 경과, 남은, 추정, 메모리 및 메시지입니다. 예를 들어, 동일한 기본 기본 진행률 표시 줄을 복사하려면 다음을 사용할 수 있습니다.

진행률 표시 줄을 사용자 정의하는 데 더 많은 것이 있습니다. 명령 내부에서 명령을 호출합니다 또 다른 매우 유용한 기능은 명령 내부에서 명령을 실행하는 기능입니다. 예를 들어, 성공적으로 실행하기위한 다른 명령에 의존하는 명령 또는 순서대로 실행하려는 명령이있을 수 있습니다. 예를 들어, 우리는 fizzbuzz 명령을 실행하도록 명령을 만들고 싶다고 상상해보십시오. /src 폴더와 Execute () 메소드 내부에 새 명령을 만들어야합니다.

<span>composer require symfony/console
</span>
로그인 후 복사
로그인 후 복사
로그인 후 복사
Fizzbuzz 명령은 어떤 주장도받지 않기 때문에 충분할 것입니다. 우리의 명령에 인수가 필요한 경우 인수 배열을 만들고 배열 클래스를 사용하여 전달해야합니다.

외에는 명령 이름과 함께 find () 메소드를 사용하여 명령을 찾아서 등록하는 것입니다. 색상과 스타일 채색 및 스타일링 출력은 사용자에게 명령의 실행에 대한 정보를 알리거나 알리는 데 유용 할 수 있습니다. 이를 위해 다음과 마찬가지로 다음 태그를 Writeln () 메소드에 추가하면됩니다.

outputformatterStyle 클래스를 사용하여 자신의 스타일을 정의 할 수있는 옵션도 있습니다.

스타일링에 대한 자세한 내용은 여기에서 찾을 수 있습니다.

합산 스타일링에서 도우미에 이르기까지, 우리는 Symfony Console이 상자 밖으로 제공하는 많은 기능을 보았습니다. 오늘 이후로 명령 줄 도구를 잘못 문서화 한 것에 대한 변명은 전혀 없습니다! 콘솔의 어떤 도우미와 구성 요소를 자주 사용합니까? CLI 도구를 어떻게 시작합니까? Symfony 콘솔이 충분합니까, 아니면 대안을 선호합니까?

Symfony Console에 대한 자주 묻는 질문 (FAQ) Symfony Console과 기타 PHP 콘솔 응용 프로그램의 주요 차이점은 무엇입니까?

Symfony Console은 명령 줄 인터페이스 (CLI)를 생성하는 방법을 제공하는 Symfony PHP 프레임 워크의 구성 요소입니다. 다른 PHP 콘솔 애플리케이션과 달리 Symfony Console은 CLI 애플리케이션 구축에 대한 구조화되고 객체 지향적 인 접근 방식을 제공합니다. 명령을 정의하고 입력 및 출력을 처리하고 응용 프로그램의 수명주기를 관리하는 클래스 세트를 제공합니다. 또한 Symfony Console은 다른 PHP 콘솔 애플리케이션에서 일반적으로 찾을 수없는 컬러 서식, 진행률 표시 줄, 테이블 및 기타 고급 콘솔 기능을 지원합니다.

Symfony 콘솔에서 사용자 정의 명령을 어떻게 만들 수 있습니까? . Symfony Console에서 사용자 정의 명령을 작성하려면 명령 클래스를 확장하고 configure () 및 execute () 메소드를 구현해야합니다. configure () 메소드는 명령 이름, 인수 및 옵션을 정의하는 데 사용되며 execute () 메소드에는 명령의 논리가 포함되어 있습니다. 명령 클래스가 생성되면 add () 메소드를 사용하여 응용 프로그램에 추가 할 수 있습니다.
<span><span><?php 
</span></span><span><span>declare(strict_types=1);
</span></span><span>
</span><span><span>namespace FizzBuzz;
</span></span><span>
</span><span><span>class Fizzbuzz{
</span></span><span>
</span><span>    <span>public function isFizz(int $value): bool{
</span></span><span>        <span>if($value % 3 === 0){
</span></span><span>            <span>return true;    
</span></span><span>        <span>}
</span></span><span>        <span>return false;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function isBuzz(int $value): bool{
</span></span><span>        <span>if($value % 5 === 0){
</span></span><span>            <span>return true;    
</span></span><span>        <span>}
</span></span><span>        <span>return false;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function calculateFizzBuzz(int $number): bool{
</span></span><span>        <span>if($this->isFizz($number) && $this->isBuzz($number)){
</span></span><span>            <span>echo "FizzBuzz \n";
</span></span><span>            <span>return true;
</span></span><span>        <span>}
</span></span><span>        <span>if($this->isFizz($number)){
</span></span><span>            <span>echo "Fizz \n";
</span></span><span>            <span>return true;
</span></span><span>        <span>}
</span></span><span>        <span>if($this->isBuzz($number)){
</span></span><span>            <span>echo "Buzz \n";
</span></span><span>            <span>return true;
</span></span><span>        <span>}
</span></span><span>        <span>echo $number . "\n";
</span></span><span>        <span>return true;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function firstNFizzbuzz(int $maxValue): void{
</span></span><span>        <span>$startValue = 1;
</span></span><span>
</span><span>        <span>while($startValue <= $maxValue){
</span></span><span>            <span>$this->calculateFizzBuzz($startValue);
</span></span><span>            <span>$startValue++;
</span></span><span>        <span>}
</span></span><span>    <span>}
</span></span><span><span>}
</span></span>
로그인 후 복사
로그인 후 복사
Symfony 콘솔에서 입력 및 출력을 어떻게 처리 할 수 ​​있습니까?

Symfony Console은 입력 인터페이스를 제공하고 제공합니다. 명령에서 입력 및 출력을 처리하려면 OutputInterface. InputInterface는 명령 인수 및 옵션을 얻는 메소드를 제공하는 반면 OutputInterface는 콘솔에 쓸 수있는 메소드를 제공합니다. 또한 입력 및 입력 클래스를 사용하여 명령 인수 및 옵션을 정의 할 수 있습니다. Symfony 콘솔에서 도우미를 어떻게 사용할 수 있습니까?

Symfony 콘솔의 도우미는 명령에 대한 추가 기능을 제공하는 클래스입니다. 명령의 gethelper () 메소드를 사용하여 액세스 할 수 있습니다. Symfony Console은 대화식 입력을위한 QuestionHelper, 진행률 막대를위한 ProgressBarhelper 및 표 형식 데이터의 테이블 헬퍼와 같은 여러 내장 된 도우미가 포함되어 있습니다.

Symfony 콘솔에서 명령을 어떻게 테스트 할 수 있습니까?

Symfony Console은 명령을 테스트하기 위해 CommandTester 클래스를 제공합니다. CommandTester 클래스를 사용하면 특정 입력으로 명령을 실행하고 출력을 캡처 할 수 있습니다. 그런 다음 명령의 동작을 확인하기 위해 출력에 대한 주장을 할 수 있습니다.

Symfony 콘솔의 오류를 어떻게 처리 할 수 ​​있습니까?

Symfony 콘솔의 오류는 예외를 사용하여 처리 할 수 ​​있습니다. 명령을 실행하는 동안 오류가 발생하면 예외를 던질 수 있습니다. Symfony Console은 예외를 포착하고 사용자에게 오류 메시지를 표시합니다.

Symfony 프레임 워크 외부의 Symfony 콘솔 구성 요소를 어떻게 사용할 수 있습니까?

Symfony 콘솔 구성 요소는 독립형 구성 요소입니다. 이는 Symfony 프레임 워크 외부에서 사용할 수 있음을 의미합니다. Composer를 사용하여 설치하고 모든 PHP 프로젝트에서 CLI 애플리케이션을 구축하는 데 사용할 수 있습니다.

콘솔 출력의 모양을 사용자 정의 할 수 있습니까?

Symfony Console은 모양을 사용자 정의하는 몇 가지 방법을 제공합니다. 콘솔 출력의. 컬러 코드를 사용하여 텍스트 색상을 변경하고, 텍스트 스타일을 변경하기위한 형식 코드 및 섹션을 만들 수 있습니다. ProgressBar 및 테이블 클래스를 사용하여 진행률 표시 줄과 테이블을 만들 수도 있습니다.

여러 명령으로 콘솔 애플리케이션을 어떻게 만들 수 있습니까?

여러 명령으로 콘솔 애플리케이션을 만들려면 가능합니다. 응용 프로그램에 여러 명령 클래스를 추가하십시오. 각 명령 클래스는 명령 클래스를 확장하고 configure () 및 execute () 메소드를 구현해야합니다. 그런 다음 응용 프로그램의 add () 메소드를 사용하여 명령을 추가 할 수 있습니다.

Symfony 콘솔 구성 요소를 사용하여 작업을 자동화하는 방법은 무엇입니까?

Symfony 콘솔 구성 요소를 사용하여 자동화 할 수 있습니다. 특정 작업을 수행하고 명령 행 또는 스크립트에서 이러한 명령을 실행하는 명령을 작성하여 작업. CRON과 같은 작업 스케줄러를 사용하여 특정 간격으로 실행하도록 명령을 예약 할 수도 있습니다.

위 내용은 기본을 넘어 Symfony 콘솔 - 도우미 및 기타 도구의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿