Kohana 3 ile Telefon Defteri
Tarih: Temmuz 12th, 2010 | Yazar: Ertuğrul Erkan | Kategori: Php | Etiketler: kohana, kohana 3, kohana 3 dersleri, kohana 3 derslerim, kohana 3 example, kohana 3 hakkında, kohana 3 ile ilk, kohana 3 ile ilk uygulama, kohana 3 ile telefon defteri, kohana 3 kullanımı, kohana 3 kurulumu, kohana dersleri, kohana example, kohana ile, kohana ile ilk, kohana ile telefon defteri, kohana kurulumu, kohana uygulaması, Php, php dersleri, php derslerim | 8 Yorum »MVC modeli hakkında daha önceden bahsetmiştik. Bu tip yapılar sayesinde karmaşık veyahut orta ölçekli (küçük ölçekliler için gereksiz kalır) projelerde ekstra preformans sağlar, düzenli ve grup çalışmasına yatkın yapılar elde ederiz. Php üzerinde MVC kavramı için pek çok Framework mevcut. Bunlar arasında küçük, hızlı ve gayet performanslı olan Kohana 3 ile ilk uygulamamız olan telefon defteri yapımına bakacağız.
Aynen MVC modeline uyarak telefon defterimizi model – view – control kısımlara ayırıcaz. Arada ki tüm işlemler için (database, form vs) gene Kohana nın bize sağladığı sınıflarımızı kullanıcaz. Kohana 2x den sonra 3 e geçişte pek çok fonksiyonunu değiştirmiş gibi görünüyor. Daha önceki tecrübeleri olan kişiler için dökümantasyonu tekrar incelemekte fayda var tabi.
Kurulum
Öncelikle Kohana 3 ü sunucumuz üzerine kurmamız gerekiyor. Yazı ile anlatmak yerine videosu bulunan bu kısmı Eburhan ın 2 dakikada Kohana Framework’ünü kurmak ve çalıştırmak dersi sayesinde rahatça geçebilirsiniz.
Ayarlar
Kohana yı kurduktan sonra uygulamamız için birkaç ufak ayar yapmamız lazım. Kohana içerisinde bulunan application klasörü altında bootstrap.php isimli Php dosyasını açın ve şu kısımları düzenleyin;
Kohana::init(array( 'base_url' => '/', 'index_file' => FALSE, ));
Kohana::init(array( 'base_url' => 'http://sunucu/kohana/index.php/', 'index_file' => FALSE, ));
şeklinde,
// 'database' => MODPATH.'database', // Database access
'database' => MODPATH.'database', // Database access
şeklinde,
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'controller' => 'welcome',
'action' => 'index',
));
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'controller' => 'ornek',
'action' => 'index',
));
şeklinde. Burada uygulamamız için gerekli yolları düzelttik, veritabanı için modülü yükledik ve control kısmı için gerekli dosyayı gösterdik.
Controller Kısmı; ornek.php
Not; Bu dosya application\classes\controller altında bulunmalıdır!
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Ornek extends Controller {
private $model;
private $view;
public function __construct(Request $request)
{
parent::__construct($request);
$this->model = new Model_Ornek;
$this->view = View::factory('ornek_wi');
}
public function action_index()
{
$liste = $this->model->liste();
$this->view->bind("liste",$liste);
$this->request->response = $this->view->render();
}
public function action_ekle()
{
$post = new Validate($_POST);
$post->rule('isim', 'not_empty')
->rule('tel', 'not_empty');
if(!$post->check()) {
$this->request->response = "boş alan bırakmayın";
}
$this->model->create($_POST);
$this->request->redirect(Url::base());
}
public function action_sil()
{
$this->model->sil($_POST['boxs']);
$this->request->redirect(Url::base());
}
}
Controller kısmı MVC modelinde iskelet görevini üstleniyor. Burada açtığımızı sınıfı Kohana ya Controller olarak tanıtıyoruz. Daha sonrasında sınıf başlatıldığı anda Model ve View için kullandığımız kısımları yüklüyoruz ki daha sonradan ulaşabilelim. Ardından action kısımları geliyor. Actionlar, Kohana içerisinde böyle tanıtılıyor. Bu sayede tıpkı event listener gibi dinlenerek daha sonradan çalıştırılıyor. Bahsettiğimiz gibi Controller görüntü için değil, sadece bütün yapıların bir arada tutulması için mevcut.
Action_index herhangi bir fonksiyon çağırılmıyorsa, default olarak geliyor. ekle ve sil ise oldukça belli, daha sonradan view içerisinden çağırılmak için mevcutlar.
Index fonksiyonun da view yani görüntü kısmına bağlanıyoruz. Daha önceki Smarty yazısında gördüğümüz gibi oradaki boş değerleri buradan atıyoruz. Yani; view içerisinde herhangi bir veri yok. Bütün hepsi boş değişkenler. Yalnız Controller kısmında Model e bağlanıyoruz ve liste fonksiyonunu çalıştırarak, return değilmiş isim ve telefon değerlerini, view içerisindeki foreach a aktarıyoruz. Bu sayede herkesin görevi yapılmış ve ekrana veriler basılmış oluyoruz. Son olarak ise Kohana->Controller altında bulunan fonksiyonu kullanarak ekrana view kısmının render yani işlenmiş halini basıyoruz. Aksi taktirde ekrana view gelmez.
Ekle fonksiyonu içerisinde, gene view kısmından gelen post verileri var (isim ve telefon bilgileri). Bunları Kohana nın Validate sınıfına yollayarak kontrollerden geçiriyoruz. Bu fonksiyon içerisinde sadece boş olmaması gerektiği söylenmiş. Fakat isterseniz numeric, trim, phone, mail gibi çok farklı türlerini de kullanabilirsiniz.
Eğer ki Validate fonksiyonu true dönüyorsa yani veriler boş değilse, Kohana->Controller kısmının isteklerini kullanarak ekrana “boş alan bırakmayın” yazdırıyoruz. Bir nevi die() görevi görüyor. Eğer ki burada işlemler sonlandırılmazsa alt satırdaki modelimizin, create isimli fonksiyonuna gelen tüm post verilerini yolluyoruz. Sonrasında gene Kohana->Controller kısmının istekleri içerisinde bulunan yönlendirme fonksiyonunu kullanarak eski adresimize (action_index fonksiyonuna) geri dönüşümüzü gerçekleştiriyoruz. Bu da bir nevi header() görevi görüyor.
Sil fonksiyonu içerisinde ise gelen verileri herhangi bir doğrulamaya tabi tutmaksızın direkt olarak modelimiz içerisinde bulunan sil isimli fonksiyona yollayıp, redirect ile geri dönüyoruz.
Veritabanı Ayarları; database.php
Not; Bu dosya application\config altında bulunmalıdır!
<?php defined('SYSPATH') or die('No direct access allowed.');
return array
(
'default' => array
(
'type' => 'mysql',
'connection' => array(
/**
* The following options are available for MySQL:
*
* string hostname
* string username
* string password
* boolean persistent
* string database
*
* Ports and sockets may be appended to the hostname.
*/
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'persistent' => FALSE,
'database' => 'kohana',
),
'table_prefix' => '',
'charset' => 'utf8',
'caching' => FALSE,
'profiling' => TRUE,
),
);
Daha önceden database yani veritabanı için modülümüzü yüklemiştik. İşte şimdi veritabanı için gerekli olan ayarları tanıtıyoruz. Type kısmından da anlayacağınız gibi Kohana mysql dışında da pek çok veritabanına bağlanabiliyor. Bu kısım çok önemli değil, dosyayı gerektiği gibi ayarlamanız yeterli. Unutmadan veritabanı şeklimiz;

Model Kısmı; ornek.php
Not; Bu dosya application\classes\model altında bulunmalıdır!
<?php defined('SYSPATH') or die('No direct script access.');
class Model_Ornek extends Model {
public function liste() {
$result = DB::select('id','isim', 'tel')->from('isimler')->as_object()->execute();
return $result;
}
public function create($data) {
DB::insert('isimler', array('isim','tel'))->values(array($data["isim"],$data["tel"]))->execute();
}
public function sil($data) {
foreach($data as $d=>$t) {
DB::delete('isimler')->where('id','=',$t)->execute();
}
}
}
Burada modelimize uygun olarak veritabanı bağlantısı mevcut. Model kısmı bir nevi omurilik gibi. Beyin yani veritabanı ile Controller yani iskelet arasındaki kısım.
Liste fonksiyonun da veritabanından obje halinde tüm verilerimizi çekiyoruz. Sonrasında geri yolluyoruz. İsteyenler Kohana 3 ün veritabanı API sine bakarak farklı şekillerde veriler çekebilirler.
Create altında ise view den controller kısmına oradan da model e yollamış verileri veritabanımıza ekliyoruz.
Sil fonksiyonu içerisinde ise ID verisine göre verilerimizi siliyoruz. Checkbox verisi olduğu için Array yani birden fazla seçim yapılmış olabilir. O yüzden foreach ile tamamını silmek için bir döngü kuruyoruz.
View kısmı; ornek_wi.php
Not; Bu dosya application\views altında bulunmalıdır!
<?php defined('SYSPATH') or die('No direct script access.'); ?>
<?php echo form::open(Url::site('ornek/sil')); ?>
<table width="266" height="236" border="1">
<? foreach($liste as $li): ?>
<tr>
<td><?=$li->isim?></td>
<td><?=$li->tel?></td>
<td><? echo Form::checkbox('boxs[]', $li->id, FALSE); ?></td>
</tr>
<? endforeach; ?>
</table>
<? echo form::submit('submit', 'Sil');
echo form::close(); ?>
<?php echo form::open(Url::site('ornek/ekle'));
echo form::input('isim', '');
echo form::input('tel', '');
echo form::submit('submit', 'Create');
echo form::close();
?>
View yani görüntü kısmındayız. Burası işlemlerin yüzü olarak tanımlanabilir. Yapılan tüm işlemler burada ekrana dökülüyor. Tasarımlarımızın tamamı da burada yer alıyor. Yukarıdaki kodların şöyle bir görüntüsü var;

Kohana altında bulunan form sınıfımızı kullanarak formumuzu açıyoruz. İlk formumuz, verileri silmeye yarayan checkbox lar için. Seçilenleri controller sınıfımızın sil isimli fonksiyonuna gidiyor. Zaten bu yüzden de form::open için bu veriyi veriyoruz. Daha sonra $liste yani verilerimizi ekrana yazdırıyoruz. Gördüğünüz gibi hiçbir veritabanı bağlantısı yok. Bütün değişkenler atanmamış gibi görünüyor. Halbuki bahsettiğimiz gibi bu veriler model altından controller a oradan da buraya geliyor. Son olarak birde verileri eklemek için form açıp, kapatıyoruz.
Şimdi herşey doğru gittiyse tarayıcımıza http://sunucu/kohana/index.php/ yazıyoruz ve ilk uygulamamızı çalıştırıyoruz. Not; Hata verme olasılığı yüksek çünkü veritabanımız boş. Eğer ki phpmyadmin üzerinden birkaç veri eklerseniz foreach döngüsü kurulabilir.
Herkese iyi günler, iyi çalışmalar.
Benzer Yazılar;
- Kohana ve ORM
- [ Php ] Resim Üstüne Yazı Basma ( Gelişmiş )
- Php de Get Metodu ve Kullanımı
- Session İle Yapabileceklerimiz...
- Php ve Mysql ile Not Defteri Yapalım

[...] çağırılarak işlemlerimizi gerçekleştiriyoruz. Tüm kodları tekrar baştan yazmak yerine Kohana 3 ile Telefon Defteri makalesini okursanız ve kodları yerli yerine oturtursanız çok daha iyi olacak. Çünkü oradaki [...]
db ye veri eklense bile hata veriyor.
Hata kodunu yazsaydınız yardımcı olabilirdik. Local sunucu da herhangi bir hata vermeden çalıştı.
Kohana ile ilgili makalelere rastlamak güzel elinize sağlık.
çok sağolun emeğiniz sağlık bir projede bu frameworku kullanmam istendi bu yüzden işime çok yarıyacak
bir makale.
ErrorException [ Recoverable Error ]: Argument 2 passed to Kohana_Controller::__construct() must be an instance of Response, none given, called in C:wampwwwKFkohanaapplicationclassescontrollerornek.php on line 10 and defined
Merhaba,yazınız için çok teşekkürler.Yeni kohana frameworke giriş yapmaya çalışan biriym.tüm adımları uyguladım fakat şöyle bir hata alıyorum:
<?php defined('SYSPATH') or die('No direct script access.');
2
3 class Controller_Ornek extends Controller {
APPPATHclassescontrollerornek.php [ 3 ]
ne yapmam gerekiyor ? yardımcı olursanız sevinirim
construct kısmını şu şekilde düzeltin:
public function __construct(Request $request, Response $response)
{
parent::__construct($request, $response);
$this->model = new Model_Ornek;
$this->view = View::factory('ornek_wi');
}