Nette Documentation Preview

syntax
Composer Kullanım İpuçları
**************************

<div class=perex>

Composer, PHP'de bağımlılık yönetimi için bir araçtır. Projenizin bağımlı olduğu kütüphaneleri bildirmenizi sağlar, onları sizin için kurar ve günceller. Şunları öğreneceğiz:

- Composer nasıl kurulur
- yeni ya da var olan bir projede nasıl kullanılır

</div>


Kurulum
=======

Composer, indirip aşağıdaki gibi kuracağınız çalıştırılabilir bir `.phar` dosyasıdır.


Windows
-------

Resmi kurulum programını kullanın: [Composer-Setup.exe|https://getcomposer.org/Composer-Setup.exe].


Linux, macOS
------------

Tek gereken, [bu sayfadan |https://getcomposer.org/download/] kopyalayabileceğiniz 4 komut.

Ayrıca, sistemin `PATH` değişkeninde bulunan bir klasöre kopyalayarak Composer'ı her yerden erişilebilir kılabilirsiniz:

```shell
$ mv ./composer.phar ~/bin/composer # ya da /usr/local/bin/composer
```


Projede Kullanım
================

Projenizde Composer kullanmaya başlamak için tek gereken bir `composer.json` dosyasıdır. Bu dosya projenizin bağımlılıklarını anlatır ve başka meta veriler de içerebilir. En basit `composer.json` şöyle görünebilir:

```js
{
	"require": {
		"nette/database": "^3.0"
	}
}
```

Burada, uygulamamızın (ya da kütüphanemizin) `nette/database` paketini gerektirdiğini (paket adı bir üretici adı ile projenin adından oluşur) ve `^3.0` sürüm kısıtına uyan bir sürüm istediğini (yani en son 3 sürümünü) söylüyoruz.

`composer.json` dosyası proje kökündeyken şunu çalıştırın:

```shell
composer update
```

Composer, Nette Database paketini `vendor/` dizinine indirir. Ayrıca, tam olarak hangi kütüphane sürümlerini kurduğuna dair bilgi içeren bir `composer.lock` dosyası oluşturur.

Composer bir `vendor/autoload.php` dosyası üretir. Bu dosyayı basitçe dahil edip kütüphanelerin sınıflarını fazladan hiçbir iş yapmadan kullanmaya başlayabilirsiniz:

```php
require __DIR__ . '/vendor/autoload.php';

$db = new Nette\Database\Connection('sqlite::memory:');
```


Paketleri En Son Sürümlere Güncelleme
=====================================

Kullanılan kütüphaneleri, `composer.json` içinde tanımlı kısıtlara göre en son sürümlere güncellemek için `composer update` komutunu kullanın. Örneğin `"nette/database": "^3.0"` bağımlılığıyla en son 3.x.x sürümünü kurar, ama 4 sürümünü kurmaz.

`composer.json` dosyasındaki kısıtları, en son sürümün kurulmasına izin verecek şekilde örneğin `"nette/database": "^4.1"` olarak güncellemek için `composer require nette/database` komutunu kullanın.

Kullanılan tüm Nette paketlerini güncellemek için hepsini komut satırında saymanız gerekirdi, örneğin:

```shell
composer require nette/application nette/forms latte/latte tracy/tracy ...
```

Bu pratik değil. Bu yüzden bunu sizin için yapan basit "Composer Frontline":https://gist.github.com/dg/734bebf55cf28ad6a5de1156d3099bff betiğini kullanın:

```shell
php composer-frontline.php
```


Yeni Proje Oluşturma
====================

Tek bir komutla yeni bir Nette projesi oluşturabilirsiniz:

```shell
composer create-project nette/web-project projenin-adi
```

`projenin-adi` yerine projeniz için kullanacağınız dizin adını yazın ve komutu çalıştırın. Composer, GitHub'dan `nette/web-project` deposunu indirir; bu depo zaten bir `composer.json` dosyası içerir. Ardından Nette Framework'ün kendisini kurar. Geriye yalnızca `temp/` ve `log/` dizinleri için [dizin izinlerini ayarlamak |nette:troubleshooting#Dizin İzinlerini Ayarlama] kalır ve proje çalışır durumda olur.

Projenizin hangi PHP sürümünde barındırılacağını biliyorsanız, bunu mutlaka [ayarlayın |#PHP Sürümü].


PHP Sürümü
==========

Composer her zaman, o an kullandığınız PHP sürümüyle (daha kesin olarak, Composer çalıştırılırken komut satırında kullanılan PHP sürümüyle) uyumlu paket sürümlerini kurar. Bu, web barındırıcınızın kullandığı sürümle aynı olmayabilir. Bu yüzden barındırmanızdaki PHP sürümü bilgisini `composer.json` dosyasına eklemek çok önemlidir. Böylece yalnızca barındırmayla uyumlu paket sürümleri kurulur.

Örneğin projenin PHP 8.2.3 üzerinde çalışacağını belirtmek için şu komutu kullanın:

```shell
composer config platform.php 8.2.3
```

Sürüm `composer.json` dosyasına şöyle yazılır:

```js
{
	"config": {
		"platform": {
			"php": "8.2.3"
		}
	}
}
```

Ancak PHP sürüm numarası dosyanın başka bir yerinde, `require` bölümünde de belirtilir. İlk numara paketlerin hangi sürüme göre kurulacağını belirlerken, ikinci numara uygulamanın kendisinin hangi sürüm için yazıldığını gösterir. Örneğin PhpStorm bunu *PHP language level* ayarını belirlemek için kullanır. (Elbette bu sürümlerin farklı olması anlamlı değildir, dolayısıyla çift kayıt bir gözden kaçmadır.) Bu sürümü şu komutla ayarlayın:

```shell
composer require php 8.2.3 --no-update
```

Ya da doğrudan `composer.json` dosyasında:

```js
{
	"require": {
		"php": "8.2.3"
	}
}
```


PHP Sürümünü Yok Sayma
======================

Paketler genellikle hem uyumlu oldukları en düşük PHP sürümünü hem de karşı test edildikleri en yüksek sürümü belirtir. Belki test amacıyla daha da yeni bir PHP sürümü kullanmak isterseniz, Composer böyle bir paketi kurmayı reddeder. Çözüm, Composer'ın gereken PHP sürümünün üst sınırlarını yok saymasını sağlayan `--ignore-platform-req=php+` seçeneğidir.


Yanlış Bildirimler
==================

Paketleri yükseltirken ya da sürüm numaralarını değiştirirken bazen çakışmalar olur. Bir paketin gereksinimleri bir başkasıyla çakışır vb. Ancak Composer bazen yanlış bildirimler verir. Aslında var olmayan bir çakışmayı bildirir. Böyle durumlarda `composer.lock` dosyasını silip yeniden denemek işe yarayabilir.

Hata mesajı yine de sürerse, gerçektir; ne değiştirmeniz gerektiğini ve nasıl yapacağınızı anlamak için okumalısınız.


Packagist.org - Genel Depo
==========================

[Packagist |https://packagist.org], Composer'ın paketleri varsayılan olarak aradığı ana depodur. Kendi paketlerinizi de burada yayımlayabilirsiniz.


Ya Merkezi Depoyu İstemiyorsak
------------------------------

Şirketimiz içinde herkese açık barındırılamayacak iç uygulamalarımız ya da kütüphanelerimiz varsa, onlar için kendi depolarımızı oluşturabiliriz.

Depolar hakkında daha fazlasını [resmi belgelerde |https://getcomposer.org/doc/05-repositories.md#repositories] okuyun.


Autoloading
===========

Composer'ın temel özelliklerinden biri, kurduğu tüm sınıflar için autoloading sağlamasıdır. Bunu `vendor/autoload.php` dosyasını dahil ederek etkinleştirirsiniz.

Ancak Composer'ı, `vendor/` dizininin dışındaki başka sınıfları yüklemek için de kullanabilirsiniz. İlk seçenek, Composer'ın tanımlanan dizinleri ve alt dizinlerini taramasını, tüm sınıfları bulup autoloader'a katmasını sağlamaktır. Bunun için `composer.json` içinde `autoload > classmap` ayarını yapın:

```js
{
	"autoload": {
		"classmap": [
			"src/",      # src/ dizinini ve alt dizinlerini kapsar
		]
	}
}
```

Sonrasında, autoloading tablolarını yeniden üretmek için her değişiklikten sonra `composer dumpautoload` komutunu çalıştırmanız gerekir. Bu son derece elverişsizdir. Bu işi, aynı işi arka planda otomatik olarak ve çok daha hızlı yapan [RobotLoader|robot-loader:] aracına bırakmak çok daha iyidir.

İkinci seçenek, [PSR-4 |https://www.php-fig.org/psr/psr-4/] standardına uymaktır. Basitçe söylemek gerekirse, isim alanlarının ve sınıf adlarının dizin yapısına ve dosya adlarına karşılık geldiği bir sistemdir; örneğin `App\Core\RouterFactory` sınıfı `/path/to/App/Core/RouterFactory.php` dosyasında bulunur. Yapılandırma örneği:

```js
{
	"autoload": {
		"psr-4": {
			"App\\": "app/"   # App\ isim alanı app/ dizinindedir
		}
	}
}
```

Bu davranışı nasıl yapılandıracağınızın ayrıntıları için [Composer belgelerine |https://getcomposer.org/doc/04-schema.md#psr-4] bakın.


Yeni Sürümleri Deneme
=====================

Bir paketin yeni geliştirme sürümünü denemek mi istiyorsunuz? İşte nasıl yapılacağı. Önce `composer.json` dosyanıza şu iki seçeneği ekleyin. Bu, geliştirme sürümlerinin kurulmasına izin verir; ancak Composer bunlara yalnızca kararlı sürümlerden hiçbir bileşim gereksinimleri karşılamıyorsa başvurur:

```js
{
	"minimum-stability": "dev",
	"prefer-stable": true,
}
```

Ayrıca `composer.lock` dosyasını silmenizi öneririz; çünkü Composer bazen anlaşılmaz biçimde kurulumu reddeder ve bu, sorunu çözebilir.

Diyelim ki paket `nette/utils` ve yeni sürüm 4.0. Şu komutla kurun:

```shell
composer require nette/utils:4.0.x-dev
```

Ya da belirli bir sürümü, örneğin 4.0.0-RC2 sürümünü kurabilirsiniz:

```shell
composer require nette/utils:4.0.0-RC2
```

Ancak başka bir paket bu kütüphaneye bağımlıysa ve daha eski bir sürüme kilitliyse (örneğin `^3.1`), ideal çözüm o bağımlı paketi yeni sürümle çalışacak şekilde güncellemektir. Yalnızca kısıtı aşmak ve Composer'ı, geliştirme sürümünü daha eski bir sürümmüş gibi (örneğin 3.1.6) göstererek kurmaya zorlamak istiyorsanız `as` anahtar sözcüğünü kullanabilirsiniz:

```shell
composer require nette/utils "4.0.x-dev as 3.1.6"
```


Komut Çağırma
=============

Kendi önceden tanımlanmış komutlarınızı ve betiklerinizi, Composer'ın yerleşik komutlarıymış gibi Composer üzerinden çağırabilirsiniz. `vendor/bin` dizinindeki betikler için bu yolu belirtmeniz gerekmez.

Örnek olarak, `composer.json` içinde testleri çalıştırmak üzere [Nette Tester |tester:] kullanan bir betik tanımlayalım:

```js
{
	"scripts": {
		"tester": "tester tests -s"
	}
}
```

Testleri sonra `composer tester` ile çalıştırırız. Komutu, projenin kök dizininde değil de alt dizinlerinden birindeyken bile çağırabilirsiniz.


Teşekkür Gönderin
=================

Açık kaynak yazarlarını sevindirecek bir numara gösterelim. Projenizin kullandığı kütüphanelere GitHub'da kolayca yıldız verebilirsiniz. Yalnızca `symfony/thanks` kütüphanesini kurun:

```shell
composer global require symfony/thanks
```

Ve sonra çalıştırın:

```shell
composer thanks
```

Deneyin!


Yapılandırma
============

Composer, sürüm denetimi aracı [Git |https://git-scm.com] ile sıkı sıkıya bütünleşiktir. Git kurulu değilse, Composer'a onu kullanmamasını söylemeniz gerekir:

```shell
composer -g config preferred-install dist
```

Composer Kullanım İpuçları

Composer, PHP'de bağımlılık yönetimi için bir araçtır. Projenizin bağımlı olduğu kütüphaneleri bildirmenizi sağlar, onları sizin için kurar ve günceller. Şunları öğreneceğiz:

  • Composer nasıl kurulur
  • yeni ya da var olan bir projede nasıl kullanılır

Kurulum

Composer, indirip aşağıdaki gibi kuracağınız çalıştırılabilir bir .phar dosyasıdır.

Windows

Resmi kurulum programını kullanın: Composer-Setup.exe.

Linux, macOS

Tek gereken, bu sayfadan kopyalayabileceğiniz 4 komut.

Ayrıca, sistemin PATH değişkeninde bulunan bir klasöre kopyalayarak Composer'ı her yerden erişilebilir kılabilirsiniz:

$ mv ./composer.phar ~/bin/composer # ya da /usr/local/bin/composer

Projede Kullanım

Projenizde Composer kullanmaya başlamak için tek gereken bir composer.json dosyasıdır. Bu dosya projenizin bağımlılıklarını anlatır ve başka meta veriler de içerebilir. En basit composer.json şöyle görünebilir:

{
	"require": {
		"nette/database": "^3.0"
	}
}

Burada, uygulamamızın (ya da kütüphanemizin) nette/database paketini gerektirdiğini (paket adı bir üretici adı ile projenin adından oluşur) ve ^3.0 sürüm kısıtına uyan bir sürüm istediğini (yani en son 3 sürümünü) söylüyoruz.

composer.json dosyası proje kökündeyken şunu çalıştırın:

composer update

Composer, Nette Database paketini vendor/ dizinine indirir. Ayrıca, tam olarak hangi kütüphane sürümlerini kurduğuna dair bilgi içeren bir composer.lock dosyası oluşturur.

Composer bir vendor/autoload.php dosyası üretir. Bu dosyayı basitçe dahil edip kütüphanelerin sınıflarını fazladan hiçbir iş yapmadan kullanmaya başlayabilirsiniz:

require __DIR__ . '/vendor/autoload.php';

$db = new Nette\Database\Connection('sqlite::memory:');

Paketleri En Son Sürümlere Güncelleme

Kullanılan kütüphaneleri, composer.json içinde tanımlı kısıtlara göre en son sürümlere güncellemek için composer update komutunu kullanın. Örneğin "nette/database": "^3.0" bağımlılığıyla en son 3.x.x sürümünü kurar, ama 4 sürümünü kurmaz.

composer.json dosyasındaki kısıtları, en son sürümün kurulmasına izin verecek şekilde örneğin "nette/database": "^4.1" olarak güncellemek için composer require nette/database komutunu kullanın.

Kullanılan tüm Nette paketlerini güncellemek için hepsini komut satırında saymanız gerekirdi, örneğin:

composer require nette/application nette/forms latte/latte tracy/tracy ...

Bu pratik değil. Bu yüzden bunu sizin için yapan basit Composer Frontline betiğini kullanın:

php composer-frontline.php

Yeni Proje Oluşturma

Tek bir komutla yeni bir Nette projesi oluşturabilirsiniz:

composer create-project nette/web-project projenin-adi

projenin-adi yerine projeniz için kullanacağınız dizin adını yazın ve komutu çalıştırın. Composer, GitHub'dan nette/web-project deposunu indirir; bu depo zaten bir composer.json dosyası içerir. Ardından Nette Framework'ün kendisini kurar. Geriye yalnızca temp/ ve log/ dizinleri için dizin izinlerini ayarlamak kalır ve proje çalışır durumda olur.

Projenizin hangi PHP sürümünde barındırılacağını biliyorsanız, bunu mutlaka ayarlayın.

PHP Sürümü

Composer her zaman, o an kullandığınız PHP sürümüyle (daha kesin olarak, Composer çalıştırılırken komut satırında kullanılan PHP sürümüyle) uyumlu paket sürümlerini kurar. Bu, web barındırıcınızın kullandığı sürümle aynı olmayabilir. Bu yüzden barındırmanızdaki PHP sürümü bilgisini composer.json dosyasına eklemek çok önemlidir. Böylece yalnızca barındırmayla uyumlu paket sürümleri kurulur.

Örneğin projenin PHP 8.2.3 üzerinde çalışacağını belirtmek için şu komutu kullanın:

composer config platform.php 8.2.3

Sürüm composer.json dosyasına şöyle yazılır:

{
	"config": {
		"platform": {
			"php": "8.2.3"
		}
	}
}

Ancak PHP sürüm numarası dosyanın başka bir yerinde, require bölümünde de belirtilir. İlk numara paketlerin hangi sürüme göre kurulacağını belirlerken, ikinci numara uygulamanın kendisinin hangi sürüm için yazıldığını gösterir. Örneğin PhpStorm bunu PHP language level ayarını belirlemek için kullanır. (Elbette bu sürümlerin farklı olması anlamlı değildir, dolayısıyla çift kayıt bir gözden kaçmadır.) Bu sürümü şu komutla ayarlayın:

composer require php 8.2.3 --no-update

Ya da doğrudan composer.json dosyasında:

{
	"require": {
		"php": "8.2.3"
	}
}

PHP Sürümünü Yok Sayma

Paketler genellikle hem uyumlu oldukları en düşük PHP sürümünü hem de karşı test edildikleri en yüksek sürümü belirtir. Belki test amacıyla daha da yeni bir PHP sürümü kullanmak isterseniz, Composer böyle bir paketi kurmayı reddeder. Çözüm, Composer'ın gereken PHP sürümünün üst sınırlarını yok saymasını sağlayan --ignore-platform-req=php+ seçeneğidir.

Yanlış Bildirimler

Paketleri yükseltirken ya da sürüm numaralarını değiştirirken bazen çakışmalar olur. Bir paketin gereksinimleri bir başkasıyla çakışır vb. Ancak Composer bazen yanlış bildirimler verir. Aslında var olmayan bir çakışmayı bildirir. Böyle durumlarda composer.lock dosyasını silip yeniden denemek işe yarayabilir.

Hata mesajı yine de sürerse, gerçektir; ne değiştirmeniz gerektiğini ve nasıl yapacağınızı anlamak için okumalısınız.

Packagist.org – Genel Depo

Packagist, Composer'ın paketleri varsayılan olarak aradığı ana depodur. Kendi paketlerinizi de burada yayımlayabilirsiniz.

Ya Merkezi Depoyu İstemiyorsak

Şirketimiz içinde herkese açık barındırılamayacak iç uygulamalarımız ya da kütüphanelerimiz varsa, onlar için kendi depolarımızı oluşturabiliriz.

Depolar hakkında daha fazlasını resmi belgelerde okuyun.

Autoloading

Composer'ın temel özelliklerinden biri, kurduğu tüm sınıflar için autoloading sağlamasıdır. Bunu vendor/autoload.php dosyasını dahil ederek etkinleştirirsiniz.

Ancak Composer'ı, vendor/ dizininin dışındaki başka sınıfları yüklemek için de kullanabilirsiniz. İlk seçenek, Composer'ın tanımlanan dizinleri ve alt dizinlerini taramasını, tüm sınıfları bulup autoloader'a katmasını sağlamaktır. Bunun için composer.json içinde autoload > classmap ayarını yapın:

{
	"autoload": {
		"classmap": [
			"src/",      # src/ dizinini ve alt dizinlerini kapsar
		]
	}
}

Sonrasında, autoloading tablolarını yeniden üretmek için her değişiklikten sonra composer dumpautoload komutunu çalıştırmanız gerekir. Bu son derece elverişsizdir. Bu işi, aynı işi arka planda otomatik olarak ve çok daha hızlı yapan RobotLoader aracına bırakmak çok daha iyidir.

İkinci seçenek, PSR-4 standardına uymaktır. Basitçe söylemek gerekirse, isim alanlarının ve sınıf adlarının dizin yapısına ve dosya adlarına karşılık geldiği bir sistemdir; örneğin App\Core\RouterFactory sınıfı /path/to/App/Core/RouterFactory.php dosyasında bulunur. Yapılandırma örneği:

{
	"autoload": {
		"psr-4": {
			"App\\": "app/"   # App\ isim alanı app/ dizinindedir
		}
	}
}

Bu davranışı nasıl yapılandıracağınızın ayrıntıları için Composer belgelerine bakın.

Yeni Sürümleri Deneme

Bir paketin yeni geliştirme sürümünü denemek mi istiyorsunuz? İşte nasıl yapılacağı. Önce composer.json dosyanıza şu iki seçeneği ekleyin. Bu, geliştirme sürümlerinin kurulmasına izin verir; ancak Composer bunlara yalnızca kararlı sürümlerden hiçbir bileşim gereksinimleri karşılamıyorsa başvurur:

{
	"minimum-stability": "dev",
	"prefer-stable": true,
}

Ayrıca composer.lock dosyasını silmenizi öneririz; çünkü Composer bazen anlaşılmaz biçimde kurulumu reddeder ve bu, sorunu çözebilir.

Diyelim ki paket nette/utils ve yeni sürüm 4.0. Şu komutla kurun:

composer require nette/utils:4.0.x-dev

Ya da belirli bir sürümü, örneğin 4.0.0-RC2 sürümünü kurabilirsiniz:

composer require nette/utils:4.0.0-RC2

Ancak başka bir paket bu kütüphaneye bağımlıysa ve daha eski bir sürüme kilitliyse (örneğin ^3.1), ideal çözüm o bağımlı paketi yeni sürümle çalışacak şekilde güncellemektir. Yalnızca kısıtı aşmak ve Composer'ı, geliştirme sürümünü daha eski bir sürümmüş gibi (örneğin 3.1.6) göstererek kurmaya zorlamak istiyorsanız as anahtar sözcüğünü kullanabilirsiniz:

composer require nette/utils "4.0.x-dev as 3.1.6"

Komut Çağırma

Kendi önceden tanımlanmış komutlarınızı ve betiklerinizi, Composer'ın yerleşik komutlarıymış gibi Composer üzerinden çağırabilirsiniz. vendor/bin dizinindeki betikler için bu yolu belirtmeniz gerekmez.

Örnek olarak, composer.json içinde testleri çalıştırmak üzere Nette Tester kullanan bir betik tanımlayalım:

{
	"scripts": {
		"tester": "tester tests -s"
	}
}

Testleri sonra composer tester ile çalıştırırız. Komutu, projenin kök dizininde değil de alt dizinlerinden birindeyken bile çağırabilirsiniz.

Teşekkür Gönderin

Açık kaynak yazarlarını sevindirecek bir numara gösterelim. Projenizin kullandığı kütüphanelere GitHub'da kolayca yıldız verebilirsiniz. Yalnızca symfony/thanks kütüphanesini kurun:

composer global require symfony/thanks

Ve sonra çalıştırın:

composer thanks

Deneyin!

Yapılandırma

Composer, sürüm denetimi aracı Git ile sıkı sıkıya bütünleşiktir. Git kurulu değilse, Composer'a onu kullanmamasını söylemeniz gerekir:

composer -g config preferred-install dist