


- Komponen Konsol Symfony membolehkan pemaju membuat arahan CLI berstruktur dan boleh diuji, menyediakan pelbagai alat untuk apabila arahan menjadi lebih kompleks.
- Pembantu Soalan dalam Konsol Symfony boleh digunakan untuk mengumpul maklumat secara interaktif untuk pelaksanaan arahan, memastikan input pengguna sah dan memenuhi kriteria tertentu.
- Konsol Symfony menawarkan keupayaan untuk memaparkan data jadual melalui kelas jadual, yang boleh berguna untuk menunjukkan data berstruktur.
- Dengan Konsol Symfony, bar kemajuan boleh dilaksanakan untuk memberi maklum balas mengenai pelaksanaan perintah dan memberikan anggaran berapa lama operasi akan diambil.
- Komponen Konsol Symfony membolehkan penyesuaian output alat baris arahan melalui pewarna dan gaya, dan juga membolehkan penciptaan gaya tersuai menggunakan kelas outputFormatterstyle.
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
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>
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>
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 </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></span></span>
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></span>
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></span>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></span>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>dan fail konsol baru kami:
<span>composer require symfony/console </span>
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:
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 </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></span></span>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></span>Ini arahan yang sangat mudah. Kami menyediakan bar dan gelung melalui fungsi tidur (). Output akhir akan kelihatan seperti ini:
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></span>
Jika kita menggunakan format penggunaan biasa sebagai contoh, hasilnya akan kelihatan seperti ini:
kita juga boleh menetapkan format kita sendiri.
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></span>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>
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 </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></span></span>
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></span>
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!

Untuk melindungi permohonan dari serangan XSS yang berkaitan dengan sesi, langkah-langkah berikut diperlukan: 1. Tetapkan bendera httponly dan selamat untuk melindungi kuki sesi. 2. Kod eksport untuk semua input pengguna. 3. Melaksanakan Dasar Keselamatan Kandungan (CSP) untuk mengehadkan sumber skrip. Melalui dasar-dasar ini, serangan XSS yang berkaitan dengan sesi dapat dilindungi dengan berkesan dan data pengguna dapat dipastikan.

Kaedah untuk mengoptimumkan prestasi sesi PHP termasuk: 1. Mula sesi kelewatan, 2. Gunakan pangkalan data untuk menyimpan sesi, 3. Data sesi kompres, 4. Mengurus kitaran hayat sesi, dan 5. Melaksanakan perkongsian sesi. Strategi ini dapat meningkatkan kecekapan aplikasi dalam persekitaran konkurensi yang tinggi.

Thesession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata, setInseconds.1) it'sconfiguredinphp.iniorviaini_set (). 2) abalanceisneededtoavoidperformanceissuesandunexpectedlogouts.3) php'sgarbageCollectionisprobabilistic, influedbygc_probabi

Dalam PHP, anda boleh menggunakan fungsi session_name () untuk mengkonfigurasi nama sesi. Langkah -langkah tertentu adalah seperti berikut: 1. Gunakan fungsi session_name () untuk menetapkan nama sesi, seperti session_name ("my_session"). 2. Selepas menetapkan nama sesi, hubungi session_start () untuk memulakan sesi. Mengkonfigurasi nama sesi boleh mengelakkan konflik data sesi antara pelbagai aplikasi dan meningkatkan keselamatan, tetapi memberi perhatian kepada keunikan, keselamatan, panjang dan penetapan masa sesi.

ID sesi hendaklah dijadikan semula secara teratur pada log masuk, sebelum operasi sensitif, dan setiap 30 minit. 1. Meningkatkan semula ID Sesi semasa log masuk untuk mengelakkan serangan tetap sesi. 2. Regenerate sebelum operasi sensitif untuk meningkatkan keselamatan. 3. Penjanaan semula secara berkala mengurangkan risiko penggunaan jangka panjang, tetapi pengalaman pengguna perlu ditimbang.

Menetapkan Parameter Cookie Sesi di PHP boleh dicapai melalui fungsi session_set_cookie_params (). 1) Gunakan fungsi ini untuk menetapkan parameter, seperti masa tamat, laluan, nama domain, bendera keselamatan, dan lain -lain; 2) hubungi session_start () untuk membuat parameter berkuatkuasa; 3) menyesuaikan parameter secara dinamik mengikut keperluan, seperti status log masuk pengguna; 4) Perhatikan untuk menetapkan bendera selamat dan httponly untuk meningkatkan keselamatan.

Tujuan utama menggunakan sesi dalam PHP adalah untuk mengekalkan status pengguna antara halaman yang berbeza. 1) Sesi dimulakan melalui fungsi session_start (), mewujudkan ID sesi yang unik dan menyimpannya dalam cookie pengguna. 2) Data sesi disimpan di pelayan, yang membolehkan data diluluskan antara permintaan yang berbeza, seperti status log masuk dan kandungan keranjang belanja.

Bagaimana untuk berkongsi sesi antara subdomain? Dilaksanakan dengan menetapkan kuki sesi untuk nama domain biasa. 1. Tetapkan domain cookie sesi ke .example.com di sebelah pelayan. 2. Pilih kaedah penyimpanan sesi yang sesuai, seperti memori, pangkalan data atau cache yang diedarkan. 3. Lulus ID Sesi melalui kuki, dan pelayan mengambil semula dan mengemas kini data sesi berdasarkan ID.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Dreamweaver Mac版
Alat pembangunan web visual

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini