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ğlı olduğu kütüphaneleri bildirmenize olanak tanır ve bunları sizin için yükler ve günceller. Öğreneceğiz:

- Composer nasıl kurulur
- yeni veya mevcut projede kullanın

</div>


Kurulum .[#toc-installation]
============================

Composer, aşağıdaki şekilde indirip kurduğunuz çalıştırılabilir bir `.phar` dosyasıdır.


Pencereler .[#toc-windows]
--------------------------

[Composer-Setup.exe |https://getcomposer.org/Composer-Setup.exe] resmi yükleyicisini kullanın.


Linux, macOS .[#toc-linux-macos]
--------------------------------

İhtiyacınız olan tek şey [bu sayfadan |https://getcomposer.org/download/] kopyalayabileceğiniz 4 komuttur.

Dahası, sistemin `PATH` adresindeki klasöre kopyalandığında Composer global olarak erişilebilir hale gelir:

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


Projede Kullanım .[#toc-use-in-project]
=======================================

Projenizde Composer'ı kullanmaya başlamak için tek ihtiyacınız olan bir `composer.json` dosyasıdır. Bu dosya projenizin bağımlılıklarını tanımlar ve başka meta veriler de içerebilir. En basit `composer.json` şu şekilde görünebilir:

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

Burada, uygulamamızın (veya kütüphanemizin) `nette/database` paketine bağlı olduğunu (paket adı bir satıcı adı ve proje adından oluşur) ve `^3.0` sürüm kısıtlamasına uyan sürümü istediğini söylüyoruz.

Yani, proje kökünde `composer.json` dosyası olduğunda ve çalıştırdığımızda:

```shell
composer update
```

Composer Nette Veritabanını `vendor` dizinine indirecektir. Ayrıca, tam olarak hangi kütüphane sürümlerini yüklediği hakkında bilgi içeren bir `composer.lock` dosyası oluşturur.

Composer bir `vendor/autoload.php` dosyası oluşturur. Bu dosyayı kolayca dahil edebilir ve bu kütüphanelerin sağladığı sınıfları herhangi bir ekstra çalışma yapmadan kullanmaya başlayabilirsiniz:

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

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


Paketleri En Son Sürümlere Güncelleyin .[#toc-update-packages-to-the-latest-versions]
=====================================================================================

Kullanılan tüm paketleri `composer.json` adresinde tanımlanan sürüm kısıtlamalarına göre en son sürüme güncellemek için `composer update` komutunu kullanın. Örneğin `"nette/database": "^3.0"` bağımlılığı için en son 3.x.x sürümünü yükleyecek, ancak sürüm 4'ü yüklemeyecektir.

`composer.json` dosyasındaki sürüm kısıtlamalarını örneğin `"nette/database": "^4.1"` olarak güncellemek ve en son sürümü yüklemeyi etkinleştirmek için `composer require nette/database` komutunu kullanın.

Kullanılan tüm Nette paketlerini güncellemek için, hepsini komut satırında listelemek gerekir, örn:

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

Bu da pratik değildir. Bu nedenle, bunu sizin için yapacak basit bir komut dosyası "Composer Frontline":https://gist.github.com/dg/734bebf55cf28ad6a5de1156d3099bff kullanın:

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


Yeni Proje Oluşturma .[#toc-creating-new-project]
=================================================

Yeni Nette projesi basit bir komut çalıştırılarak oluşturulabilir:

```shell
composer create-project nette/web-project name-of-the-project
```

Bunun yerine `name-of-the-project` adresine projenizin dizininin adını girmeli ve komutu çalıştırmalısınız. Composer, `composer.json` dosyasını zaten içeren GitHub'dan `nette/web-project` deposunu getirecek ve hemen ardından Nette Framework'ün kendisini yükleyecektir. Geriye kalan tek şey `temp/` ve `log/` dizinleri üzerindeki [yazma izinlerini kontrol |nette:troubleshooting#setting-directory-permissions] etmektir ve artık hazırsınız.

Projenin hangi PHP sürümünde barındırılacağını biliyorsanız, [bunu ayarladığınızdan |#PHP Version] emin olun.


PHP Sürümü .[#toc-php-version]
==============================

Composer her zaman kullanmakta olduğunuz PHP sürümüyle (ya da Composer'ı çalıştırdığınızda komut satırında kullanılan PHP sürümüyle) uyumlu olan paket sürümlerini yükler. Bu sürüm muhtemelen web barındırıcınızın kullandığı sürümle aynı değildir. Bu nedenle `composer.json` dosyanıza barındırıcınızdaki PHP sürümü hakkında bilgi eklemeniz çok önemlidir. Bundan sonra, yalnızca ana bilgisayarla uyumlu paket sürümleri yüklenecektir.

Örneğin, projeyi PHP 8.2.3 üzerinde çalışacak şekilde ayarlamak için şu komutu kullanın:

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

Sürüm `composer.json` dosyasına bu şekilde yazılır:

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

Bununla birlikte, PHP sürüm numarası dosyanın başka bir yerinde, `require` bölümünde de listelenir. İlk numara paketlerin hangi sürüm için yükleneceğini belirtirken, ikinci numara uygulamanın kendisinin hangi sürüm için yazıldığını söyler.
(Tabii ki, bu sürümlerin farklı olması mantıklı değildir, bu nedenle çift giriş bir fazlalıktır). Bu sürümü şu komutla ayarlarsınız:

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

Veya doğrudan `composer.json` dosyasında:

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


PHP Sürümünü Yoksayma .[#toc-ignoring-php-version]
==================================================

Paketler genellikle hem uyumlu oldukları en düşük PHP sürümünü hem de test edildikleri en yüksek sürümü belirtirler. PHP'nin daha yeni bir sürümünü kullanmayı planlıyorsanız, belki de test amacıyla, Composer böyle bir paketi yüklemeyi reddedecektir. Çözüm, Composer'ın gerekli PHP sürümünün üst sınırlarını göz ardı etmesine neden olan `--ignore-platform-req=php+` seçeneğini kullanmaktır.


Yanlış Raporlar .[#toc-false-reports]
=====================================

Paketleri yükseltirken veya sürüm numaralarını değiştirirken çakışmalar meydana gelir. Bir paketin gereksinimleri diğeriyle çakışır ve bu böyle devam eder. Ancak, Composer bazen yanlış bir mesaj yazdırır. Gerçekte var olmayan bir çakışma bildirir. Bu durumda, `composer.lock` dosyasını silmek ve tekrar denemek yardımcı olur.

Hata mesajı devam ederse, ciddi bir mesajdır ve neyi nasıl değiştireceğinizi okumanız gerekir.


Packagist.org - Küresel Depo .[#toc-packagist-org-global-repository]
====================================================================

[Packagist |https://packagist.org], aksi söylenmediği takdirde Composer'ın paketleri aramaya çalıştığı ana paket deposudur. Kendi paketlerinizi de burada yayınlayabilirsiniz.


Ya Merkezi Depoyu İstemiyorsak .[#toc-what-if-we-don-t-want-the-central-repository]
-----------------------------------------------------------------------------------

Şirketimizde Packagist'te herkese açık olarak barındırılamayan dahili uygulamalarımız veya kütüphanelerimiz varsa, bu projeler için kendi depolarımızı oluşturabiliriz.

[Resmi belgelerde |https://getcomposer.org/doc/05-repositories.md#repositories] depolar hakkında daha fazla bilgi bulabilirsiniz.


Otomatik Yükleme .[#toc-autoloading]
====================================

Composer'ın önemli bir özelliği, yüklediği tüm sınıflar için otomatik yükleme sağlamasıdır; bunu `vendor/autoload.php` dosyasını ekleyerek başlatırsınız.

Ancak, Composer'ı `vendor` klasörü dışındaki diğer sınıfları yüklemek için kullanmak da mümkündür. İlk seçenek, Composer'ın tanımlı klasörleri ve alt klasörleri taramasına, tüm sınıfları bulmasına ve bunları otomatik yükleyiciye dahil etmesine izin vermektir. Bunu yapmak için `autoload > classmap` adresini `composer.json` olarak ayarlayın:

```js
{
	"autoload": {
		"classmap": [
			"src/",      #  includes the src/ folder and its subfolders
		]
	}
}
```

Daha sonra, her değişiklikte `composer dumpautoload` komutunu çalıştırmak ve otomatik yükleme tablolarının yeniden oluşturulmasına izin vermek gerekir. Bu son derece zahmetlidir ve bu görevi, aynı etkinliği arka planda otomatik olarak ve çok daha hızlı gerçekleştiren [RobotLoader'a |robot-loader:] emanet etmek çok daha iyidir.

İkinci seçenek [PSR-4'ü |https://www.php-fig.org/psr/psr-4/] takip etmektir. Basitçe söylemek gerekirse, ad 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, yani `App\Core\RouterFactory`, `/path/to/App/Core/RouterFactory.php` dosyasında bulunur. Yapılandırma örneği:

```js
{
	"autoload": {
		"psr-4": {
			"App\\": "app/"   # the App\ namespace is in the app/ directory
		}
	}
}
```

Bu davranışın tam olarak nasıl yapılandırılacağını öğrenmek için [Composer Belgelerine |https://getcomposer.org/doc/04-schema.md#psr-4] bakın.


Yeni Sürümlerin Test Edilmesi .[#toc-testing-new-versions]
==========================================================

Bir paketin yeni bir geliştirme sürümünü test etmek istiyorsunuz. Bunu nasıl yapabilirsiniz? Öncelikle, `composer.json` dosyasına paketlerin geliştirme sürümlerini yüklemenize izin verecek, ancak bunu yalnızca gereksinimleri karşılayan kararlı sürüm kombinasyonu yoksa yapacak olan bu seçenek çiftini ekleyin:

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

Ayrıca `composer.lock` dosyasını silmenizi öneririz, çünkü bazen Composer anlaşılmaz bir şekilde yüklemeyi reddeder ve bu sorunu çözecektir.

Paketin `nette/utils` olduğunu ve yeni sürümün 4.0 olduğunu varsayalım. Şu komut ile yüklüyorsunuz:

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

Ya da 4.0.0-RC2 gibi belirli bir sürümü yükleyebilirsiniz:

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

Başka bir paket kütüphaneye bağlıysa ve eski bir sürüme kilitliyse (örn. `^3.1`), paketi yeni sürümle çalışacak şekilde güncellemek idealdir.
Ancak, sınırlamayı aşmak ve Composer'ı geliştirme sürümünü yüklemeye ve eski bir sürümmüş gibi davranmaya zorlamak istiyorsanız (örneğin, 3.1.6), `as` anahtar sözcüğünü kullanabilirsiniz:

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


Çağrı Komutları .[#toc-calling-commands]
========================================

Kendi özel komutlarınızı ve komut dosyalarınızı Composer aracılığıyla yerel Composer komutlarıymış gibi çağırabilirsiniz. `vendor/bin` klasöründe bulunan komut dosyalarının bu klasörü belirtmesine gerek yoktur.

Örnek olarak, `composer.json` dosyasında testleri çalıştırmak için [Nette Tester |tester:] 'ı kullanan bir komut dosyası tanımlıyoruz:

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

Daha sonra testleri `composer tester` ile çalıştırıyoruz. Projenin kök klasöründe değil, bir alt dizinde olsak bile komutu çağırabiliriz.


Teşekkür Gönder .[#toc-send-thanks]
===================================

Size açık kaynak yazarlarını mutlu edecek bir numara göstereceğiz. Projenizin kullandığı kütüphanelere GitHub'da kolayca bir yıldız verebilirsiniz. Sadece `symfony/thanks` kütüphanesini yükleyin:

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

Ve sonra koş:

```shell
composer thanks
```

Dene bakalım!


Konfigürasyon .[#toc-configuration]
===================================

Composer, sürüm kontrol aracı [Git |https://git-scm.com] ile yakından entegre edilmiştir. Eğer Git kullanmıyorsanız bunu Composer'a söylemeniz gerekmektedir:

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

{{sitename: En İyi Uygulamalar}}

Composer Kullanım İpuçları

Composer PHP'de bağımlılık yönetimi için bir araçtır. Projenizin bağlı olduğu kütüphaneleri bildirmenize olanak tanır ve bunları sizin için yükler ve günceller. Öğreneceğiz:

  • Composer nasıl kurulur
  • yeni veya mevcut projede kullanın

Kurulum

Composer, aşağıdaki şekilde indirip kurduğunuz çalıştırılabilir bir .phar dosyasıdır.

Pencereler

Composer-Setup.exe resmi yükleyicisini kullanın.

Linux, macOS

İhtiyacınız olan tek şey bu sayfadan kopyalayabileceğiniz 4 komuttur.

Dahası, sistemin PATH adresindeki klasöre kopyalandığında Composer global olarak erişilebilir hale gelir:

$ mv ./composer.phar ~/bin/composer # or /usr/local/bin/composer

Projede Kullanım

Projenizde Composer'ı kullanmaya başlamak için tek ihtiyacınız olan bir composer.json dosyasıdır. Bu dosya projenizin bağımlılıklarını tanımlar ve başka meta veriler de içerebilir. En basit composer.json şu şekilde görünebilir:

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

Burada, uygulamamızın (veya kütüphanemizin) nette/database paketine bağlı olduğunu (paket adı bir satıcı adı ve proje adından oluşur) ve ^3.0 sürüm kısıtlamasına uyan sürümü istediğini söylüyoruz.

Yani, proje kökünde composer.json dosyası olduğunda ve çalıştırdığımızda:

composer update

Composer Nette Veritabanını vendor dizinine indirecektir. Ayrıca, tam olarak hangi kütüphane sürümlerini yüklediği hakkında bilgi içeren bir composer.lock dosyası oluşturur.

Composer bir vendor/autoload.php dosyası oluşturur. Bu dosyayı kolayca dahil edebilir ve bu kütüphanelerin sağladığı sınıfları herhangi bir ekstra çalışma yapmadan kullanmaya başlayabilirsiniz:

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

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

Paketleri En Son Sürümlere Güncelleyin

Kullanılan tüm paketleri composer.json adresinde tanımlanan sürüm kısıtlamalarına göre en son sürüme güncellemek için composer update komutunu kullanın. Örneğin "nette/database": "^3.0" bağımlılığı için en son 3.x.x sürümünü yükleyecek, ancak sürüm 4'ü yüklemeyecektir.

composer.json dosyasındaki sürüm kısıtlamalarını örneğin "nette/database": "^4.1" olarak güncellemek ve en son sürümü yüklemeyi etkinleştirmek için composer require nette/database komutunu kullanın.

Kullanılan tüm Nette paketlerini güncellemek için, hepsini komut satırında listelemek gerekir, örn:

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

Bu da pratik değildir. Bu nedenle, bunu sizin için yapacak basit bir komut dosyası Composer Frontline kullanın:

php composer-frontline.php

Yeni Proje Oluşturma

Yeni Nette projesi basit bir komut çalıştırılarak oluşturulabilir:

composer create-project nette/web-project name-of-the-project

Bunun yerine name-of-the-project adresine projenizin dizininin adını girmeli ve komutu çalıştırmalısınız. Composer, composer.json dosyasını zaten içeren GitHub'dan nette/web-project deposunu getirecek ve hemen ardından Nette Framework'ün kendisini yükleyecektir. Geriye kalan tek şey temp/ ve log/ dizinleri üzerindeki yazma izinlerini kontrol etmektir ve artık hazırsınız.

Projenin hangi PHP sürümünde barındırılacağını biliyorsanız, bunu ayarladığınızdan emin olun.

PHP Sürümü

Composer her zaman kullanmakta olduğunuz PHP sürümüyle (ya da Composer'ı çalıştırdığınızda komut satırında kullanılan PHP sürümüyle) uyumlu olan paket sürümlerini yükler. Bu sürüm muhtemelen web barındırıcınızın kullandığı sürümle aynı değildir. Bu nedenle composer.json dosyanıza barındırıcınızdaki PHP sürümü hakkında bilgi eklemeniz çok önemlidir. Bundan sonra, yalnızca ana bilgisayarla uyumlu paket sürümleri yüklenecektir.

Örneğin, projeyi PHP 8.2.3 üzerinde çalışacak şekilde ayarlamak için şu komutu kullanın:

composer config platform.php 8.2.3

Sürüm composer.json dosyasına bu şekilde yazılır:

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

Bununla birlikte, PHP sürüm numarası dosyanın başka bir yerinde, require bölümünde de listelenir. İlk numara paketlerin hangi sürüm için yükleneceğini belirtirken, ikinci numara uygulamanın kendisinin hangi sürüm için yazıldığını söyler. (Tabii ki, bu sürümlerin farklı olması mantıklı değildir, bu nedenle çift giriş bir fazlalıktır). Bu sürümü şu komutla ayarlarsınız:

composer require php 8.2.3 --no-update

Veya doğrudan composer.json dosyasında:

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

PHP Sürümünü Yoksayma

Paketler genellikle hem uyumlu oldukları en düşük PHP sürümünü hem de test edildikleri en yüksek sürümü belirtirler. PHP'nin daha yeni bir sürümünü kullanmayı planlıyorsanız, belki de test amacıyla, Composer böyle bir paketi yüklemeyi reddedecektir. Çözüm, Composer'ın gerekli PHP sürümünün üst sınırlarını göz ardı etmesine neden olan --ignore-platform-req=php+ seçeneğini kullanmaktır.

Yanlış Raporlar

Paketleri yükseltirken veya sürüm numaralarını değiştirirken çakışmalar meydana gelir. Bir paketin gereksinimleri diğeriyle çakışır ve bu böyle devam eder. Ancak, Composer bazen yanlış bir mesaj yazdırır. Gerçekte var olmayan bir çakışma bildirir. Bu durumda, composer.lock dosyasını silmek ve tekrar denemek yardımcı olur.

Hata mesajı devam ederse, ciddi bir mesajdır ve neyi nasıl değiştireceğinizi okumanız gerekir.

Packagist.org – Küresel Depo

Packagist, aksi söylenmediği takdirde Composer'ın paketleri aramaya çalıştığı ana paket deposudur. Kendi paketlerinizi de burada yayınlayabilirsiniz.

Ya Merkezi Depoyu İstemiyorsak

Şirketimizde Packagist'te herkese açık olarak barındırılamayan dahili uygulamalarımız veya kütüphanelerimiz varsa, bu projeler için kendi depolarımızı oluşturabiliriz.

Resmi belgelerde depolar hakkında daha fazla bilgi bulabilirsiniz.

Otomatik Yükleme

Composer'ın önemli bir özelliği, yüklediği tüm sınıflar için otomatik yükleme sağlamasıdır; bunu vendor/autoload.php dosyasını ekleyerek başlatırsınız.

Ancak, Composer'ı vendor klasörü dışındaki diğer sınıfları yüklemek için kullanmak da mümkündür. İlk seçenek, Composer'ın tanımlı klasörleri ve alt klasörleri taramasına, tüm sınıfları bulmasına ve bunları otomatik yükleyiciye dahil etmesine izin vermektir. Bunu yapmak için autoload > classmap adresini composer.json olarak ayarlayın:

{
	"autoload": {
		"classmap": [
			"src/",      #  includes the src/ folder and its subfolders
		]
	}
}

Daha sonra, her değişiklikte composer dumpautoload komutunu çalıştırmak ve otomatik yükleme tablolarının yeniden oluşturulmasına izin vermek gerekir. Bu son derece zahmetlidir ve bu görevi, aynı etkinliği arka planda otomatik olarak ve çok daha hızlı gerçekleştiren RobotLoader'a emanet etmek çok daha iyidir.

İkinci seçenek PSR-4'ü takip etmektir. Basitçe söylemek gerekirse, ad 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, yani App\Core\RouterFactory, /path/to/App/Core/RouterFactory.php dosyasında bulunur. Yapılandırma örneği:

{
	"autoload": {
		"psr-4": {
			"App\\": "app/"   # the App\ namespace is in the app/ directory
		}
	}
}

Bu davranışın tam olarak nasıl yapılandırılacağını öğrenmek için Composer Belgelerine bakın.

Yeni Sürümlerin Test Edilmesi

Bir paketin yeni bir geliştirme sürümünü test etmek istiyorsunuz. Bunu nasıl yapabilirsiniz? Öncelikle, composer.json dosyasına paketlerin geliştirme sürümlerini yüklemenize izin verecek, ancak bunu yalnızca gereksinimleri karşılayan kararlı sürüm kombinasyonu yoksa yapacak olan bu seçenek çiftini ekleyin:

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

Ayrıca composer.lock dosyasını silmenizi öneririz, çünkü bazen Composer anlaşılmaz bir şekilde yüklemeyi reddeder ve bu sorunu çözecektir.

Paketin nette/utils olduğunu ve yeni sürümün 4.0 olduğunu varsayalım. Şu komut ile yüklüyorsunuz:

composer require nette/utils:4.0.x-dev

Ya da 4.0.0-RC2 gibi belirli bir sürümü yükleyebilirsiniz:

composer require nette/utils:4.0.0-RC2

Başka bir paket kütüphaneye bağlıysa ve eski bir sürüme kilitliyse (örn. ^3.1), paketi yeni sürümle çalışacak şekilde güncellemek idealdir. Ancak, sınırlamayı aşmak ve Composer'ı geliştirme sürümünü yüklemeye ve eski bir sürümmüş gibi davranmaya zorlamak istiyorsanız (örneğin, 3.1.6), as anahtar sözcüğünü kullanabilirsiniz:

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

Çağrı Komutları

Kendi özel komutlarınızı ve komut dosyalarınızı Composer aracılığıyla yerel Composer komutlarıymış gibi çağırabilirsiniz. vendor/bin klasöründe bulunan komut dosyalarının bu klasörü belirtmesine gerek yoktur.

Örnek olarak, composer.json dosyasında testleri çalıştırmak için Nette Tester 'ı kullanan bir komut dosyası tanımlıyoruz:

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

Daha sonra testleri composer tester ile çalıştırıyoruz. Projenin kök klasöründe değil, bir alt dizinde olsak bile komutu çağırabiliriz.

Teşekkür Gönder

Size açık kaynak yazarlarını mutlu edecek bir numara göstereceğiz. Projenizin kullandığı kütüphanelere GitHub'da kolayca bir yıldız verebilirsiniz. Sadece symfony/thanks kütüphanesini yükleyin:

composer global require symfony/thanks

Ve sonra koş:

composer thanks

Dene bakalım!

Konfigürasyon

Composer, sürüm kontrol aracı Git ile yakından entegre edilmiştir. Eğer Git kullanmıyorsanız bunu Composer'a söylemeniz gerekmektedir:

composer -g config preferred-install dist