Symfony - Komponen

Seperti yang telah dibahas sebelumnya, komponen Symfony adalah pustaka PHP mandiri yang menyediakan fitur khusus, yang dapat digunakan dalam aplikasi PHP apa pun. Komponen baru yang berguna diperkenalkan di setiap rilis Symfony. Saat ini, ada 30+ komponen berkualitas tinggi dalam framework Symfony. Mari kita pelajari tentang penggunaan komponen Symfony di bab ini.

Menginstal Komponen Symfony

Komponen Symfony dapat diinstal dengan mudah menggunakan perintah komposer. Mengikuti perintah umum dapat digunakan untuk menginstal komponen Symfony apa pun.

cd /path/to/project/dir 
composer require symfony/<component_name>

Mari kita buat aplikasi php sederhana dan coba instal Filesystem komponen.

Step 1 - Buat folder untuk aplikasi, filesystem-example

cd /path/to/dev/folder 
mdkir filesystem-example 
cd filesystem-example

Step 2 - Instal komponen Filesystem menggunakan perintah berikut.

composer require symfony/filesystem

Step 3 - Buat file main.php dan masukkan kode berikut.

<?php 
   require_once __DIR__ . '/vendor/autoload.php'; 
   use Symfony\Component\Filesystem\Filesystem; 
   use Symfony\Component\Filesystem\Exception\IOExceptionInterface; 
   
   $fs = new Filesystem(); 
   try { 
      $fs->mkdir('./sample-dir'); 
      $fs->touch('./sample-dir/text.txt'); 
   } catch (IOExceptionInterface $e) { 
      echo $e; 
   } 
?>

Baris pertama sangat penting, yang memuat semua kelas yang diperlukan dari semua komponen yang diinstal menggunakan perintah Komposer. Baris berikutnya menggunakan kelas Filesystem.

Step 4 - Jalankan aplikasi menggunakan perintah berikut dan itu akan membuat folder baru sample-dir dan file test.txt di bawahnya.

php main.php

Rincian Komponen Symfony

Symfony menyediakan komponen mulai dari fitur sederhana, misalnya sistem file hingga fitur lanjutan, misalnya peristiwa, teknologi container, dan injeksi ketergantungan. Beri tahu kami tentang semua komponen satu per satu di bagian berikut.

Berkas sistem

Komponen sistem file menyediakan perintah sistem dasar yang berkaitan dengan file dan direktori seperti pembuatan file, pembuatan folder, keberadaan file, dll. Komponen sistem file dapat diinstal dengan menggunakan perintah berikut.

composer require symfony/filesystem

Penemu

Komponen Finder menyediakan kelas yang lancar untuk menemukan file dan direktori di jalur yang ditentukan. Ini menyediakan cara mudah untuk mengulang file di jalur. Komponen Finder dapat diinstal menggunakan perintah berikut.

composer require symfony/finder

Menghibur

Komponen konsol menyediakan berbagai opsi untuk membuat perintah dengan mudah, yang dapat dieksekusi di terminal. Symfony menggunakanCommand komponen secara ekstensif untuk menyediakan berbagai fungsi seperti membuat aplikasi baru, membuat bundel, dll. Bahkan build PHP di web server dapat dipanggil menggunakan perintah Symfony, php bin/console server:runseperti yang terlihat di bagian instalasi. ItuConsole komponen dapat diinstal menggunakan perintah berikut.

composer require symfony/console

Mari kita buat aplikasi sederhana dan buat perintah, HelloCommand menggunakan Console komponen dan menjalankannya.

Step 1 - Buat proyek menggunakan perintah berikut.

cd /path/to/project 
composer require symfony/console

Step 2 - Buat file main.php dan sertakan kode berikut.

<?php 
   require __DIR__ . '/vendor/autoload.php'; 
   use Symfony\Component\Console\Application; 
   
   $app = new Application(); 
   $app->run(); 
?>

Application kelas menyiapkan fungsionalitas yang diperlukan dari aplikasi konsol tanpa tulang.

Step 3 - Jalankan aplikasinya, php main.php, yang akan menghasilkan hasil sebagai berikut.

Console Tool  
Usage: 
   command [options] [arguments]  
Options: 
   -h, --help            Display this help message 
   -q, --quiet           Do not output any message 
   -V, --version         Display this application version 
         --ansi            Force ANSI output 
         --no-ansi         Disable ANSI output 
   -n, --no-interaction  Do not ask any interactive question 
   -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 
      2 for more verbose output and 3 for debug  
Available commands: 
   help  Displays help for a command 
   list  Lists commands

Step 4 - Buat kelas bernama HelloCommand memperluas Command kelas di main.php diri.

use Symfony\Component\Console\Command\Command; 
use Symfony\Component\Console\Input\InputInterface; 
use Symfony\Component\Console\Output\OutputInterface; 
use Symfony\Component\Console\Input\InputArgument;

class HelloCommand extends Command { 
}

Aplikasi menggunakan empat kelas berikut yang tersedia di Command komponen.

  • Command - Digunakan untuk membuat perintah baru

  • InputInterface - Digunakan untuk mengatur input pengguna

  • InputArgument - Digunakan untuk mendapatkan input pengguna

  • OutputInterface - Digunakan untuk mencetak keluaran ke konsol

step 5 - Buat fungsi configure() dan mengatur nama, deskripsi, dan teks bantuan.

protected function configure() { 
   $this 
      ->setName('app:hello') 
      ->setDescription('Sample command, hello') 
      ->setHelp('This command is a sample command') 
}

step 6 - Buat argumen masukan, user untuk perintah dan ditetapkan sebagai wajib.

protected function configure() { 
   $this 
      ->setName('app:hello') 
      ->setDescription('Sample command, hello') 
      ->setHelp('This command is a sample command') 
      ->addArgument('name', InputArgument::REQUIRED, 'name of the user'); 
}

step 7 - Buat fungsi execute() dengan dua argumen InputArgument dan OutputArgument.

protected function execute(InputInterface $input, OutputInterface $output) { 
}

step 8 - Gunakan InputArgument untuk mendapatkan detail pengguna yang dimasukkan oleh pengguna dan mencetaknya ke konsol menggunakan OutputArgument.

protected function execute(InputInterface $input, OutputInterface $output) { 
   $name = $input->getArgument('name'); 
   $output->writeln('Hello, ' . $name); 
}

step 9 - Daftarkan HelloCommand ke dalam aplikasi menggunakan add metode dari Application kelas.

$app->add(new HelloCommand());

Aplikasi lengkapnya adalah sebagai berikut.

<?php 
   require __DIR__ . '/vendor/autoload.php'; 
   use Symfony\Component\Console\Application; 
   use Symfony\Component\Console\Command\Command; 
   use Symfony\Component\Console\Input\InputInterface; 
   use Symfony\Component\Console\Output\OutputInterface; 
   use Symfony\Component\Console\Input\InputArgument;  
   
   class HelloCommand extends Command { 
      protected function configure() { 
         $this 
            ->setName('app:hello') 
            ->setDescription('Sample command, hello') 
            ->setHelp('This command is a sample command') 
            ->addArgument('name', InputArgument::REQUIRED, 'name of the user'); 
      }  
      protected function execute(InputInterface $input, OutputInterface $output) { 
         $name = $input->getArgument('name'); 
         $output->writeln('Hello, ' . $name);
      }  
      $app = new Application(); 
      $app->add(new HelloCommand()); 
      $app->run(); 
   }         
?>

Step 10 - Sekarang jalankan aplikasinya menggunakan perintah berikut dan hasilnya adalah Hello Jon seperti yang diharapkan.

php main.php app:hello Jon

Symfony hadir dengan biner pra-bangun yang disebut console di direktori bin aplikasi web Symfony apa pun, yang dapat digunakan untuk menjalankan perintah dalam aplikasi.

Proses

Komponen proses menyediakan opsi untuk menjalankan perintah sistem apa pun dalam sub-proses, dengan cara yang aman dan efisien. Komponen proses dapat diinstal menggunakan perintah berikut.

composer require symfony/process

ClassLoader

Komponen ClassLoader menyediakan implementasi untuk keduanya PSR-0 dan PSR-4standar loader kelas. Ini dapat digunakan untuk memuat kelas secara otomatis. Ini akan disusutkan dalam waktu dekat. Pemuat kelas berbasis komposer lebih disukai daripada komponen ini. Komponen ClassLoader dapat diinstal menggunakan perintah berikut.

composer require symfony/class-loader

PropertyAccess

Komponen PropertyAccess menyediakan berbagai opsi untuk membaca dan menulis objek dan detail array menggunakan notasi string. Misalnya, arrayProduct dengan kunci price dapat diakses secara dinamis menggunakan [price] tali.

$product = array( 
   'name' => 'Cake' 
   'price' => 10 
);  
var priceObj = $propertyAccesserObj->getValue($product, '[price]');

Komponen PropertyAccess dapat diinstal menggunakan perintah berikut.

composer require symfony/property-access

PropertyInfo

Komponen PropertyInfo mirip dengan komponen PropertyAccess, namun hanya bekerja dengan objek PHP dan menyediakan lebih banyak fungsionalitas.

class Product { 
   private $name = 'Cake'; 
   private $price = 10;  
   
   public function getName() { 
      return $this->name; 
   }  
   public function getPrice() { 
      return $this->price; 
   } 
}  
$class = Product::class; 
$properties = $propertyInfoObj->getProperties($class);  
/* 
   Example Result 
   -------------- 
   array(2) { 
      [0] => string(4) "name" 
      [1] => string(5) "price" 
   } 
*/

Komponen PropertyInfo dapat diinstal menggunakan perintah berikut.

composer require symfony/property-info

EventDispatcher

Komponen EventDispatcher menyediakan pemrograman berbasis acara di PHP. Ini memungkinkan objek untuk berkomunikasi satu sama lain dengan mengirimkan peristiwa dan mendengarkannya. Kita akan belajar cara membuat acara dan mendengarkannya di bab Acara dan Pemroses Acara.

Komponen EventDispatcher dapat diinstal menggunakan perintah berikut.

composer require symfony/event-dispatcher

DependencyInjection

Komponen DependencyInjection menyediakan mekanisme yang mudah dan efisien untuk membuat objek dengan ketergantungannya. Saat sebuah proyek berkembang, ia menampilkan banyak kelas dengan ketergantungan yang mendalam, yang perlu ditangani dengan benar. Jika tidak, proyek gagal. DependencyInjection menyediakan container sederhana dan kuat untuk menangani dependensi. Kita akan belajar tentang container dan konsep injeksi ketergantungan di bab Service Container.

Komponen DependencyInjection dapat diinstal menggunakan perintah berikut.

composer require symfony/dependency-injection

Serializer

Komponen Serializer menyediakan opsi untuk mengubah objek PHP menjadi format tertentu seperti XML, JSON, Binary, dll., Dan kemudian memungkinkannya untuk mengubahnya kembali menjadi objek asli tanpa kehilangan data.

Komponen serializer dapat diinstal menggunakan perintah berikut.

composer require symfony/serializer

Config

Komponen Config menyediakan opsi untuk memuat, mengurai, membaca, dan memvalidasi konfigurasi tipe XML, YAML, PHP dan ini. Ini menyediakan berbagai opsi untuk memuat detail konfigurasi dari database juga. Ini adalah salah satu komponen penting yang berguna dalam mengkonfigurasi aplikasi web secara jelas dan ringkas. Komponen Config dapat diinstal menggunakan perintah berikut.

composer require symfony/config

ExpressionLanguage

Komponen ExpessionLanguage menyediakan mesin ekspresi yang lengkap. Ekspresi adalah satu baris yang dimaksudkan untuk mengembalikan nilai. Mesin ekspresi memungkinkan untuk dengan mudah mengkompilasi, mengurai, dan mendapatkan nilai dari ekspresi. Ini memungkinkan satu atau lebih ekspresi untuk digunakan dalam lingkungan konfigurasi (file) oleh programmer non-PHP, misalnya administrator sistem. Komponen ExpressionLanguage dapat diinstal menggunakan perintah berikut.

composer require symfony/expression-language

OptionsResolver

Komponen OptionsResolver menyediakan cara untuk memvalidasi sistem opsi yang digunakan di sistem kami. Misalnya, setting database ditempatkan dalam array, dboption dengan host, username, password, dll, sebagai key. Anda perlu memvalidasi entri sebelum menggunakannya untuk menyambungkan ke database. OptionsResolver menyederhanakan tugas ini dengan menyediakan kelas sederhana OptionsResolver dan metode resolver, yang menyelesaikan pengaturan database dan jika ada masalah validasi, itu akan melaporkannya.

$options = array( 
   'host'     => '<db_host>', 
   'username' => '<db_user>', 
   'password' => '<db_password>', 
);  
$resolver = new OptionsResolver(); 
$resolver->setDefaults(array( 
   'host'     => '<default_db_host>', 
   'username' => '<default_db_user>', 
   'password' => '<default_db_password>', 
)); 
$resolved_options = $resolver->resolve($options);

Komponen OptionsResolver dapat diinstal menggunakan perintah berikut.

composer require symfony/options-resolver

Dotenv

Komponen Dotenv menyediakan berbagai opsi untuk mengurai file .env dan variabel yang ditentukan di dalamnya agar dapat diakses melalui getenv(), $_ENV, atau $_SERVER. Komponen Dotenv dapat diinstal menggunakan perintah berikut.

composer require symfony/dotenv

Cache

Komponen cache menyediakan ekstensi PSR-6penerapan. Ini dapat digunakan untuk menambahkan fungsionalitas cache ke aplikasi web kita. Sejak itu mengikutiPSR-6, mudah untuk memulai dan dapat dengan mudah digunakan sebagai pengganti komponen cache berbasis PSR-6 lainnya. Komponen cache dapat diinstal menggunakan perintah berikut.

composer require symfony/cache

Intl

Komponen Intl adalah pustaka pengganti untuk ekstensi C Intl. Komponen Intl dapat diinstal menggunakan perintah berikut.

composer require symfony/intl

Terjemahan

Komponen terjemahan menyediakan berbagai opsi untuk menginternasionalkan aplikasi kita. Biasanya, detail terjemahan dari berbagai bahasa akan disimpan dalam satu file, satu file per bahasa, dan akan dimuat secara dinamis selama runtime aplikasi. Ada berbagai format untuk menulis file terjemahan. Komponen terjemahan menyediakan berbagai opsi untuk memuat semua jenis format, seperti file PHP biasa, CSV, ini, Json, Yaml, file Sumber Daya ICU, dll. Komponen terjemahan dapat diinstal menggunakan perintah berikut.

composer require symfony/translation

Alur Kerja

Komponen alur kerja menyediakan alat canggih untuk memproses mesin keadaan hingga. Dengan menyediakan fungsionalitas ini dengan cara yang sederhana dan berorientasi objek, komponen Workflow memungkinkan pemrograman tingkat lanjut dalam PHP dengan relatif mudah. Kita akan mempelajarinya secara rinci di bab Konsep Lanjutan.

Komponen alur kerja dapat diinstal menggunakan perintah berikut.

composer require symfony/workflow

Yaml

Komponen Yaml menyediakan opsi yang mengurai format file YAML dan mengubahnya menjadi array PHP. Itu juga dapat menulis file YAML dari array php biasa. Komponen Yaml bisa diinstal menggunakan perintah berikut.

composer require symfony/yaml

Ldap

Komponen Ldap menyediakan kelas PHP untuk terhubung ke LDAP atau server direktori Aktif dan mengotentikasi pengguna terhadapnya. Ini memberikan opsi untuk menyambung ke pengontrol domain Windows. Komponen Ldap dapat diinstal menggunakan perintah berikut.

composer require symfony/ldap

Debug

Komponen debug menyediakan berbagai opsi untuk mengaktifkan debugging di lingkungan PHP. Biasanya, men-debug kode PHP itu sulit, tetapi komponen debug menyediakan kelas-kelas sederhana untuk memudahkan proses debugging dan membuatnya bersih dan terstruktur. Komponen debug dapat diinstal menggunakan perintah berikut.

composer require symfony/debug

Stopwatch

Komponen Stopwatch menyediakan kelas Stopwatch untuk membuat profil kode PHP kita. Penggunaan sederhana adalah sebagai berikut.

use Symfony\Component\Stopwatch\Stopwatch; 
$stopwatch = new Stopwatch(); 
$stopwatch->start('somename');  

// our code to profile 
$profiled_data = $stopwatch->stop('somename');  
echo $profiled_data->getPeriods()

Komponen Stopwatch dapat diinstal menggunakan perintah berikut.

composer require symfony/stopwatch

VarDumper

Komponen VarDumper memberikan lebih baik dump()fungsi. Cukup sertakan komponen VarDumper dan gunakan fungsi dump untuk mendapatkan fungsionalitas yang ditingkatkan. Komponen VarDumper dapat diinstal menggunakan perintah berikut.

composer require symfony/var-dumper

BrowserKit

Komponen BrowserKit menyediakan antarmuka klien browser abstrak. Ini dapat digunakan untuk menguji aplikasi web secara terprogram. Misalnya, dapat meminta formulir, memasukkan data sampel dan mengirimkannya untuk menemukan masalah apa pun dalam formulir secara terprogram. Komponen BrowserKit dapat diinstal menggunakan perintah berikut.

composer require symfony/browser-kit

PHPUnit Bridge

Komponen PHPUnit Bridge menyediakan banyak pilihan untuk meningkatkan lingkungan pengujian PHPUnit. Komponen PHPUnit Bridge dapat diinstal menggunakan perintah berikut.

composer require symfony/phpunit-bridge

Aset

Komponen aset menyediakan penanganan aset umum dalam aplikasi web. Ini menghasilkan URL untuk aset seperti CSS, HTML, JavaScript dan juga melakukan pemeliharaan versi. Kami akan memeriksa komponen aset secara detail di bab View Engine. Komponen aset dapat diinstal menggunakan perintah berikut.

composer require symfony/asset

CssSelector

Komponen CssSelector menyediakan opsi untuk mengubah Pemilih berbasis CSS menjadi ekspresi XPath. Pengembang web mengetahui ekspresi Pemilih berbasis CSS lebih dari ekspresi XPath, tetapi ekspresi yang paling efisien untuk menemukan elemen dalam dokumen HTML dan XML adalahXPath Expression.

CssSelector memungkinkan pengembang untuk menulis ekspresi di CSS Selectors , namun, komponen mengubahnya menjadi ekspresi XPath sebelum menjalankannya. Dengan demikian, pengembang memiliki keuntungan dari kesederhanaan Pemilih CSS dan efisiensi ekspresi XPath.

Komponen CssSelector dapat diinstal menggunakan perintah berikut.

composer require symfony/css-selector

DomCrawler

Komponen DomCrawler menyediakan berbagai pilihan untuk menemukan elemen dalam dokumen HTML dan XML dengan menggunakan konsep DOM. Ini juga menyediakan opsi untuk menggunakan ekspresi XPath untuk menemukan elemen. Komponen DomCrawler dapat digunakan bersama dengan komponen CssSelector untuk menggunakan pemilih CSS, bukan ekspresi XPath. Komponen DomCrawler dapat diinstal menggunakan perintah berikut.

composer require symfony/dom-crawler

Bentuk

Komponen formulir memungkinkan pembuatan formulir dengan mudah dalam aplikasi web. Kita akan mempelajari pemrograman formulir secara rinci di bab Formulir. Komponen formulir dapat diinstal menggunakan perintah berikut.

composer require symfony/form

HttpFoundation

Komponen HttpFoundation menyediakan lapisan berorientasi objek ke spesifikasi HTTP. Secara default, PHP menyediakan permintaan HTTP dan detail respons sebagai objek berbasis larik seperti$_GET, $_POST, $_FILES, $_SESSION, dll. Fungsionalitas berbasis HTTP seperti mengatur cookie dapat dilakukan dengan menggunakan fungsi lama yang sederhana setCookie(). HttpFoundation menyediakan semua fungsionalitas yang berhubungan dengan HTTP dalam sekumpulan kecil kelas seperti Request, Response, RedirectResponse, dll., Kita akan belajar tentang kelas-kelas ini di bab-bab selanjutnya.

Komponen HttpFoundation dapat diinstal menggunakan perintah berikut.

composer require symfony/http-foundation

HttpKernel

Komponen HttpKernel adalah komponen inti dalam pengaturan web Symfony. Ini menyediakan semua fungsi yang diperlukan untuk aplikasi web - dari menerima fileRequest keberatan untuk mengirim kembali Responseobyek. Arsitektur lengkap aplikasi web Symfony disediakan oleh HttpKernel seperti yang dibahas dalam arsitektur kerangka web Symfony.

Komponen HttpKernel dapat diinstal menggunakan perintah berikut.

composer require symfony/http-kernel

Rute

Komponen perutean memetakan permintaan HTTP ke kumpulan variabel konfigurasi yang telah ditentukan sebelumnya. Perutean memutuskan bagian mana dari aplikasi kita yang harus menangani permintaan. Kita akan mempelajari lebih lanjut tentang perutean di bab Perutean.

Komponen perutean dapat diinstal menggunakan perintah berikut.

composer require symfony/filesystem

Templating

Komponen template menyediakan infrastruktur yang diperlukan untuk membangun sistem template yang efisien. Symfony menggunakan komponen Templating untuk implementasi mesin View-nya. Kita akan mempelajari lebih lanjut tentang komponen Templating di bab mesin View.

Komponen templating dapat diinstal menggunakan perintah berikut.

composer require symfony/templating

Validator

Komponen validator menyediakan implementasi JSR-303 Bean Validation Specification. Ini dapat digunakan untuk memvalidasi formulir di lingkungan web. Kita akan mempelajari lebih lanjut tentang Validator di bab Validasi.

Komponen validator dapat diinstal menggunakan perintah berikut.

composer require symfony/validator

Keamanan

Komponen keamanan menyediakan sistem keamanan lengkap untuk aplikasi web kita, baik itu otentikasi dasar HTTP, otentikasi intisari HTTP, otentikasi berbasis formulir interaktif, login sertifikasi X.509, dll. Ia juga menyediakan mekanisme otorisasi berdasarkan peran pengguna melalui sistem ACL yang dibangun . Kami akan mempelajari lebih detail di bab Konsep Lanjutan.

Komponen keamanan dapat diinstal menggunakan perintah berikut.

composer require symfony/security