Nette Documentation Preview

syntax
Özelliklerden Sunucu Oluşturma
******************************

.[perex]
Aynı kodu birden fazla sunucuda uygulamamız gerekiyorsa (örneğin, kullanıcının oturum açtığının doğrulanması), kodu ortak bir ataya yerleştirmek caziptir. İkinci seçenek ise tek amaçlı [özellikler |nette:introduction-to-object-oriented-programming#traits] oluşturmaktır.

Bu çözümün avantajı, PHP'de çoklu kalıtım mümkün değilken, her sunucunun yalnızca gerçekten ihtiyaç duyduğu özellikleri kullanabilmesidir.

Bu özellikler, sunum yapan kişi oluşturulduğunda tüm [inject yöntemlerinin |inject-method-attribute#inject methods] sırayla çağrılmasından yararlanabilir. Sadece her inject yönteminin adının benzersiz olduğundan emin olmanız gerekir.

Traitler, başlatma kodunu [onStartup veya onRender |application:presenters#Events] olaylarına asabilir.

Örnekler:

```php
trait RequireLoggedUser
{
	public function injectRequireLoggedUser(): void
	{
		$this->onStartup[] = function () {
			if (!$this->getUser()->isLoggedIn()) {
				$this->redirect('Sign:in', $this->storeRequest());
			}
		};
	}
}

trait StandardTemplateFilters
{
	public function injectStandardTemplateFilters(TemplateBuilder $builder): void
	{
		$this->onRender[] = function () use ($builder) {
			$builder->setupTemplate($this->template);
		};
	}
}
```

Sunum yapan kişi daha sonra bu özellikleri kullanır:

```php
class ArticlePresenter extends Nette\Application\UI\Presenter
{
	use StandardTemplateFilters;
	use RequireLoggedUser;
}
```


{{sitename: En İyi Uygulamalar}}

Özelliklerden Sunucu Oluşturma

Aynı kodu birden fazla sunucuda uygulamamız gerekiyorsa (örneğin, kullanıcının oturum açtığının doğrulanması), kodu ortak bir ataya yerleştirmek caziptir. İkinci seçenek ise tek amaçlı özellikler oluşturmaktır.

Bu çözümün avantajı, PHP'de çoklu kalıtım mümkün değilken, her sunucunun yalnızca gerçekten ihtiyaç duyduğu özellikleri kullanabilmesidir.

Bu özellikler, sunum yapan kişi oluşturulduğunda tüm inject yöntemlerinin sırayla çağrılmasından yararlanabilir. Sadece her inject yönteminin adının benzersiz olduğundan emin olmanız gerekir.

Traitler, başlatma kodunu onStartup veya onRender olaylarına asabilir.

Örnekler:

trait RequireLoggedUser
{
	public function injectRequireLoggedUser(): void
	{
		$this->onStartup[] = function () {
			if (!$this->getUser()->isLoggedIn()) {
				$this->redirect('Sign:in', $this->storeRequest());
			}
		};
	}
}

trait StandardTemplateFilters
{
	public function injectStandardTemplateFilters(TemplateBuilder $builder): void
	{
		$this->onRender[] = function () use ($builder) {
			$builder->setupTemplate($this->template);
		};
	}
}

Sunum yapan kişi daha sonra bu özellikleri kullanır:

class ArticlePresenter extends Nette\Application\UI\Presenter
{
	use StandardTemplateFilters;
	use RequireLoggedUser;
}