Rumah > pembangunan bahagian belakang > tutorial php > Konsol Symfony Beyond the Asas - Pembantu dan Alat Lain

Konsol Symfony Beyond the Asas - Pembantu dan Alat Lain

Lisa Kudrow
Lepaskan: 2025-02-09 10:45:21
asal
786 orang telah melayarinya

Konsol Symfony Beyond the Asas - Pembantu dan Alat Lain

Takeaways Key

Artikel ini dikaji semula oleh Wern Ancheta. Terima kasih kepada semua pengulas rakan sebaya SitePoint untuk membuat kandungan SitePoint yang terbaik boleh!

Tidak dapat dinafikan bagaimana perintah konsol yang berguna dapat ketika membangunkan perisian. Tidak lama dahulu kita memperkenalkan semula komponen Konsol Symfony.

Komponen ini membolehkan kami membuat arahan CLI berstruktur dan boleh diuji. Kami mencipta beberapa arahan mudah dan menguji mereka; Tetapi apabila perintah kita menjadi lebih besar dan lebih kompleks, kita memerlukan satu set alat yang berbeza.

inilah yang akan kita lihat hari ini: Alat Konsol Symfony Advanced.

Mari buat arahan yang boleh kita gunakan untuk menunjukkan beberapa ciri ini. Kebanyakan fungsi asas ditunjukkan dalam pengenalan semula kepada artikel Konsol Symfony, jadi pastikan untuk menyemaknya sebelum memajukan-ia adalah bacaan yang cepat tetapi berguna!

Pemasangan Konsol Symfony Beyond the Asas - Pembantu dan Alat Lain

Maklumat penting mengenai komposer boleh didapati di sini, dan jika anda tidak biasa dengan persekitaran PHP terpencil yang direka dengan baik untuk membangunkan aplikasi PHP anda seperti Vagrant, kami mempunyai buku yang hebat yang menerangkan semuanya secara mendalam Beli di sini.
<span>composer require symfony/console
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Membuat Perintah kami Mari buat arahan untuk kegemaran sepanjang masa: Fizzbuzz.

Fizzbuzz adalah masalah mudah yang sering digunakan dalam wawancara pengaturcaraan untuk menegaskan kecekapan pengaturcaraan yang ditemuduga. Takrif Fizzbuzz biasanya datang dalam bentuk berikut:

Tulis program yang mencetak nombor dari 1 hingga x. Tetapi untuk gandaan tiga cetak "Fizz" dan bukannya nombor dan untuk gandaan lima cetak "buzz". Untuk nombor yang merupakan gandaan dari tiga dan lima, cetak "Fizzbuzz".

Perintah kami akan menerima hujah yang akan menjadi had teratas untuk Fizzbuzz.

Pertama sekali, mari buat kelas Fizzbuzz kami.
<span>composer require symfony/console
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

cukup mudah. Kaedah FirstNfizzBuzz () mencetak hasil FizzBuzz untuk $ maxvalue nombor. Ia melakukan ini dengan memanggil kaedah CitriteFizzBuzz () secara rekursif.

Seterusnya, mari tulis arahan kami. Buat fail FizzCommand.php dengan kandungan berikut:

<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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

dan akhirnya fail konsol kami.

<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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

di sini kami membuat aplikasi konsol baru dan mendaftarkan FizzCommand kami () ke dalamnya. Jangan lupa untuk membuat fail ini boleh dilaksanakan.

kita kini boleh menyemak sama ada arahan kami didaftarkan dengan betul dengan menjalankan perintah ./console. Kami juga boleh melaksanakan perintah kami dengan.

Sehingga kini, kami belum melakukan sesuatu yang baru. Tetapi ada beberapa cara kita dapat memperbaiki perintah kita. Pertama sekali, perintah itu tidak begitu intuitif. Bagaimanakah kita tahu bahawa kita perlu lulus had ke arahan? Untuk itu, Konsol Symfony menawarkan kepada kami penolong soalan.

Soalan Helper

Soalan Helper menyediakan fungsi untuk meminta pengguna untuk maklumat lanjut. Dengan cara ini kita boleh mengumpul maklumat secara interaktif untuk pelaksanaan perintah kita.

mari kita ubah perintah kami, bukannya menerima had pelaksanaan melalui arahan pelaksanaan arahan, minta pengguna untuk had. Untuk itu, penolong soalan mempunyai satu kaedah: tanya (). Kaedah ini menerima sebagai argumen inputInterface, outputInterface dan soalan.

mari kita ubah fail fizzcommand.php supaya kelihatan seperti ini:

#!/usr/bin/env php

<span><span><?php 
</span></span><span>
</span><span><span>require_once __DIR__ . '/vendor/autoload.php'; 
</span></span><span>
</span><span><span>use Symfony<span>\Component\Console\Application</span>; 
</span></span><span><span>use FizzBuzz<span>\FizzCommand</span>;
</span></span><span>
</span><span><span>$app = new Application();
</span></span><span><span>$app->add(new FizzCommand());
</span></span><span><span>$app->run();
</span></span>
Salin selepas log masuk
Salin selepas log masuk
Kami tidak lagi mengharapkan hujah pada kaedah konfigurasi (). Kami menegaskan soalan baru dengan lalai 25 dan menggunakannya pada kaedah Ask () yang kami bicarakan sebelumnya.

Sekarang kita mempunyai arahan interaktif yang meminta had sebelum melaksanakan fizzbuzz.

Pembantu soalan juga memberi kita fungsi untuk mengesahkan jawapannya. Oleh itu mari kita gunakan untuk memastikan hadnya adalah integer.

<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>use Symfony<span>\Component\Console\Question\Question</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>}
</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><span>        <span>$helper = $this->getHelper('question');
</span></span><span>        <span>$question = new Question('Please select a limit for this execution: ', 25);
</span></span><span>        <span>$limit = $helper->ask($input, $output, $question);
</span></span><span>
</span><span>        <span>$result = $fizzy->firstNFizzbuzz($limit);
</span></span><span>    <span>}
</span></span><span><span>}
</span></span>
Salin selepas log masuk
Salin selepas log masuk
Bukan sahaja kami memastikan bahawa had kami adalah integer dengan menggunakan fungsi setValidator (), kami juga menormalkan input sekiranya pengguna memasukkan beberapa ruang kosong dan juga menetapkan jumlah maksimum percubaan yang dibenarkan kepada dua.

Soalan Helper menawarkan lebih banyak fungsi seperti membiarkan pengguna memilih dari senarai jawapan, pelbagai jawapan, menyembunyikan jawapan pengguna, dan autocompletion. Dokumentasi rasmi mempunyai lebih banyak maklumat mengenai itu.

Jadual

Satu lagi fungsi yang sangat berguna yang disediakan oleh komponen konsol adalah kemungkinan untuk memaparkan data tabular.

Untuk memaparkan jadual yang kita perlukan untuk menggunakan kelas jadual; Tetapkan tajuk dan baris, dan akhirnya menjadikan jadual. Ini boleh menjadi sangat berguna apabila menunjukkan data berstruktur. Mari kita bayangkan kita mahu membuat arahan untuk menunjukkan penukaran untuk beberapa sistem metrik.

Mari tambahkan metricscommand.php ke fail PHP baru kami.

<span>protected function execute(InputInterface $input, OutputInterface $output){
</span>
        <span>$fizzy = new FizzBuzz();
</span>
        <span>$helper = $this->getHelper('question');
</span>        <span>$question = new Question('Please select a limit for this execution: ', 25);
</span>
        <span>$question->setValidator(function ($answer) {
</span>            <span>if (!is_numeric($answer)) {
</span>                <span>throw new <span>\RuntimeException</span>('The limit should be an integer.');
</span>            <span>}
</span>            <span>return $answer;
</span>        <span>});
</span>
        <span>$question->setNormalizer(function ($value) {
</span>            <span>return $value ? trim($value) : '';
</span>        <span>});
</span>
        <span>$question->setMaxAttempts(2);
</span>        <span>$limit = $helper->ask($input, $output, $question);
</span>
        <span>$result = $fizzy->firstNFizzbuzz($limit);
</span>    <span>}
</span>
Salin selepas log masuk
dan fail konsol baru kami:

<span>composer require symfony/console
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Ia adalah arahan yang sangat mudah: ia menjadikan jadual dengan beberapa nilai yang ditukar dari inci ke sentimeter. Jika kita menjalankan arahan kita menggunakan ./Console Metrics, hasilnya akan menjadi sesuatu seperti ini:

Konsol Symfony Beyond the Asas - Pembantu dan Alat Lain

Kelas meja juga menawarkan kami gaya pemisah yang berbeza untuk jadual kami. Semak halaman ini jika anda ingin mengetahui lebih lanjut. .

Progress Bar

Walaupun soalan dan jadual boleh menjadi sangat berguna, elemen yang paling penting mungkin bar kemajuan. Bar kemajuan memberi kita maklum balas mengenai pelaksanaan arahan dan membolehkan kita melihat pandangan yang jelas tentang berapa lama kita mungkin perlu menunggu operasi selesai.

Bar kemajuan adalah penting untuk arahan berjalan yang lebih lama. Untuk menggunakannya, kita memerlukan bar kemajuan, lulus jumlah unit (jika kita benar -benar tahu berapa banyak unit yang kita harapkan) dan memajukannya sebagai arahan yang dilaksanakan.

Perintah mudah dengan bar kemajuan mungkin kelihatan seperti ini:

<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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
dan konsol masing -masing:

<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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Ini arahan yang sangat mudah. Kami menyediakan bar dan gelung melalui fungsi tidur (). Output akhir akan kelihatan seperti ini:

Konsol Symfony Beyond the Asas - Pembantu dan Alat Lain maklumat lanjut mengenai bar kemajuan boleh didapati dalam dokumentasi rasmi.

Menyesuaikan bar kemajuan kami

Menyesuaikan bar kemajuan boleh berguna untuk memberikan maklumat tambahan sementara pengguna menunggu.

Secara lalai, maklumat yang ditunjukkan dalam bar kemajuan bergantung pada tahap kelebihan OutputInterface Instance. Jadi, jika kita mahu menunjukkan tahap maklumat yang berbeza, kita boleh menggunakan kaedah setFormat ().

Format terbina dalam adalah: normal, verbose, sangat_verbose dan debug.
#!/usr/bin/env php

<span><span><?php 
</span></span><span>
</span><span><span>require_once __DIR__ . '/vendor/autoload.php'; 
</span></span><span>
</span><span><span>use Symfony<span>\Component\Console\Application</span>; 
</span></span><span><span>use FizzBuzz<span>\FizzCommand</span>;
</span></span><span>
</span><span><span>$app = new Application();
</span></span><span><span>$app->add(new FizzCommand());
</span></span><span><span>$app->run();
</span></span>
Salin selepas log masuk
Salin selepas log masuk

Jika kita menggunakan format penggunaan biasa sebagai contoh, hasilnya akan kelihatan seperti ini:

kita juga boleh menetapkan format kita sendiri. Konsol Symfony Beyond the Asas - Pembantu dan Alat Lain

Bar Kemajuan adalah rentetan yang terdiri daripada tempat letak tertentu yang berbeza. Kita boleh menggabungkan tempat -tempat letak tertentu untuk mencipta bar kemajuan kita sendiri. Letak tempat yang tersedia adalah: semasa, max, bar, peratus, berlalu, tinggal, dianggarkan, memori dan mesej. Jadi, misalnya, kami ingin menyalin bar kemajuan lalai yang sama, kami boleh menggunakan yang berikut:

Terdapat lebih banyak lagi untuk menyesuaikan bar kemajuan - baca tentangnya di sini.

<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>use Symfony<span>\Component\Console\Question\Question</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>}
</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><span>        <span>$helper = $this->getHelper('question');
</span></span><span>        <span>$question = new Question('Please select a limit for this execution: ', 25);
</span></span><span>        <span>$limit = $helper->ask($input, $output, $question);
</span></span><span>
</span><span>        <span>$result = $fizzy->firstNFizzbuzz($limit);
</span></span><span>    <span>}
</span></span><span><span>}
</span></span>
Salin selepas log masuk
Salin selepas log masuk
memanggil arahan di dalam arahan

Satu lagi ciri yang sangat berguna adalah keupayaan untuk menjalankan arahan di dalam arahan. Sebagai contoh, kami mungkin mempunyai arahan yang bergantung kepada arahan lain untuk berjaya dijalankan, atau penggantian arahan yang mungkin kami ingin lari dalam urutan.

Sebagai contoh, bayangkan kami ingin membuat arahan untuk menjalankan perintah Fizzbuzz kami. Kami perlu membuat arahan baru di dalam folder kami /Src dan di dalam kaedah Execute (), mempunyai yang berikut:

<span>composer require symfony/console
</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Oleh kerana arahan FizzBuzz kami tidak menerima sebarang hujah, itu akan mencukupi. Sekiranya arahan kami memerlukan hujah, kami perlu membuat pelbagai hujah dan menggunakan kelas ArrayInput untuk menyampaikannya.

selain itu semua tentang menggunakan kaedah mencari () dengan nama arahan kami untuk mencari dan mendaftarkan arahan kami.

Warna dan Gaya

Mewarna dan gaya output boleh berguna untuk memberi amaran atau memaklumkan kepada pengguna tentang sesuatu dalam pelaksanaan perintah. Untuk itu, kita hanya perlu menambah tag berikut ke kaedah WriteLn () kami, sama seperti yang berikut:

<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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Terdapat juga pilihan untuk menentukan gaya kita sendiri menggunakan kelas OutputFormatTtersTyle:

<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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Maklumat lanjut mengenai gaya output boleh didapati di sini.

penjumlahan

Dari gaya kepada pembantu, kami melihat banyak fungsi yang disediakan oleh Konsol Symfony dari kotak. Selepas hari ini, tidak ada alasan untuk mempunyai alat baris perintah yang didokumentasikan dengan teruk!

Pembantu dan komponen konsol yang sering anda gunakan? Bagaimana anda memulakan alat CLI anda? Adakah konsol Symfony cukup untuk anda, atau adakah anda lebih suka alternatif?

Soalan Lazim (Soalan Lazim) Mengenai Konsol Symfony

Apakah perbezaan utama antara Konsol Symfony dan aplikasi konsol PHP yang lain? Tidak seperti aplikasi konsol PHP yang lain, Konsol Symfony menawarkan pendekatan berstruktur dan berorientasikan objek untuk membina aplikasi CLI. Ia menyediakan satu set kelas untuk menentukan arahan, mengendalikan input dan output, dan menguruskan kitaran hayat aplikasi. Di samping itu, Konsol Symfony menyokong pemformatan warna, bar kemajuan, jadual, dan ciri -ciri konsol lanjutan yang lain, yang tidak biasa dijumpai dalam aplikasi konsol PHP yang lain.

Mewujudkan perintah tersuai dalam konsol Symfony melibatkan memperluaskan kelas arahan dan melaksanakan kaedah konfigurasi () dan melaksanakan (). Kaedah konfigurasi () digunakan untuk menentukan nama arahan, argumen, dan pilihan, manakala kaedah pelaksanaan () mengandungi logik arahan. Sebaik sahaja kelas arahan dibuat, ia boleh ditambah ke aplikasi menggunakan kaedah Tambah (). OutputInterface untuk mengendalikan input dan output dalam arahan. InputInterface menyediakan kaedah untuk mendapatkan argumen dan pilihan arahan, manakala OutputInterface menyediakan kaedah untuk menulis ke konsol. Anda juga boleh menggunakan kelas inputArgument dan inputOption untuk menentukan argumen dan pilihan arahan.

Bagaimana saya boleh menggunakan pembantu dalam konsol Symfony?

Pembantu dalam Konsol Symfony adalah kelas yang menyediakan fungsi tambahan untuk arahan. Mereka boleh diakses menggunakan kaedah GetHelper () arahan. Konsol Symfony merangkumi beberapa pembantu terbina dalam, seperti soal selidik untuk input interaktif, ProgressBarhelper untuk Bar Kemajuan, dan TableHelper untuk Data Tabular. > Konsol Symfony menyediakan kelas CommandTester untuk menguji arahan. Kelas CommandTester membolehkan anda melaksanakan arahan dengan input tertentu dan menangkap output. Anda kemudian boleh membuat pernyataan pada output untuk mengesahkan tingkah laku perintah.

Bagaimana saya boleh mengendalikan kesilapan dalam Konsol Symfony? Jika ralat berlaku semasa pelaksanaan arahan, anda boleh membuang pengecualian. Konsol Symfony akan menangkap pengecualian dan memaparkan mesej ralat kepada pengguna.

Bagaimana saya boleh menggunakan komponen Konsol Symfony di luar kerangka Symfony? yang bermaksud ia boleh digunakan di luar kerangka Symfony. Anda boleh memasangnya menggunakan komposer dan menggunakannya untuk membina aplikasi CLI dalam mana -mana projek PHP. daripada output konsol. Anda boleh menggunakan kod warna untuk menukar warna teks, kod format untuk menukar gaya teks, dan tag untuk membuat bahagian. Anda juga boleh menggunakan kelas ProgressBar dan meja untuk membuat bar dan jadual kemajuan.

Bagaimana saya boleh membuat aplikasi konsol dengan pelbagai arahan?

Tambah kelas arahan berganda ke aplikasi. Setiap kelas arahan harus melanjutkan kelas arahan dan melaksanakan kaedah konfigurasi () dan melaksanakan (). Anda kemudian boleh menggunakan kaedah Tambah () aplikasi untuk menambah arahan. Tugas dengan membuat arahan yang melaksanakan tugas -tugas tertentu dan menjalankan arahan ini dari baris arahan atau dari skrip. Anda juga boleh menjadualkan perintah untuk dijalankan pada selang waktu tertentu menggunakan penjadual tugas seperti Cron.

Atas ialah kandungan terperinci Konsol Symfony Beyond the Asas - Pembantu dan Alat Lain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan