15 Mart 2020 Pazar

GRAILS WEB İSKELETİ

RubyOnRails iskeletinin Ruby dili kullanması gibi Grails de Groovy dilini kullanan bir web iskeletidir. Yapı olarak RubyOnRails yapısına çok benzer.

Grails kurulumu öncesi Groovy dilinin kurulu olması ve bir miktar temel özelliklerini de öğrenmek iyi olacaktır. Daha sonra Grails sitesinden binari dağıtım zip dosyasını indirip klasörü açarız. 



Ortam değişkenlerinde GRAILS_HOME değişkenine zip dosyayı açtığımız klasörün path'ini veririz.









Daha sonra "path" ortam değişkenine de "%GRAILS_HOME%\bin" değerini ekleriz.

Şimdi çalışmasını test edelim. Komut isteği açıp
grails -version
komutunu girelim. Şuna benzer bir cevap dönerse kurulum olmuş demektir.





Yeni Uygulama Oluşturma

Grails uygulaması oluşturmak için "grails" komutunu tanımak gerekir.
grails << komut adı >>
 "create-app" komutu ile yeni uygulama oluşturulur:
grails create-app test
 Bu komut "test" adında bir klasör oluşturup içine grails uygulaması içim gereken temel dosyaları koyacaktır. Dilerseniz bu klasör içindeki dosyaları bir inceleyin , ön bilgi edinin. 

Şimdi konsolda üretilen bu klasör içinde girelim ve burada Grails etkileşimli konsolunu çalıştıralım:
cd test
grails
Şuna benzer bir prompt göreceğiz:


Ne istiyoruz? Basitçe ekranda "Merhaba Dünya" yazan bir web sayfası. Grails'de yeni bir sayfa istediğimizde onun için bir kontrolör ve bir aksiyon tanımlarız. Henüz bir kontrolör tanımlamadığımız için ilk önce onu "create-controller" komutuyla tanımlayalım: 
grails> create-controller merhaba
Etkileşimli konsolda  komut isimleri için otomatik tamamlama özelliği vardır. Bu yüzden sadece "cre" yazıp tab tuşuna basarsak tüm "create-*" ile başlayan komutların bir listesi çıkacaktır. Bikaç karakter daha girip tab tuşlayarak komutun tamamının gelmesini sağlayabiliriz. 

Yukarıdaki komut "grails-app/controllers/test" klasörü içinde "MerhabaController.groovy" adında bir kontrolör dosyası oluşturur. Neden yine bir "test" klasörü daha oluşturuldu? Çünkü bu Groovy dilini icat eden Java dünyasında tüm sınıfların bir paket içerisinde olması geleneği vardır. 

Şimdi kontrolörümüz oluştuğuna göre "Merhaba Dünya!" yazan sayfamızı içinde tanımlayalım. "MerhabaController.groovy" dosyasını bir text editörü ile açalım. Ben genelde "Sublime Text" ediitörü kullanıyorum. Bir "render" sayfası için dosyayı şu hale getirelim:


Bir aksiyon kısaca bir metod ile ifade edilir. Buradaki aksiyon ise Grails'in "render" metodu ile sayfa yayınlar. 

İşimiz tamam. Şimdi test edelim. Bunun için server'ı çalıştırmamız gerekiyor. Buna ait komut ise "run-app". Grails konsolda bunu girelim:
grails> run-app
 Bir sürü şeyler yazdıktan sonra "executing" mesajı gelip durulur. Tarayıcımızı açıp adres yerine "localhost:8080" yazdığımızda karşımıza "Wellcome to Grails" sayfası çıkacaktır.



Bu Grails iskeletinin standart açılış sayfası. Peki bizim "Merhaba Dünya!" yazılı sayfa nerede?. Sayfaya bakarsanız aşağıda "Available Controllers" diye bir liste var. Ya bunu tıklayarak ya da adrese kontrolör adımız olan merhabayı ekleyerek ("/merhaba" şeklinde) kontrolörümüzün index sayfasına ulaşabiliriz.


Şükür çalışan ilk uygulamamız göründü. Bir yan bilgi, önceki "Wellcome to Grails" sayfası "grails-app/view/index.gsp" dosyasında kodu yazılmış olan sayfadır.

Son olarak bir kontrolörde birden çok aksiyon olabilir. Bunların herbiri bir başka sayfaya karşı gelir (aslında başkası da var da şimdilik AJAX çağrılarını konu dışı bırakıyoruz).

Uygulama adımızı da adres bilgisine dahil edelim dersek " grails-app/conf/application.yml" dosyasını editörde açıp en sonuna şu satırları ekleyelim:


Artık sayfamıza ulaşmak için tarayıcı adres barında "localhost:8080/test/merhaba" yazmalıyız.



DAHA İŞE YARAR BİR UYGULAMA

Artık bir veritabanı uygulaması yapalım. Uygulamamızda ziyaretçilerin kayıtlarını tutmayı planlıyoruz. 

Öncelikle "ziyaret" adında bir uygulama oluşturmak için uygulamayı koymayı düşündüğümüz klasörde consolu açıp 
grails create-app ziyaret
komutunu girelim ve uygulama klasörleri ve dosyaları oluşsun.  Test etmek için önce uygulama klasörüne geçip, orada grails konsolunu çalıştıralım.
cd ziyaret
grails
Açılan grails konsolda
run-app
yazarak uygulamanın çalışmasını  bekleyelim. Server'ın çalıştığına dair yazı geldikten sonra tarayıcımızda "localhost:8080" adresine gidersek standart Wellcome to Grails sayfası açılacaktır. Konsolda "stop-app" yazarak ya da Ctrl-C basarak durdurabiliriz.


DOMAIN MODELİNİN OLUŞTURULMASI

Uygulamamız şu anda bir şey yapmıyor. Ziyaretçilerin geribildirimlerini kaydedeceğimiz veritabanı karşılığı olarak Domain Modelimizi oluşturalım. Tablolara karşı gelecek sınıflar şu şekilde olacak:
  • Class Geribildirim : Ziyaretçinin geri bildiriminin kendisi
  • Class User : Geri bildirimi yapan kişi bilgisi
  • Class Yorumlar : Geri bildirime yapılan yorumlar.
Grails bu sınıflara ait boş kalıp dosyalarını oluşturabilir. Şimdi önce bu domain sınıflarını oluşturalım. Grails konsolda şu komutları girelim:
grails> create-domain-class ziyaret.Geribildirim
grails> create-domain-class ziyaret.User
grails> create-domain-class ziyaret.Yorum
Bu komutlar ile uygulamamızın "grails-app/domain/ziyaret" klasörü altında yukarıdaki 3 domain sınıfının tanımlarını içeren 3 adet ".groovy" dosyası oluşturulur. Şimdi bu dosyaları aşağıdaki şekillerdeki gibi değiştirelim.

Geribildirim.groovy:


User.groovy:

Yorum.groovy:


Domain modeli değiştirdiğimizde server'ı tekrar başlatmamız ve Grails konsolda "clean" komutu çalıştırmamız gerekir.




DİNAMİK SCAFFOLD

Grails kullanıcı arabirim sayfalarının temellerinin dinamik veya statik hazırlanmasını sağlayabilir. Dinamik hazırlamayı kullanırsak Grails uygulaması domain sınıfların arabirim sayfalarını dinamik olarak hazırlar. Kullanıcı arabirim işlemleri Create (Yeni kayıt), Read (kayıt okuma), Update (kayıt değiştirme) ve Delete (kayıt silme) işlemlerinden yani CRUD oluşur. 

Domain sınıfımız için dinamik hazırlama kullanmak için şu komutları gireriz:
grails> generate-controller ziyaret.Geribildirim
grails> generate-controller ziyaret.User
grails> generate-controller ziyaret.Yorum
Bu komutlar "grails-app/controllers/ziyaret" klasöründe kontrolör sınıf dosyalarını oluşturur.

Bu dosyaların içinde dinamik hazırlamayı aktif hale getirmek için "def index" diye başlayan metod yerine "static scaffold = DomainClassName" yazarız. Messela Geribildirim:


Diğerlerini de değiştirip kaydedelim.

Şimdi uygulamamızı test edelim
grails> run-app
Şimdi "localhost:8080" adresine gittiğimizde az önce tanımladığımız kontrolörlerin "Available Controllers" listesine eklendiğini görürüz.

Grails konsolunu Windows'ta açmak için uygulama root klasöründeki "grailsw.bat" dosyasını tıklayarak da çalıştırabilirsiniz.

Listeden kullanıcıları görmek için UserController linkine tıkladığımızda karşımıza boş bir liste çıkacak çünkü daha kullanıcı kaydı eklemedik.

Burada "New User" linkine tıklayıp yeni kullanıcı tanımlayalım:


Girdiğimiz veriler domain sınıf kriterlerinde yazdıklarımıza uygunsa bir kullanıcı kaydı veritabanına eklenecektir.

Şimdi de bir Geribildirim kaydı yapalaım. Ana sayfadan linki tıklayığ geribildirimlere oradan da "new" linkine tıklayıp yine kayıt sayfasına gelebiliriz.


Dikkat ederseniz kullanıcı isimleri bir dropdown liste olarak geldi. Nedeni domain sınıflarını tanımlarken Geribildirim sınıfına User tipinde bir sütun eklemiş olmamız, Geribildirim kaydını User kaydına bağladı , User sınıf tanımında da "toString()" metoduna sadece kullanıcının isim bilgisini dönmesini belirttiğmiz için de listeye sadece ismler geldi.

Geribildirim sınıfında ayrıca "hasMany" ile yorumlara atıfta bulunduğumuz için "Add Yorum" linki de geldi.




STATİK SCAFFOLD

Peki görsel sayfalarımızı kendimiz düzenlemek istersek? Bu durumda statik scaffolda geçmemiz gerekiyor. Bunun için ilk önce Grails konsolda görsellerimizi oluşturmasını isteyeceğiz.
grails> generate-views ziyaret.Geribildirim
grails> generate-views ziyaret.User
grails> generate-views ziyaret.Yorum
Daha sonra dinamik scaffold için yaptığımız değişikliği geri almalıyız. (Keşke "def index" diye başlayan satırları silmeseydik)




Az evvel verdiğimiz görsel üretme komutları "grails-app/views" altında her modelimiz için bir klasör tanımlayıp içinde gerekli görsel dosyalarını ".gsp" uzantılı (Groovy Server Pages) olarak ekledi. Bu dosyalar içine Groovy kodları eklenmiş standart HTML dosyalarıdır. Her bi model için "create, edit, index ve show" görselleri oluşturulmuştur.



ÜRETİLEN GÖRSELLERİ DEĞİŞTİRMEK


Üretilen görselleri istediğimiz gibi değiştirebiliriz. Örneğin aşağıdaki değişikliği yaparak yorum ekleme sayfasında isimin yorumdan önce yazılmasını sağlayabiliriz. "views/geribildirim/create.gsp" dosyasında şu değişikliği yapalım.


Böylece kullanıcı seçimini en başa aldık. Ayrıca "f:all" yerine tek tek tablo sütun değerlerinin nasıl gösterileceğini de gördük.



CSS KULLANMAK


CSS dosyalarını değiştirerek görsellerin şeklini değiştirebiliriz. Örneğin "assets/stylesheets/application.css" dosyasına aşağıdaki satırları ekleyerek geribildirim yazısının girildiği input box genişliği artırılabilir.



Eh, bu kadar yeter. Amacım burada sizlere bir şeyler öğretmek değil, benim dikkatimi çeken şeylere sizin de dikkatinizi çekmek. İnşallah tekrar görüşmek nasip olur..













Hiç yorum yok:

Yorum Gönder