Controller View Arasında Veri Aktarımı

Merhaba arkadaşlar,
Mobilhanem.com’ da yayınladığımız Codeigniter Dersleri setimize 5. yazımızla devam ediyoruz. Bu dersimizde Controller’ dan View’ e veri aktarma, View’ den Controller’ a veri aktarma ve base_url metodu ve kullanımından bahsedeceğiz.

Controller’ dan View’ e veri aktarma

Veriler Controller’ dan View’ e aktarılırken bir dizi ya da nesne aracılığıyla view yükleme komutu’ nun 2. Parametresi olarak aktarılırlar. View’ e nesne ile veri aktarma konusundan bir sonraki dersimizde detaylı olarak bahsedeceğim.

Controller’ dan View’ e dizi ile veri aktarma

Öncelikle welcome Controller’ ında controllerdan_viewe_dizi_ile_veri_aktarma isminde bir action oluşturdum. Daha sonra application/Views/ klasörü altında controller_view_dizi adında göndereceğimiz verileri kullanacağımız bir .php dosyası (View) oluşturdum.Daha sonra welcome controller’ içinde bulunan controllerdan_viewe_dizi_ile_veri_aktarma action’ unu aşağıdaki gibi doldurdum.

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends CI_Controller {
   public function index()
   {
      $this->load->view('welcome_message');
   }
   public function controllerdan_viewe_dizi_ile_veri_aktarma(){
       $veri=array();

       $veri["isim"]="Hüseyin";
       $veri["soyisim"]="GÖZTOK";
       $veri["yas"]=23;
       $this->load->view("controller_view_dizi",$veri);
    }
}

Yazdığım kodu açıklayacak olursam, index action’ u önceki derste de anlattığım üzere welcome klasörü içinde default olarak gelen action’ dur ve welcome_message adındaki View dosyasının yüklenmesini sağlar, controllerdan_viewe_dizi_ile_veri_aktarma action’ unda ise ilk önce $veri adında tek boyutlu bir dizi oluşturdum ve bu dizinin isim, soyisim ve yas indislerine atamalar yaptım. Daha sonra $veri adındaki bu diziyi View’ e göndermek için View yükleme metoduna 2. Parametre olarak geçtim.

Şimdi ise View’ de bu verileri nasıl kullanacağımızı göreceğiz. application/views altında controller_view_dizi View dosyasının içinde aşağıdaki kodları yazarak Controller’ dan View’ e gönderdiğimiz verileri kullanmış olacağız.

<!doctype html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Controllerdan view' e Dizi İle Veri Aktarma</title>
</head>
<body>
    <ul>
        <li>İsim :<?php echo $isim?></li>
        <li>Soyisim :<?php echo $soyisim?></li>
        <li>Yaş :<?php echo $yas?></li>
    </ul>
</body>
</html>

Yukardaki kodda da gördüğünüz gibi $veri dizisinde gönderdiğimiz dizi elemanlarına View dosyasında indislerini php değişkeni gibi kullanarak ulaşıyoruz. Yukarda yazdığımız kodun çıktısını görebilmek için

http://localhost:8080/Mobilhanem/ControllerViewVeriAktarimi/welcome/controllerdan_viewe_dizi_ile_veri_aktarma

adresine istekte bulunmamız gerekmektedir. Bulunduğumuz isteğin sonucu ise aşağıdaki gibi olacaktır.

Controller' dan View' e Dizi ile Veri Aktarma Resim
Şu ana kadar View’ a tek kişiye ait bilgileri içeren 1 boyutlu bir dizi gönderdik, Şimdi ise View’ e 3 kişiye ait bilgileri gönderebilmek için 2 boyutlu dizi kullanacağız ve bunu View’ e nasıl aktaracağımızı ve View’ de nasıl kullanacağımızı öğreneceğiz. Öncelikle welcome Controller’ ı içinde controllerdan_viewe_dizi_ile_veri_aktarma2 adında bir action oluşturalım. Daha sonra bu Actiondan aktaracağımız verileri göstereceğimiz controller_view_dizi2 adındaki View dosyasını oluşturalım. Yazmamız gereken Action kodu aşağıdaki gibi olmalıdır.

public function controllerdan_viewe_dizi_ile_veri_aktarma2(){
 $veri["egitmenler"]=array(
     array(
         "isim"       =>"Huseyin",
            "soyisim"    =>"GÖZTOK",
            "ders"        =>"Codeigniter Eğitimi"
        ),
        array(
            "isim"       =>"Cahit",
            "soyisim"    =>"İŞLEYEN",
            "ders"       =>"Python Eğitimi"
        ),
        array(
            "isim"      =>"Vehbi",
            "soyisim"   =>"AKDOĞAN",
            "ders"      =>"Php Eğitimi"
        )
    );
 $this->load->view("controller_view_dizi2",$veri);
}

Yazdığımız bu kodu yorumlayacak olursak, $veri adında egitmenler indisine sahip bir 2 boyutlu php dizisi oluşturduk. Oluşturduğumuz bu dizinin içinde eğitmenlere ait tutmak istediğimiz isim, soyisim ve ders gibi bilgiler için indisler oluşturduk ve bu indislere denk gelen atamalar yaptık. Daha sonra bu verileri View’ a aktarabilmek için view yükleme metoduna 2. parametre olarak geçtik. Şimdi ise View’ de dizi elemanlarımızı nasıl listeyeceğimizi göreceğiz. Listeleme işlemi için kullanacağımız controller_view_dizi2 adındaki View dosyasının kodları aşağıdaki gibidir.

<!doctype html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Controllerdan view' e Dizi İle Veri Aktarma</title>
</head>
<body>
<ul>
    <?php foreach ($egitmenler as $egitmen) { ?>
        <li>İsim :<?php echo $egitmen["isim"] ?></li>
        <li>Soyisim :<?php echo $egitmen["soyisim"] ?></li>
        <li>Ders :<?php echo $egitmen["ders"] ?></li>
        <hr>
    <?php } ?>
</ul>
</body>
</html>

Yazdığım kodları yorumlayacak olursam, egitmenler indisini kullanarak oluşturduğumuz diziyi View dosyasında foreach döngüsünü kullanarak bir liste şeklinde ekrana basma işlemini yapmaktayız. Yazdığımız kodun ekran çıktısı işe aşağıdaki gibi olacaktır.

Controller' dan View' e Dizi ile Veri Aktarma Çıktı Resim

View’ den Controller’ a veri aktarmak

View’ den Controller’ a veri aktarma işleminde form’ un method türüne göre (get ve ya post) verileri alabilmek için 2 metod bulunmaktadır. Bu metodlar input sınıfının get ve post metodlarıdır.
Bu konuyu bir örnekle anlatacak olursak, ilk önce bir form sayfası görüntülemek adına bir action oluşturmamız gerekiyor. Bu Action’ un yapacağı tek işlem form sayfasını yüklemek olacak. Fakat ben bu işlemleri karmaşayı önlemek adına farklı bir controller’ da yapmak istiyorum. Oluşturacağım Controller’ ın adı Home olacak. Unutmayın bir php sınıfının Controller olması için CI_Controller adındaki sınıftan kalıtılmış olması gerekmektedir. Şimdi ise oluşturduğum Controller içinde index adında bir action oluşturuyorum. Önceki yazımda da belirttiğim gibi index bir Controller’ da default olarak ilk çalıştırılan metoddur. Eğer bir Controllerda index Action’ u yoksa

http://localhost:8080/Mobilhanem/ControllerViewVeriAktarimi/Home

şeklinde istekte bulunmaya kalkarsak 404 hatası ile karşılaşırız. Şimdi ise oluşturduğumuz index Action’ u ile yükleyeceğimiz View dosyasını Views klasörü altında oluşturmamız gerekiyor. Oluşturacağım View dosyasına form_view adını vereceğim.

Controller’ a Post ile veri aktarma

form_view adlı View’ ın oluşturulması

<!doctype html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Controllerdan View' e veri gönderme</title>
</head>
<body>
<form action="http://localhost:8080/Mobilhanem/ControllerViewVeriAktarimi/Home/post_form" method="post">
    <b>İsim</b> <br><input type="text" name="isim" placeholder="İsim Giriniz ..."> <br>
    <b>Yaş</b> <br><input type="number", name="yas", placeholder="Yaşınızı giriniz ..."> <br>
    <b>Cinsiyet</b><br> Kadın<input type="radio" name="cinsiyet" value="0"> Erkek <input type="radio" name="cinsiyet" value="1">
    <br>
    <button type="submit">Gönder</button>
</form>
</body>
</html>

Verileri ilk olarak controller’ a post ederek göndereceğiz. Bu yüzden form elementinin method özelliğiniz post olarak belirledim. Action olarak ta Home controller’ ının post_form adında Action’ unun belirledim, post_form adında bir Action’ unumuz yok fakat bu birazdan Controller içinde oluşturacağız. Şimdi ise butona basıldığında post edilen verilerin aktarılacağı post_form Action’ unu Home Controller içinde yazarak devam edelim.

Home Controller

<?php
class Home extends CI_Controller
{

    public function index(){
         $this->load->view("form_view");
    }

    public function post_form(){
        $isim =$this->input->post("isim");
        $yas =$this->input->post("yas");
        $cinsiyet =$this->input->post("cinsiyet")==1? "Erkek":"Kadın";

        echo "İsminiz :".$isim."<br>"
            ."Yaşınız :".$yas."<br>"
            ."Cinsiyet :".$cinsiyet;
    }
}

Post edilen verileri controller tarafında alırken input sınıfının post metodunu kullanırız. Yukarda da görüldüğü üzere isim, yaş cinsiyet değerleri alınırken $this-input->post kullanılmıştır. Post methodunun aldığı parametre ise değeri alınacak olan html elementinin name özelliğidir. Şimdi

http://localhost:8080/Mobilhanem/ControllerViewVeriAktarimi/Home/index

adresine gidip formumuzu görelim ve bu form aracılığıyla form verilerini post etme işlemini gerçekleştirip verilerimizin sayfada nasıl gösterildiğini inceleyelim. http://localhost:8080/Mobilhanem/ControllerViewVeriAktarimi/Home/index adresine gittiğimizde karşılaşacağımız sayfa aşağıdaki gibi olacaktır.

Form View Sayfası

Bu sayfadaki formu doldurup gönder butonuna tıkladığımızda ise karşılaşacağımız sayfa

Post İşlemi Çıktı

Controller’ a Get ile veri aktarma

Get ile veri aktarma ile Post ile veri aktarma arasında pek bir fark yoktur. Bu işlem için yine index Action’ u tarafından yüklenen form_view View dosyası kullanılabilir. Bu dosyada yapmanız gereken değişiklikler form elementinin method özelliğini get olarak değiştirmeniz ve action özelliğini de

http://localhost:8080/Mobilhanem/ControllerViewVeriAktarimi/Home/get_form

düzenlemeniz olacaktır. Home controller’ da is get_form adında bir Action oluşturalım ve bu Action’ un da kodu aşağıdaki gibi olsun.

public function get_form(){
    $isim =$this->input->get("isim");
    $yas =$this->input->get("yas");
    $cinsiyet =$this->input->get("cinsiyet")==1? "Erkek":"Kadın";

    echo "İsminiz :".$isim."<br>"
        ."Yaşınız :".$yas."<br>"
        ."Cinsiyet :".$cinsiyet;
}

Bu işlemlerden sonra form görünümünde bir fark olmayacak fakat form Controller’ a gönderildiğinde url’ de post işlemine göre bir fark olacak bu da form verilerinin url’ de gözükmesidir. Bu işlemden sonra karşılşacağınız sayfa çıktısı aşağıdaki gibi olacaktır.Get İşlemi Çıktı

Base_url kullanımı

Şimdiye kadar yazdığımız kodlarda birşey dikkatinizi çekmiş olabilir bu da form elementinin action özelliğinin değerinin uzun oluşu. Bu her ne kadar basit egzersiz çalışmalarınızda sizi yormasa da projeniz büyüdükçe form sayısı arttıkça, yönlendirmelerde, css ve js dosyaları’ nın sayfalarda yüklenme işlemlerinde yazacağınız url’ i kısaltarak sizi oldukça rahatlatacak bir metod vardır ve bu metodun ismi de base_url’ dir. Yazımızın devamında base_url nasıl kullanılır bundan bahsedeceğiz.

Öncelikle projemize ait url’ de sabit olan kısmı belirleyip bunu base url olarak atamamız gerekmektedir. Bizim url’ imizde sabit olan kısım

http://localhost:8080/Mobilhanem/ControllerViewVeriAktarimi/

şeklindedir. Base url’ i alan adı olarak düşünebilirsiniz ve biz de localde çalıştığımızdan base url’ imiz bu şekildedir. Şimdi application klasörü altından config.php dosyasını açarak dosya içinde bulunan

$config['base_url'] = '';

satırını

$config['base_url'] = 'http://localhost:8080/Mobilhanem/ControllerViewVeriAktarimi/';

Şeklinde düzenleyerek base url’ imizi atamış olacağız. Bu işlemden sonra base_url metodunu kullanmamız için önümüzde tek bir engel kaldı o da application altında bulunan autoload.php dosyası içinde bulunan

$autoload['helper'] = array();

satırını

$autoload['helper'] = array(“url”);

şeklinde düzenleyerek base_url metodunu projenizde kullanmaya başlayabilirsiniz.

Base_url Metodu ile Formlarımızı Düzenleyelim

<!doctype html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Controllerdan View' e veri gönderme</title>
</head>
<body>
<form action="<?php echo base_url("Home/post_form")?>" method="post">
    <b>İsim</b> <br><input type="text" name="isim" placeholder="İsim Giriniz ..."> <br>
    <b>Yaş</b> <br><input type="number", name="yas", placeholder="Yaşınızı giriniz ..."> <br>
    <b>Cinsiyet</b><br> Kadın<input type="radio" name="cinsiyet" value="0"> Erkek <input type="radio" name="cinsiyet" value="1">
    <br>
    <button type="submit">Gönder</button>
</form>
</body>
</html>

Form elementine ait action özelliğini düzenledikten sonra işlev olarak hiçbir farklılık kalmamakla birlikte base_url metodunu kullanmadan önceki kalabalık ortadan kayboldu.

Codeigniter Dersleri eğitim setinin 5. yazısını burada noktalıyorum. Bu yazımızda Controller’ dan View’ e veri aktarma, View’ den Controller’ a veri aktarma ve base_url metodu ve kullanımı gibi konulardan bahsettik. Konu ile ilgili sorularınızı Mobilhanem Soru&Cevap bölümünden sorabilirsiniz. Bir sonraki derste serimize Codeigniter’ ı tanımaya Active Record ile veritabanı işlemleri ile devam edeceğiz.

Tüm Codeigniter Dersleri‘ ne buradan ulaşabilirsiniz.

10

Hüseyin Göztok

Yapı Kredi - Yazılım Mühendisi - Erciyes Üniversitesi (Lisans) 2013 - 2018

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?