Nette Documentation Preview

syntax
Tracy ile Başlarken
*******************

<div class=perex>

Tracy kütüphanesi günlük PHP programcıları için yararlı bir yardımcıdır. Size yardımcı olur:

- hataları hızla tespit edin ve düzeltin
- günlük hataları
- değişkenlerin dökümü
- komut dosyalarının/sorguların yürütme süresini ölçme
- bellek tüketimine bakın

</div>


PHP, programcılara büyük esneklik sağladığı için zor tespit edilebilen hatalar yapmak için mükemmel bir dildir. Tracy\Debugger bu nedenle daha değerlidir. Teşhis araçları arasında nihai bir araçtır.

Eğer Tracy ile ilk kez tanışıyorsanız, inanın bana, hayatınız Tracy'den önceki ve onunla olan olarak ikiye ayrılmaya başlar. İyi kısma hoş geldiniz!


Kurulum ve Gereksinimler .[#toc-installation-and-requirements]
==============================================================

Tracy'yi kurmanın en iyi yolu en [son paketi indirmektir](https://github.com/nette/tracy/releases) veya Composer'ı kullanmaktır:

```shell
composer require tracy/tracy
```

Alternatif olarak, tüm paketi veya [tracy.phar |https://github.com/nette/tracy/releases] dosyasını indirebilirsiniz.


Kullanım .[#toc-usage]
======================

Tracy, `Tracy\Debugger::enable()' yönteminin programın başında, herhangi bir çıktı gönderilmeden önce mümkün olan en kısa sürede çağrılmasıyla etkinleştirilir:

```php
use Tracy\Debugger;

require 'vendor/autoload.php'; // alternatif olarak tracy.phar

Debugger::enable();
```

Sayfada ilk fark edeceğiniz şey sağ alt köşedeki Tracy Çubuğudur. Eğer bunu göremiyorsanız, bu Tracy'nin üretim modunda çalıştığı anlamına gelebilir.
Bunun nedeni Tracy'nin güvenlik nedeniyle yalnızca localhost'ta görünür olmasıdır. Çalışıp çalışmadığını test etmek için `Debugger::enable(Debugger::Development)` parametresini kullanarak geçici olarak geliştirme moduna geçirebilirsiniz.


Tracy Bar .[#toc-tracy-bar]
===========================

Tracy Çubuğu yüzen bir paneldir. Bir sayfanın sağ alt köşesinde görüntülenir. Fareyi kullanarak hareket ettirebilirsiniz. Sayfa yeniden yüklendikten sonra konumunu hatırlayacaktır.

[* tracy-bar.webp *]:https://nette.github.io/tracy/tracy-debug-bar.html

Tracy Bar'a başka kullanışlı paneller ekleyebilirsiniz. İlginç olanları [eklentilerde |https://componette.org] bulabilir veya [kendiniz oluşturabilirsiniz |extensions].

Tracy Bar'ı göstermek istemiyorsanız, ayarlayın:

```php
Debugger::$showBar = false;
```


Hata ve İstisnaların Görselleştirilmesi .[#toc-visualization-of-errors-and-exceptions]
======================================================================================

PHP'nin hataları nasıl raporladığını biliyorsunuzdur: sayfanın kaynak kodunda buna benzer bir şey vardır:

/--pre .{font-size: 90%}
<b>Parse error</b>:  syntax error, unexpected '}' in <b>HomePresenter.php</b> on line <b>15</b>
\--

veya yakalanmamış istisna:

/--pre .{font-size: 90%}
<b>Fatal error</b>:  Uncaught Nette\MemberAccessException: Call to undefined method Nette\Application\UI\Form::addTest()? in /sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php:100
Stack trace:
#0 /sandbox/vendor/nette/utils/src/Utils/Object.php(75): Nette\Utils\ObjectMixin::call(Object(Nette\Application\UI\Form), 'addTest', Array)
#1 /sandbox/app/Forms/SignFormFactory.php(32): Nette\Object->__call('addTest', Array)
#2 /sandbox/app/UI/Sign/SignPresenter.php(21): App\Forms\SignFormFactory->create()
#3 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(181): App\UI\Sign\SignPresenter->createComponentSignInForm('signInForm')
#4 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(139): Nette\ComponentModel\Container->createComponent('signInForm')
#5 /sandbox/temp/cache/latte/15206b353f351f6bfca2c36cc.php(17): Nette\ComponentModel\Co in <b>/sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php</b> on line <b>100</b><br />
\--

Bu çıktıda gezinmek o kadar kolay değildir. Tracy'yi etkinleştirirseniz, hem hatalar hem de istisnalar tamamen farklı bir biçimde görüntülenir:

[* tracy-exception.webp .{url:-} *]

Hata mesajı tam anlamıyla çığlık atıyor. Kaynak kodun bir bölümünü, hatanın oluştuğu vurgulanmış satırla birlikte görebilirsiniz. Bir mesaj hatayı net bir şekilde açıklıyor. Sitenin tamamı [etkileşimlidir, deneyin](https://nette.github.io/tracy/tracy-exception.html).

Ve ne var biliyor musunuz? Ölümcül hatalar da aynı şekilde yakalanır ve görüntülenir. Herhangi bir uzantı yüklemenize gerek yok (canlı örnek için tıklayın):

[* tracy-error.webp .{url:-} *]

Bir değişken adındaki yazım hatası veya var olmayan bir dosyanın açılmaya çalışılması gibi hatalar E_NOTICE veya E_WARNING düzeyinde raporlar oluşturur. Bunlar kolayca gözden kaçabilir ve/veya bir web sayfası grafik düzeninde tamamen gizlenebilir. Tracy'nin bunları yönetmesine izin verin:

[* tracy-notice2.webp *]:https://nette.github.io/tracy/tracy-debug-bar.html

Ya da hatalar gibi görüntülenebilirler:

```php
Debugger::$strictMode = true; // tüm hataları görüntüle
Debugger::$strictMode = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED; // deprecated bildirimleri hariç tüm hatalar
```

[* tracy-notice.webp .{url:-} *]

Not: Tracy etkinleştirildiğinde hata raporlama seviyesini E_ALL olarak değiştirir. Bunu değiştirmek istiyorsanız, `enable()` adresini çağırdıktan sonra bunu yapın.


Geliştirme ve Üretim Modu .[#toc-development-vs-production-mode]
================================================================

Gördüğünüz gibi, Tracy oldukça konuşkan, bu da geliştirme ortamında takdir edilebilirken, üretim sunucusunda bir felakete neden olacaktır. Bunun nedeni, orada hiçbir hata ayıklama bilgisinin görüntülenmemesi gerektiğidir. Bu nedenle Tracy **ortam otomatik algılama** özelliğine sahiptir ve örnek canlı bir sunucuda çalıştırılırsa, hata görüntülenmek yerine günlüğe kaydedilir ve ziyaretçi yalnızca kullanıcı dostu bir mesaj görür:

[* tracy-error2.webp .{url:-} *]

Üretim kipi, [dump() |dumper] kullanılarak gönderilen tüm hata ayıklama bilgilerinin ve elbette PHP tarafından üretilen tüm hata iletilerinin görüntülenmesini engeller. Yani kodda bazı `dump($obj)` adreslerini unuttuysanız, endişelenmenize gerek yok, üretim sunucusunda hiçbir şey görüntülenmeyecektir.

Mod otomatik algılama nasıl çalışır? Uygulama localhost üzerinde çalışıyorsa (yani, IP adresi `127.0.0.1` veya `::1`) ve proxy yoksa (yani, HTTP başlığı) mod geliştirmedir. Aksi takdirde, üretim modunda çalışır.

Geliştirme modunu diğer durumlarda, örneğin belirli bir IP adresinden erişen geliştiriciler için etkinleştirmek istiyorsanız, bunu `enable()` yönteminin bir parametresi olarak belirtebilirsiniz:

```php
Debugger::enable('23.75.345.200'); // bir dizi IP adresi de sağlayabilirsiniz
```

IP adresini bir çerez ile birleştirmenizi kesinlikle öneririz. `tracy-debug` çerezinde `secret1234` gibi gizli bir belirteç saklayın ve bu şekilde, geliştirme modunu yalnızca çerezde belirtilen belirtece sahip olan belirli bir IP adresinden erişen geliştiriciler için etkinleştirin:

```php
Debugger::enable('secret1234@23.75.345.200');
```

Ayrıca `enable()` yönteminin bir parametresi olarak `Debugger::Development` veya `Debugger::Production` sabitlerini kullanarak geliştirme/üretim modunu doğrudan ayarlayabilirsiniz.

.[note]
Nette Framework kullanıyorsanız, [bunun için modu |application:bootstrap#Development vs Production Mode] nasıl [ayarlayacağınıza |application:bootstrap#Development vs Production Mode] bir göz atın ve daha sonra Tracy için de kullanılacaktır.


Hata Günlüğü .[#toc-error-logging]
==================================

Üretim modunda, Tracy tüm hataları ve istisnaları otomatik olarak bir metin günlüğüne kaydeder. Günlüğe kaydetme işleminin gerçekleşmesi için, günlük dizininin mutlak yolunu `$logDirectory` değişkenine ayarlamanız veya `enable()` yöntemine ikinci parametre olarak aktarmanız gerekir:

```php
Debugger::$logDirectory = __DIR__ . '/log';
```

Hata kaydı son derece kullanışlıdır. Uygulamanızın tüm kullanıcılarının aslında ücretsiz olarak hata bulma konusunda birinci sınıf iş yapan beta testçileri olduğunu ve onların değerli raporlarını fark etmeden çöp kutusuna atmanızın aptallık olacağını düşünün.

Kendi mesajlarınızı veya yakalanan istisnaları günlüğe kaydetmeniz gerekiyorsa, `log()` yöntemini kullanın:

```php
Debugger::log('Beklenmeyen hata'); // metin mesajı

try {
	criticalOperation();
} catch (Exception $e) {
	Debugger::log($e); // günlük istisnası
	// veya
	Debugger::log($e, Debugger::ERROR); // ayrıca bir e-posta bildirimi gönderir
}
```

If you want Tracy to log PHP errors like `E_NOTICE` or `E_WARNING` with detailed information (HTML report), set `Debugger::$logSeverity`:

```php
Debugger::$logSeverity = E_NOTICE | E_WARNING;
```

Gerçek bir profesyonel için hata günlüğü çok önemli bir bilgi kaynağıdır ve herhangi bir yeni hatadan hemen haberdar olmak ister. Tracy ona yardımcı olur. Her yeni hata kaydı için bir e-posta gönderebilir. Bu e-postaların nereye gönderileceği $email değişkeni ile belirlenir:

```php
Debugger::$email = 'admin@example.com';
```

Nette Framework'ün tamamını kullanıyorsanız, bunu ve diğerlerini [yapılandırma dosyasında |nette:configuring] ayarlayabilirsiniz.

E-posta kutunuzu selden korumak için Tracy **sadece bir mesaj** gönderir ve bir dosya oluşturur `email-sent`. Bir geliştirici e-posta bildirimini aldığında, günlüğü kontrol eder, uygulamasını düzeltir ve `email-sent` izleme dosyasını siler. Bu, e-posta gönderimini tekrar etkinleştirir.


Dosyaları Düzenleyicide Açma .[#toc-opening-files-in-the-editor]
================================================================

Hata sayfası görüntülendiğinde, dosya adlarına tıklayabilirsiniz ve imleç ilgili satırda olacak şekilde editörünüzde açılırlar. Dosyalar da oluşturulabilir (eylem `create file`) veya içlerindeki hatalar düzeltilebilir (eylem `fix it`). Bunu yapmak için [tarayıcıyı ve sistemi yapılandırmanız |open-files-in-ide] gerekir.


Desteklenen PHP Sürümleri .[#toc-supported-php-versions]
========================================================

| Tracy | PHP ile uyumlu
|-----------|--------------------
| Tracy 2.10 – 3.0 | PHP 8.0 – 8.4
| Tracy 2.9 | PHP 7.2 - 8.2
| Tracy 2.8 | PHP 7.2 - 8.1
| Tracy 2.6 - 2.7 | PHP 7.1 - 8.0
| Tracy 2.5 | PHP 5.4 - 7.4
| Tracy 2.4 | PHP 5.4 - 7.2

En son yama sürümleri için geçerlidir.


Limanlar .[#toc-ports]
======================

Bu, diğer çerçevelere ve CMS'ye resmi olmayan bağlantı noktalarının bir listesidir:

- [Drupal 7](https://www.drupal.org/project/traced)
- Laravel framework: [recca0120/laravel-tracy](https://github.com/recca0120/laravel-tracy), [whipsterCZ/laravel-tracy](https://github.com/whipsterCZ/laravel-tracy)
- [OpenCart](https://github.com/BurdaPraha/oc_tracy)
- [ProcessWire CMS/CMF](https://github.com/adrianbj/TracyDebugger)
- [Slim Framework](https://github.com/runcmf/runtracy)
- Symfony framework: [kutny/tracy-bundle](https://github.com/kutny/tracy-bundle), [VasekPurchart/Tracy-Blue-Screen-Bundle](https://github.com/VasekPurchart/Tracy-Blue-Screen-Bundle)
- [Wordpress](https://github.com/ktstudio/WP-Tracy)

Tracy ile Başlarken

Tracy kütüphanesi günlük PHP programcıları için yararlı bir yardımcıdır. Size yardımcı olur:

  • hataları hızla tespit edin ve düzeltin
  • günlük hataları
  • değişkenlerin dökümü
  • komut dosyalarının/sorguların yürütme süresini ölçme
  • bellek tüketimine bakın

PHP, programcılara büyük esneklik sağladığı için zor tespit edilebilen hatalar yapmak için mükemmel bir dildir. Tracy\Debugger bu nedenle daha değerlidir. Teşhis araçları arasında nihai bir araçtır.

Eğer Tracy ile ilk kez tanışıyorsanız, inanın bana, hayatınız Tracy'den önceki ve onunla olan olarak ikiye ayrılmaya başlar. İyi kısma hoş geldiniz!

Kurulum ve Gereksinimler

Tracy'yi kurmanın en iyi yolu en son paketi indirmektir veya Composer'ı kullanmaktır:

composer require tracy/tracy

Alternatif olarak, tüm paketi veya tracy.phar dosyasını indirebilirsiniz.

Kullanım

Tracy, `Tracy\Debugger::enable()' yönteminin programın başında, herhangi bir çıktı gönderilmeden önce mümkün olan en kısa sürede çağrılmasıyla etkinleştirilir:

use Tracy\Debugger;

require 'vendor/autoload.php'; // alternatif olarak tracy.phar

Debugger::enable();

Sayfada ilk fark edeceğiniz şey sağ alt köşedeki Tracy Çubuğudur. Eğer bunu göremiyorsanız, bu Tracy'nin üretim modunda çalıştığı anlamına gelebilir. Bunun nedeni Tracy'nin güvenlik nedeniyle yalnızca localhost'ta görünür olmasıdır. Çalışıp çalışmadığını test etmek için Debugger::enable(Debugger::Development) parametresini kullanarak geçici olarak geliştirme moduna geçirebilirsiniz.

Tracy Bar

Tracy Çubuğu yüzen bir paneldir. Bir sayfanın sağ alt köşesinde görüntülenir. Fareyi kullanarak hareket ettirebilirsiniz. Sayfa yeniden yüklendikten sonra konumunu hatırlayacaktır.

Tracy Bar'a başka kullanışlı paneller ekleyebilirsiniz. İlginç olanları eklentilerde bulabilir veya kendiniz oluşturabilirsiniz.

Tracy Bar'ı göstermek istemiyorsanız, ayarlayın:

Debugger::$showBar = false;

Hata ve İstisnaların Görselleştirilmesi

PHP'nin hataları nasıl raporladığını biliyorsunuzdur: sayfanın kaynak kodunda buna benzer bir şey vardır:

Parse error:  syntax error, unexpected '}' in HomePresenter.php on line 15

veya yakalanmamış istisna:

Fatal error:  Uncaught Nette\MemberAccessException: Call to undefined method Nette\Application\UI\Form::addTest()? in /sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php:100
Stack trace:
#0 /sandbox/vendor/nette/utils/src/Utils/Object.php(75): Nette\Utils\ObjectMixin::call(Object(Nette\Application\UI\Form), 'addTest', Array)
#1 /sandbox/app/Forms/SignFormFactory.php(32): Nette\Object->__call('addTest', Array)
#2 /sandbox/app/UI/Sign/SignPresenter.php(21): App\Forms\SignFormFactory->create()
#3 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(181): App\UI\Sign\SignPresenter->createComponentSignInForm('signInForm')
#4 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(139): Nette\ComponentModel\Container->createComponent('signInForm')
#5 /sandbox/temp/cache/latte/15206b353f351f6bfca2c36cc.php(17): Nette\ComponentModel\Co in /sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php on line 100

Bu çıktıda gezinmek o kadar kolay değildir. Tracy'yi etkinleştirirseniz, hem hatalar hem de istisnalar tamamen farklı bir biçimde görüntülenir:

Hata mesajı tam anlamıyla çığlık atıyor. Kaynak kodun bir bölümünü, hatanın oluştuğu vurgulanmış satırla birlikte görebilirsiniz. Bir mesaj hatayı net bir şekilde açıklıyor. Sitenin tamamı etkileşimlidir, deneyin.

Ve ne var biliyor musunuz? Ölümcül hatalar da aynı şekilde yakalanır ve görüntülenir. Herhangi bir uzantı yüklemenize gerek yok (canlı örnek için tıklayın):

Bir değişken adındaki yazım hatası veya var olmayan bir dosyanın açılmaya çalışılması gibi hatalar E_NOTICE veya E_WARNING düzeyinde raporlar oluşturur. Bunlar kolayca gözden kaçabilir ve/veya bir web sayfası grafik düzeninde tamamen gizlenebilir. Tracy'nin bunları yönetmesine izin verin:

Ya da hatalar gibi görüntülenebilirler:

Debugger::$strictMode = true; // tüm hataları görüntüle
Debugger::$strictMode = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED; // deprecated bildirimleri hariç tüm hatalar

Not: Tracy etkinleştirildiğinde hata raporlama seviyesini E_ALL olarak değiştirir. Bunu değiştirmek istiyorsanız, enable() adresini çağırdıktan sonra bunu yapın.

Geliştirme ve Üretim Modu

Gördüğünüz gibi, Tracy oldukça konuşkan, bu da geliştirme ortamında takdir edilebilirken, üretim sunucusunda bir felakete neden olacaktır. Bunun nedeni, orada hiçbir hata ayıklama bilgisinin görüntülenmemesi gerektiğidir. Bu nedenle Tracy ortam otomatik algılama özelliğine sahiptir ve örnek canlı bir sunucuda çalıştırılırsa, hata görüntülenmek yerine günlüğe kaydedilir ve ziyaretçi yalnızca kullanıcı dostu bir mesaj görür:

Üretim kipi, dump() kullanılarak gönderilen tüm hata ayıklama bilgilerinin ve elbette PHP tarafından üretilen tüm hata iletilerinin görüntülenmesini engeller. Yani kodda bazı dump($obj) adreslerini unuttuysanız, endişelenmenize gerek yok, üretim sunucusunda hiçbir şey görüntülenmeyecektir.

Mod otomatik algılama nasıl çalışır? Uygulama localhost üzerinde çalışıyorsa (yani, IP adresi 127.0.0.1 veya ::1) ve proxy yoksa (yani, HTTP başlığı) mod geliştirmedir. Aksi takdirde, üretim modunda çalışır.

Geliştirme modunu diğer durumlarda, örneğin belirli bir IP adresinden erişen geliştiriciler için etkinleştirmek istiyorsanız, bunu enable() yönteminin bir parametresi olarak belirtebilirsiniz:

Debugger::enable('23.75.345.200'); // bir dizi IP adresi de sağlayabilirsiniz

IP adresini bir çerez ile birleştirmenizi kesinlikle öneririz. tracy-debug çerezinde secret1234 gibi gizli bir belirteç saklayın ve bu şekilde, geliştirme modunu yalnızca çerezde belirtilen belirtece sahip olan belirli bir IP adresinden erişen geliştiriciler için etkinleştirin:

Debugger::enable('secret1234@23.75.345.200');

Ayrıca enable() yönteminin bir parametresi olarak Debugger::Development veya Debugger::Production sabitlerini kullanarak geliştirme/üretim modunu doğrudan ayarlayabilirsiniz.

Nette Framework kullanıyorsanız, bunun için modu nasıl ayarlayacağınıza bir göz atın ve daha sonra Tracy için de kullanılacaktır.

Hata Günlüğü

Üretim modunda, Tracy tüm hataları ve istisnaları otomatik olarak bir metin günlüğüne kaydeder. Günlüğe kaydetme işleminin gerçekleşmesi için, günlük dizininin mutlak yolunu $logDirectory değişkenine ayarlamanız veya enable() yöntemine ikinci parametre olarak aktarmanız gerekir:

Debugger::$logDirectory = __DIR__ . '/log';

Hata kaydı son derece kullanışlıdır. Uygulamanızın tüm kullanıcılarının aslında ücretsiz olarak hata bulma konusunda birinci sınıf iş yapan beta testçileri olduğunu ve onların değerli raporlarını fark etmeden çöp kutusuna atmanızın aptallık olacağını düşünün.

Kendi mesajlarınızı veya yakalanan istisnaları günlüğe kaydetmeniz gerekiyorsa, log() yöntemini kullanın:

Debugger::log('Beklenmeyen hata'); // metin mesajı

try {
	criticalOperation();
} catch (Exception $e) {
	Debugger::log($e); // günlük istisnası
	// veya
	Debugger::log($e, Debugger::ERROR); // ayrıca bir e-posta bildirimi gönderir
}

If you want Tracy to log PHP errors like E_NOTICE or E_WARNING with detailed information (HTML report), set Debugger::$logSeverity:

Debugger::$logSeverity = E_NOTICE | E_WARNING;

Gerçek bir profesyonel için hata günlüğü çok önemli bir bilgi kaynağıdır ve herhangi bir yeni hatadan hemen haberdar olmak ister. Tracy ona yardımcı olur. Her yeni hata kaydı için bir e-posta gönderebilir. Bu e-postaların nereye gönderileceği $email değişkeni ile belirlenir:

Debugger::$email = 'admin@example.com';

Nette Framework'ün tamamını kullanıyorsanız, bunu ve diğerlerini yapılandırma dosyasında ayarlayabilirsiniz.

E-posta kutunuzu selden korumak için Tracy sadece bir mesaj gönderir ve bir dosya oluşturur email-sent. Bir geliştirici e-posta bildirimini aldığında, günlüğü kontrol eder, uygulamasını düzeltir ve email-sent izleme dosyasını siler. Bu, e-posta gönderimini tekrar etkinleştirir.

Dosyaları Düzenleyicide Açma

Hata sayfası görüntülendiğinde, dosya adlarına tıklayabilirsiniz ve imleç ilgili satırda olacak şekilde editörünüzde açılırlar. Dosyalar da oluşturulabilir (eylem create file) veya içlerindeki hatalar düzeltilebilir (eylem fix it). Bunu yapmak için tarayıcıyı ve sistemi yapılandırmanız gerekir.

Desteklenen PHP Sürümleri

Tracy PHP ile uyumlu
Tracy 2.10 – 3.0 PHP 8.0 – 8.4
Tracy 2.9 PHP 7.2 – 8.2
Tracy 2.8 PHP 7.2 – 8.1
Tracy 2.6 – 2.7 PHP 7.1 – 8.0
Tracy 2.5 PHP 5.4 – 7.4
Tracy 2.4 PHP 5.4 – 7.2

En son yama sürümleri için geçerlidir.

Limanlar

Bu, diğer çerçevelere ve CMS'ye resmi olmayan bağlantı noktalarının bir listesidir: