Phalcon Framework Dersleri – 5 / Controller ile Detaylı Çalışma

Controller Nedir?
Controller, MVC (Model-View-Controller) deseninde projenin iç süreçlerini kontrol eden, gelen istekleri işleyen bölümdür. Bu bölümde View ile Model arasındaki bağlantı kurulur. Kullanıcılardan gelen istekler (request) Controller’da değerlendirilir, isteğin detayına göre hangi işlemlerin yapılacağı ve kullanıcıya hangi View’ın döneceği (response) belirtilir. Default olarak tüm controller metodları ulaşılabilir bir haldedir. Action’lar ise isteği yorumlama ve yanıtı oluşturmak için sorumludur ve sonucu gösterme işlemi ile yükümlüdür.

Controller Nasıl Çalışır ?
Örnek verecek olursak; http://localhost/blog/posts/show/2014/phalcon-dersleri-5-controller-ile-detayli-calisma adresine erişmek istediğimizde Phalcon default olarak her parçayı şu şekilde ayrıştıracaktır :

Kısaca MVC Tasarım Deseni (Design Pattern);

– Kullanıcı sayfa üzerinden bir istek gönderir. (İstek: Request)
– İstek, ilgili Controller’da değerlendirilir ve hangi model ile ilgiliyse o modelde (ve veritabanında) işlemler yapılır. Controller ile Model arasında çift yönlü ok olmasının sebebi, isteğin çalıştırılma sürecinde Controller üzerinden farklı modellerin çağırılabillmesidir.
– Controller üzerinde Model işlemleri tamamlandıktan sonra bilgiler View üzerine yerleştirilir.
– View’a yerleştirilen bilgi kullanıcıya yanıt olarak gönderilir (Yanıt: Response). Böylelikle kullanıcının yaptığı bir istek MVC ile geliştirilmiş olan uygulamamız içerisinde başarıyla işlenip sonucu kullanıcıya sunulur.
– Controller, gelen isteğe göre Model’e uğramadan gerekli verileri hazırlayıp direk View’a bu bilgileri yerleştirip kullanıcıya yanıtı dönebilir.

 

Phalcon Klasörü blog
Controller posts
Action show
Parameter 2014
Parameter mustafa-toker

Bu durumda, PostsController bu isteği karşılayıp, showAction‘a iletecektir. Oluşturacağınız Controller dosyaları mutlaka Controller son eki ile bitmelidir aynı şekilde Action’larda Action son eki ile bitmelidir.

Yukarı da ki kodta da gördüğünüz üzere Değişkenleri URL’den alıp Action’a basit bir şekilde ilettik. Dilerseniz default değerde atayabilirsiniz :

Parametreleri metoda tanımlayabildiğiniz gibi, dispatcher servisine bağlı getParam metoduyla da alabilirsiniz (Sıralamaya dikkat edin):

Dispatch Döngüsü (Dispatch Loop)

Dispatch döngüsü, Dispatcher servisi ile, çalıştırılacak bir method olmadığı durumlarda çalışır. Örneğin bir sayfamız var ve yetki kontrolü yaptık kullanıcının buraya girmesi yasak. O halde kullanıcıyı başka bir action’a gönderiyoruz.

Eğer kullanıcıların PostController’in showAction’una erişebilme yetkisi yoksa UsersController’in signinAction’una göndererek giriş yapmasını sağlıyoruz.

Controller Initialize

Not : Terimleri varolan şekliyle bilmeniz sizin için yapacağınız araştırmalarda kolaylık sağlayacaktır.

Phalcon\Mvc\Controller bize controller üzerinde ilk çalıştırılacak olan bir initialize methodu sağlar.

__construct methodu phalcon! tarafından tavsiye edilmez

Unutmayın ! initialize methodu sadece “geçerli action” controller üzerinde varsa ve yetkilendirme vs gibi işlemler için yönlendirme yapılmazsa çağrılır. Bu program mantığını korur.

Eğer siz her durumda çalışmasını istiyorsanız , onConstruct methodunu kullanabilirsiniz.

Unutmayın! onConstruct action olsun olmasın , yetki olsun olmasın her durumda çalışır , Controller’a istek gelmesi yeter.

DI Servisleri

Eğer Controller’ınız da Phalcon\Mvc\Controller’ı extend etti iseniz Bootstrap’de (index.php) tanımladığımız $di servislerine kolay bir şekilde erişebilirsiniz:

Bootstrap’de (public/index.php) şu şekilde tanımlayalım ;

Daha sonra Controller’ımız da şu şekilde erişebiliyoruz ;

Request ve Response

Request ve Responce Phalcon\Mvc\Controller üzerinde sağlanan iki farklı servistir. Bu servisler bağlamında bir çok farklı method içerir. Request almak , talep etmek , Response basmak , yollamak anlamında kullanabilirsiniz. Bu anlamlarda mesela saveAction’a yollanan postu almak için request’i kullanırız.

Bilgileri aldık ve işledik , ama mesela bir şey oldu mesela bir yazıya geldi adam 404 action’a yönlendirdik. 404 action’da status kodu ayarlamak için response kullanıyoruz

Session Data

Persistant’lar bize istekler arasında veri saklama imkanı sağlar. Phalcon\Session\Bag servisine herhangi bir controller ‘dan ulaşabilirsiniz.

Servisleri Controller olarak kullanmak

Bir kontrolleri servis olarak kaydedebilirsininiz. Bu bir gizleme işlemi olarak adlandırılabilir. Yani IndexController çağrıldığında bir servis çalışabilir.

Temel Controller Oluşturmak (ControllerBase)

Base controller oluşturmak her zaman size kolaylık sağlayacaktır . ControllerBase phalcon\mvc\controller’dan extend olurken , diğer tüm controller’larınız bu ControllerBaseextend olur. Bu sayede mesela tüm controller’larda geçerli bir servis var, mesela çoklu dil, ve ya cache bu durumlarda , her controllerda karışıklık yapmak yerine ControllerBase üzerinden ayarlıyoruz.

Şu şekilde extend edip erişebiliyoruz;

Controller’da olay tabanlı işlemler

Controller’lar dispatcher’de bir olay olduğunda otomatik dinleyici olarak hareket eder. Uygulamalarınıza önce/sonra eylemlerini şu şekilde implemente edebilirsiniz :

 

 

 

Not : Genellikle Resmi dökümandan çeviri yaptığım için ekip arkadaşım Muhammed’in yazmış olduğu makaleden yararlandım bir kaç konuda ise yazdıklarını direkt aldım.