Kā sākt lietot composer.phar
Līdz nesenam laikam PHP bibliotēku instalēšanai nebija vienotas pieejas. Risinājumi atšķīrās atkarībā no izmantotā ietvara. Tas mainījās līdz ar Composer atkarību pārvaldnieka parādīšanos, kas tagad ir kļuvis par standarta rīku lietotņu atkarību pievienošanai vai pat ietvaru komponentu pārvaldībai. Composer ir viegli lietojams rīks gan bezmaksas, gan iekšējo pakotņu instalēšanai un projektu izveidei.
Piezīme! Šis bloga raksts galvenokārt ir domāts iesācējiem PHP izstrādātājiem, kuri jau ir izmēģinājuši kādu no populārajiem ietvariem, piemēram, Laravel vai Symfony, un vēlas eksperimentēt ar kaut ko no nulles.

Īsumā, Composer ir pakotņu pārvaldnieks, taču tas spēj daudz vairāk. Composer jau ir uzinstalēts visos mūsu Zone platformas serveros, un to var izmantot savā virtuālajā serverī bez papildu darbībām. Composer atrisina vairākas problēmas, kas citādi radītu lieku darbu izstrādātājiem. Divas svarīgākās no tām ir šādas:
1. Atkarību un bibliotēku pārvaldība
Ja vēlaties izmantot trešās puses bibliotēku, to var pievienot ar vienu komandu Composer. Attiecīgajai bibliotēkai jau jābūt iekļautai Composer repozitorijā. Repozitorijs var būt gan publisks, gan iekšējs, izmantošanai privātam kodam.
Bibliotēku instalēšana ar Composer ir vienkārša, jo to var izdarīt ar vienu komandu. Instalācijas laikā Composer pārbauda jūsu bibliotēku savietojamību. Tas ir īpaši noderīgi situācijās, kad vienas bibliotēkas versijas savietojamība atšķiras no citas, un abas ir atkarīgas no trešās pakotnes. Composer atradīs jaunāko iespējamo savietojamo versiju. Ja tas nav iespējams, Composer jūs par to informēs.
2. Klases automātiska ielāde
Vēstures zinātāji atcerēsies laikus pirms klases automātiskās ielādes standartu ieviešanas. Toreiz katrai lietotnei bija savs kods, kas meklēja failus ar klasēm, kas vēl nebija ielādētas PHP kodā. Dažos gadījumos visas iespējamās klases tika ielādētas izpildes sākumā, apvienojot visus failus ar “require_once” komandu.
Par laimi, laika gaitā tika izveidots PSR-0 standarts un pēc tam modernākais PSR-4, kas nosaka, kā klases nosaukumam jāatbilst failu koku hierarhijai. Mūsdienās par to vairs nav jāuztraucas, jo Composer palīdz iestatīt automātisko ielādi visām klasēm, un PHP kodētājs var koncentrēties uz savu darbu.
Vienkāršs Composer lietošanas piemērs
Neatkarīgi no tā, cik vienkārša ir jūsu lietotne vai skripts, ir vienmēr viegli sākt ar Composer iestatīšanu, ja plānojat izmantot ārējās bibliotēkas.
Lai parādītu Composer minimālās iespējas un to, cik ļoti tas atvieglo darbu, izveidosim CLI (terminālī izpildāmu) lietotni, kas ar HTTP palīdzību pārbaudīs kādu URL un tā HTTP kodu. Lai gan to var izdarīt ar Curl, šajā piemērā izmantosim atsevišķu pakotni Guzzle.
Vispirms izveidosim mapi ar nosaukumu pinger un ieiesim tajā:
mkdir pinger
cd pinger
Savu PHP kodu rakstīsim failā pinger.php. Pieņemsim, ka visas pašu rakstītās klases atrodas src mapē un ir veidotas atbilstoši PSR-4 standartam.
Sāksim projektu, izpildot šādu komandu:
composer init
Pēc tam jums tiks uzdoti vairāki jautājumi. Lielākā daļa no tiem nav obligāti, taču ir vērts aizpildīt svarīgākos.
- Pakotnes nosaukums ir brīvi izvēlēts lietotnes nosaukums, izmantojot pakotnes-izveidotājs/pakotnes-nosaukums formātu.
- Apraksts ir īss lietotnes vai bibliotēkas apraksts.
- Autors norāda autoru. Tas ir noderīgi, ja plānojat padarīt savu programmatūru publiski pieejamu.
- Minimālā stabilitāte nosaka minimālās stabilitātes prasību bibliotēkām, kas pievienotas ar Composer. Veidojot lietotni, bieži svarīgi ir līdzsvarot stabilitāti un jaunāko versiju izmantošanu. To var iestatīt ar vērtībām dev vai stable, kas ir pašsaprotamas.
- Pakotnes tips apraksta, kāda veida programmatūru veidosiet. Piemēram, “package” ir piemērots bibliotēkai, ko izmantos citā lietotnē, bet “project” – patstāvīgai lietotnei, kurai pievieno bibliotēkas.
- Licence jānorāda, ja kods būs publiski pieejams. Citādi tas nav būtiski.
Pēc tam jums jautās, vai vēlaties uzreiz instalēt kādas atkarības. Šo soli izlaidīsim, vienkārši nospiežot Enter.
Parādoties uzvednei Pievienot PSR-4 autoload mapping?, izveidosim PSR-4 automātiskās ielādes iestatījumus, kas atvasināti no pirmā jautājuma. Tas nozīmē, ka mūsu pakotnes nosaukuma PascalCase versija sadalīs vendor un pakotnes nosaukumus starp nosaukumtelpām. Šajā piemērā konfigurēsim MyPackage.
Pēc tam tikai jāapstiprina izveidotais composer.json, nospiežot Enter.
Composer pēc noklusējuma izveidoja šādus failus un mapes:
- src mape ar kodu, kas atrodas lietotnes nosaukumtelpā,
- vendors mape atkarību, t.i., ar Composer instalējamo bibliotēku, uzstādīšanai. Šajā mapē ir arī autoload.php fails, kas jāiekļauj PHP skriptā.
- composer.json fails ar Composer iestatījumiem šim projektam.
Tagad, kad composer.json ir izveidots, jāizvieto tā autoloaders, kas rūpēsies par lietotnes un pievienoto bibliotēku klašu automātisko ielādi. Lai to izdarītu, izveidosim PHP failu pinger.php lietotnei, ko izmantosim CLI.
<?php
use Composer\Autoload\ClassLoader;
// ielādējam composer
require_once __DIR__ . '/vendor/autoload.php';
Code language: HTML, XML (xml)
Tagad instalēsim Guzzle 7 HTTP klienta lietotni. Lai to izdarītu, izpildām šādu komandu:
composer require guzzlehttp/guzzle:^7.0Code language: JavaScript (javascript)
Mūsu saknes mapē tika izveidots fails composer.lock. Šajā failā tiek saglabātas precīzas pašlaik uzstādīto atkarību versijas. Izpildot composer install komandu nākamreiz, bibliotēkas tiks instalētas tieši ar tām pašām versijām, nodrošinot, ka tiks izmantotas tās pašas minor un patch versijas, kas bija izveides vai atjaunināšanas brīdī.
Mainīsim pinger.php failu, lai izmantotu Guzzle bibliotēku un parādītu HTTP atbildes kodu dažiem URL.
<?php
use GuzzleHttp\Client;
require_once __DIR__ . '/vendor/autoload.php';
$siteUrl = 'https://www.google.com';
$client = new GuzzleHttp\Client(['base_uri' => $siteUrl]);
$response = $client->request('GET', '');
echo $response->getStatusCode();
Code language: HTML, XML (xml)
Šis skripts izvadīs attiecīgā URL HTTP kodu, t.i., veiksmīgam pieprasījumam tas būs 2XX.
Veidojot tīmekļa lietotni, docroot, uz kuru norāda Apache HTTP pieprasījumus, jāatrodas atsevišķā mapē, piemēram, public. Šajā mapē jābūt tā sauktajam front controller index.php, kas saņems visus pieprasījumus un izpildīs kodu, izmantojot src mapē esošās klases.
Izveidosim failu public/index.php.
<?php
use MyPackage\Controller;
require_once __DIR__ . '/../vendor/autoload.php';
(new Controller())->showPage();Code language: HTML, XML (xml)
Izveidosim klases failu src/Controller.php kontrollerim. Tā kā iepriekš esam iestatījuši PSR-4 automātisko ielādi attiecīgajai nosaukumtelpai, attiecīgā klase tiek ielādēta index.php bez nepieciešamības norādīt atsevišķu failu.
<?php
namespace MyPackage;
use GuzzleHttp\Client;
class Controller
{
public function showPage()
{
$siteUrl = 'https://www.google.com';
$client = new Client(['base_uri' => $siteUrl]);
$response = $client->request('GET', '');
echo $response->getStatusCode();
}
}Code language: HTML, XML (xml)
Tagad, norādot docroot uz public mapi, pārlūkā tiks parādīts HTTP kods, līdzīgi kā komandrindas lietotnē.
Piezīme! Parasti nedrīkst norādīt mapi, kurā atrodas Composer pievienotie faili vai lietotnes klases faili, kā docroot. Tāpēc šeit izveidojām atsevišķu public mapi, un viss kods atrodas virs tās direktoriju kokā, lai tam nevarētu piekļūt caur HTTP.
Kopsavilkums
Izveidotais risinājums sniedz vienkāršu veidu, kā sākt veidot PHP lietotni no nulles, izmantojot Composer. Lai gan ne vienmēr ir vērts izgudrot riteni no jauna, dažkārt ir lietderīgi rakstīt lietotni bez ietvara, lai apgūtu valodu vai izveidotu ļoti vienkāršas lietotnes. Šis ieraksts ir tikai ceļvedis, un šeit aprakstītais piemēra kods neveic nekādas sarežģītas darbības 🙂