Bu seriyi ilk kez okuyorsanız önceki yazıları, Yii Framework ile uygulama geliştirmek için [1] [2]’yi okumanız, yazının verimi açısından daha iyi olacaktır.
Yii ile geliştirdiğimiz uygulamada sıra geldi projedeki Controller yapısını incelemeye. Geliştirmeye önce veritabanından başladığımız için, bütünlülüğü göz önünde bulundurarak Model ile devam etmiştim. Aslında MVC yapılarında tüm kontrolü adı üzerinde Controller yapmaktadır. Dolasıyla projeyi ve işleyişini kavramak için Controller’ı incelemek daha anlaşılır olacaktır.
Önceki yazıda olduğu gibi fakat bu kez Faculty’nin Controller’ını inceleyelim. Yii Framework’te controller dosyaları protected/controllers dizini içerisinde yer almaktadır. Serinin başında oluşturduğumuz projeye sadık kaldıysanız; klasör içerisinde site, faculty ve department isimi 3 tane controller olacaktır. Yine önceki yazıdan hatırlanacağı üzere, uygulamada varsayılan controller olarak FacultyController’ı belirlemiştik.
Geçelim incelemeye:
Controller’ın ilk satırında Yii’nin diğer bir güzelliği olan custom layout yapısını belirten tanımlamayı görüyoruz:
[code lang=”php”] public $layout = ‘//layouts/column2’;[/code]
Bu satır, Yii’nin kullanacığı arayüzü belirtir. Arayüzler protected/views/layouts içerisindedir. Değiştirilebilir ve baştan yazılabilir. Bu kısım view ile alakalı olduğundan, şimdilik bu açıklamaya yetineceğiz.
Serinin önceki yazılarından da hatırlayacağınız üzere, Yii Framework’te Controller içerisindeki metodların -Action- isimleri başlarına action eklenerek yazılır. Routing işlemleri sırasında belirtilen metoda bu şekilde erişim gerçekleştirilir. Örneğin şu an kullandığımız proje; index.php?r=controller/action yönlendirmesini kullanıyor. Buradaki controller varsayılan ya da o an çağırılan controller, action ise controller içerisindeki methodlardan bir tanesidir.
Eğer url üzerinden yalnızca controller çağırılırsa, controller varsayılan olarak index action’a yönlendirme yapar.
Bu bilgiler doğrultusunda controllerda action olarak tanımlanmış 7 action bulunmaktadır. Detaylıca inceleyeceğiz.
Controller aynı zamanda action dışında da işlemler yapan bazı metodlar içermektedir. Bunlardan bir tanesi de accessRules() metodudur. Yii Framework, bu metod ile birlikte kullanıcı seviyelendirmesini ve izinlerini oldukça pratik hale getirmiştir:
[code lang=”php”]public function accessRules() {
return array(
array(‘allow’, // allow all users to perform ‘index’ and ‘view’ actions
‘actions’=>array(‘index’,’view’),
‘users’=>array(‘*’),
),
array(‘allow’, // allow authenticated user to perform ‘create’ and ‘update’ actions
‘actions’=>array(‘create’,’update’),
‘users’=>array(‘@’),
),
array(‘allow’, // allow admin user to perform ‘admin’ and ‘delete’ actions
‘actions’=>array(‘admin’,’delete’),
‘users’=>array(‘admin’),
),
array(‘deny’, // deny all users
‘users’=>array(‘*’),
),
);
}
[/code]
Her action için ayrı olabilmek koşuluyla, kullanıcıların bu actionlar için erişimi düzenleyen bu metodun kullanımı oldukça basittir.
Örnek üzerinde konuşursak; bu metodun index ve view actionları için tüm kullanıcıları (login olan ya da olmayan) erişim izni verilmiştir. Fakat diğer taraftan create ve update metodları içinse bu izin yalnızca login olan kullanıcılarla sınırlı kalmıştır. Son olarak admin ve delete metodlarının izni ise admin seviyesindedir.
Bir forum için düşünürsek; bazı alanları login olanlardan ziyade, e-posta onaylı kullanıcılarla da kısıtlamak mümkün. Veya daha önce 50 mesaj yazmış kullanıcıları da düşünebilir, yapı bu şekilde esnek olduğu sürece kıstas fark etmiyor. Şimdilik kısaca üzerinden geçelim:
[code lang=”php”] <pre id="aeaoofnhgocdbnbeljkmbjdmhbcokfdb-mousedown">array(‘allow’,‘actions’=>array(‘edit’),
‘users’=>array(‘@’),
‘expression’=>’isset($user->role) && ($user->role==="moderator")’
),</pre>
[/code]
Örnekteki expression’ın değeri kullanıcı rolü üzerinden edit iznini kontrol etmektedir. Eğer kullanıcının belirlenen rolü ($user->role) moderator değilse, uygulama işleme izin vermeyecektir. Daha sonraki yazılarda bu konuyu detaylandıracağız.
Sıradaki metod olan actionView, gelen $id parametresini view isimli dosyaya (protected/faculty/view.php) yönlendirmektedir. Bu metod için dikkat edilmesi gereken diğer nokta ise, gelen parametreyi ($id) önce loadModel() metoduna göndermesidir. Burada $id parametresini alan loadModel() metodu findByPk yani PrimaryKey’e göre arama yaparak belirtilen satırı -varsa- geri döndürür.
Yeni bir faculty oluştururken kullanılacak olan actionCreate, POST edilmiş değerleri önce yeni bir model üzerinden alır sonra da kaydeder. Kaydetme işlemi başarılı olursa oluşturulan faculty sayfasına yönlenir. Eğer actionCreate post edilmeksizin çağırılırsa form sayfası render edilecektir.
Yii’nin Controller içerisinde kullandığı render metodu 3 parametre alabilir. Bunlardan ilki tabii ki render edilecek olan view dosyasıdır. Yol belirtilmediği sürece, controller’ın ismindeki view dosyaları çağırılacaktır. Yani iki farklı klasörde, aynı isimde bulunan create.php şablonları için öncelik controller’a ait olanındır. 2. parametre (opsiyonel) view dosyasına gönderilecek olan dataları içerir. Genellikle $model örneği gönderilir.
Diğer action metodları da aynı prensiplerle çalışmakta ve sonuç üretmektedir. Bunlardan farklı olarak, controller içerisinde bulunan tek metod performAjaxValidation() olup, ajax istekleri sırasında kullanılmaktadır. İlerleyen yazılarda detaylarını göreceğiz.
Bir sonraki yazıda view katmanına dair örnek ve detaylar üzerinde duracağım.
Faydalı bir yazı serisi, Yii’ye giriş yapmamda büyük katkı sağladı. Keşke devamı gelse. Teşekkürler
Öncelikle ellerine sağlık,Üstad yazılar gerçekten akıcı ve anlaşılır. Yazıların devamını bekliyorum, biraz daha detaylarına inersen seviniriz:)
oldukça başarılı bir anlatım serinin devamını bekliyoruz 🙂
“Serinin başında oluşturduğumuz projeye sadık kaldıysanız; klasör içerisinde site, faculty ve department isimi 3 tane controller olacaktır.”
şeklinde referans verdiğiniz yazıyı sitenizde bulamadım. Bu ilk yazı silinmiş olabilir mi? Duruyorsa linki nedir?