Gii Module Kullanımı | Yii Framework

G

(Dikkat: Yazılanların daha anlaşılır olması için serinin önceki yazılarını okumanız gerekebilir veya gerekmeyebilir.)

Önceki yazılarla birlikte Yii’nin nasıl çalıştığı az da olsa anlaşıldı. Bu yazıda ise, daha önce yalnızca ne olduğundan bahsettiğimden fakat detaylarına girmediğim Gii modülünü kullanımından bahsedeceğim.

Gii modülü, Yii’nin daha önce komut satırından oluşturduğu (generate) MVC, CRUD ve formlar için kullanılacak dosyaları, web arayüzü aracılığıyla oluşturmaya yardım eder.

Gii’ye erişimi önceki yazıda açıklamıştım. Gerekli düzenlemeleri yaptıysanız http://localhost/hello/index.php?r=gii adresinden Gii’ye giriş yapabilirsiniz. Parolayı önceki yazıda belirlemiştik. Gii şöyle bir arayüze sahip:

Ne gördük? Açıklayalım:

  • Controller Generator:  Yii’nin varsayılan Controller sınıfından genişletilen bir controller sınıfı oluşturur. Oluşturulan controller içerisinde index metodu ve yoruma alınmış haliyle iki metod daha içerir. Controller oluştururken bir de index metodu tarafından sunum (render) için kullanılmak üzere bir index.php (view) oluşturulur. Bu dosyalar, view/ içerisinde her bir controller ismiyle olmak üzere, farklı klasörlerde yer alır.
  • Crud Generator: Oluşturulan her model için; view, update, index, create, admin sayfalarını oluşturur. Böylece adı geçen model için düzenleme, listeleme, ekleme gibi işlemler için fazladan bir işlem yapılmasına gerek kalmaz.
  • Form Generator: Model için, modele ait tüm alanları veya bazı alanları (senaryoya göre değişebilir) içeren form oluşturur. Oluşturulacak form, seçilen isimle, modele ait view dizinine eklenir.
  • Model Generator: Her veritabanı tablosu için, Yii tarafında tabloyu karşılayacak bir model oluşturur. Oluşturulan model, tablonun tüm ilişkilerini içerir (null, auto increment, foreign keys vb).
  • Module Generator:  Hazır bir iskeleti Yii’ye aktarmak için kullanılır (orta ve ileri seviye).

Bir controller oluşturup detaylarını inceleyelim.

Gii -> Controller Generator sayfası üzerinden, “hello” isminde (büyük-küçük harfe dikkat) bir controller oluşturalım. Eğer Yii’nin varsayılan controller sınıfını extend ettiyseniz “base class” alanını değiştirebilirsiniz. Bilmiyorsanız olduğu gibi kalsın.

Action IDs alanı oluşturulacak metod isimleri için gerekiyor. Yii’de controller için standart bir index metodu var, daha fazla metod ekleyeceksiniz virgülle ayırarak ekleyebilirsiniz. Bu alana bir de test metodunu ekleyelim. Son olarak oluşturulacak controller için şablon yapısı -code template- var, şablon eklemediyseniz olduğu gibi bırakın.

Yazma izinleri sorunsuz ise protected/controller/ dizini altında “HelloController.php” oluşacaktır. Daha önce de söylediğim gibi, Yii’de controller isimleri küçük harfle oluşturulur ve çağırılır. HelloController.php şu şekilde:

[code lang=”php”] class HelloController extends Controller
{
public function actionIndex()
{
    $this->render(‘index’);
   }

public function actionTest()
   {
       $this->render(‘test’);
   }

//aşağıda yoruma alınmış actions() ve filters() metodları
}
[/code]

Bir controller çağırıldığında ilk olarak -özellikle başka bir metod çağırılmadıysa index metodu -actionIndex()- çağırılır. Örnekte de gördüğünüz gibi, actionIndex çağırıldığında yalnızca views/hello/index.php arayüzünü yüklüyor. Şimdilik herhangi bir veri gönderimi yok.

Oluşturulan controller’a localhost/hello/index.php?r=hello yoluyla erişebilirsiniz. Çıkan sayfa actionIndex metodunun render(‘index’) ile yüklediği views/hello/index.php’ye aittir. Görünüm:

Bir de views/hello/index.php’ye yani render edilen dosyaya bakalım:

[code lang=”php”] <?php
$this->breadcrumbs=array(
‘Hello’,
);?>

<h1><?php echo $this->id . ‘/’ . $this->action->id; ?></h1>

<p>
You may change the content of this page by modifying
the file <tt><?php echo __FILE__; ?></tt>.
</p>
[/code]

Gösterilen view ile ilgili detaylar ve çalıştırılan action yazılıyor. Buradan da görüleceği üzere hello controller çağırıldığında index metodu cevap veriyor. Şimdi oluşturduğumuz diğer metodu, yani test metodunu çağıralım. Bunun için hello’yu çağırırken kullandığımız urlnin sonuna metod adını yazmamız yeterli: localhost/hello/index.php?r=hello/test.

Son olarak, controller katmanından, view katmanına statik bir data göndererek yazıyı tamamlayalım. HelloController’ın actionIndex metodunu aşağıdaki hale getirelim:

[code lang=”php”]

public $message;

public function actionIndex()
{
$this->message = "Hello world from controller";
$this->render(‘index’, array(‘content’ => $this->message));
}

[/code]

Metodu render ederken controllerda oluşturulmuş bir değişkeni view katmanına aktardık. Viewda ise gelen veriyi kullanacağız. Controller’dan $this->message olarak gönderilen bilgi array üzerinde ‘content‘ olarak adlandırıldığı için, viewdan bu değişkene erişmek için $content kullanmak yeterli. Yani views/site/index.php dosyasına:

[code lang=”php”] <p><?php echo $content; ?></p>
[/code]

Satırını eklersek veriyi göstermiş oluruz.

Bir sonraki yazıda; Yii’nin MVC kullanım ve detaylarını mini bir uygulama olacak.

Soru ve önerileri yorumlar ile belirtirseniz sevinirim.

Merhaba 👋

Yazıları e-posta olarak almak istiyorsanız adresinizi girmeniz yeterli

Spam yapmıyoruz, sadece blogda yayına girmiş yazılar.

close

Merhaba 👋

Yazıları e-posta olarak almak istiyorsanız adresinizi girmeniz yeterli

Spam yapmıyoruz, sadece blogda yayına girmiş yazılar.

4 Yorum

  • Bu framework ile çalışmak istiyorum. Elimde uzunca bir süredir geliştirme aşamasında olan ve başarıyla kullanılan bir veritabanı ve admin paneli bulunan bir web projem mevcut ve her geçen gün artan istekler doğrultusunda güncellemekyetim. Ancak bu projeyi daha doğrusu hem projeyi hem de veritabanı ile ilgili düzenlemeleri yaptığında derleyip kullanıma hazır hale getirmek çok zor oluyor. Projesi bir yazilim kullanarak geliştirmiştim ve relationları veritabanında değil yazılım içinde kurmuştum. Şimdi bu frameworku verimli kullanabilmek için yeniden mi tasarlamalıyım nasıl olmalı? Tablolarının hepsi myisam bu relation kurmak için sorun oluşturur mu? Yardımcı olursanız tesekkur ederim. Saygı ile.

  • ‘content’ kavramından ve öneminden biraz daha bahsetseniz çok iyi olur. Çok faydalı bir yazı dizisi. Çok teşekkürler, iyi çalışmalar.

Oğulcan

Arşivler

Kategoriler