Posts Tagged ‘ doctrine sebagai plugin codeigniter ’

Codeigniter untuk pemula, eps 3

M dari pattern MVC pada Codeigniter akan dibantu oleh Doctrine. Referensi bagus ada di sini, jika sudah melihat link tersebut, hampir tidak ada alasan untuk meneruskan membaca tulisan yang saya aing buat. Jika berkeras meneruskan membaca tulisan ini, mari kita mulai. Hahaha.

  1. Pertama mari kita ubah dulu berkas config.php di ci/application/config/.
    //seperti nama variabelnya, base_url adalah nilai statis
    //yang berisi path utama situs/aplikasi web kita
    $config['base_url']	= "http://localhost/ci/";
    
  2. Download doctrine, pada saat tulisan ini dibuat, doctrine stabil yang tersedia adalah versi 1.2.3.
  3. Ekstrak berkas Doctrine-1.2.3.tgz, akan didapatkan folder Doctrine-1.2.3 dan berkas package.xml dalam folder hasil ekstraksi. Dalam folder Doctrine-1.2.3 terdapat folder Doctrine dan 2 berkas, LICENSE dan Doctrine.php
  4. Buat folder plugins/doctrine/lib/ di ci/application/.
  5. Salin atau potong folder Doctrine dan berkas Doctrine.php dari folder hasil ekstraksi ke ci/application/plugins/doctrine/lib/.
  6. Buat berkas doctrine_pi.php di ci/application/plugins/.
     <?php
    // system/application/plugins/doctrine_pi.php
    
    // load Doctrine library
    require_once APPPATH.'/plugins/doctrine/lib/Doctrine.php';
    
    // load database configuration from CodeIgniter
    require_once APPPATH.'/config/database.php';
    
    // this will allow Doctrine to load Model classes automatically
    spl_autoload_register(array('Doctrine', 'autoload'));
    
    // we load our database connections into Doctrine_Manager
    // this loop allows us to use multiple connections later on
    foreach ($db as $connection_name => $db_values) {
    
    	// first we must convert to dsn format
    	$dsn = $db[$connection_name]['dbdriver'] .
    		'://' . $db[$connection_name]['username'] .
    		':' . $db[$connection_name]['password'].
    		'@' . $db[$connection_name]['hostname'] .
    		'/' . $db[$connection_name]['database'];
    
    	Doctrine_Manager::connection($dsn,$connection_name);
    }
    
    // CodeIgniter's Model class needs to be loaded
    require_once BASEPATH.'/libraries/Model.php';
    
    // telling Doctrine where our models are located
    Doctrine::loadModels(APPPATH.'/models');
    
    // (OPTIONAL) CONFIGURATION BELOW
    
    // this will allow us to use "mutators"
    Doctrine_Manager::getInstance()->setAttribute(
    	Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true);
    
    // this sets all table columns to notnull and unsigned (for ints) by default
    Doctrine_Manager::getInstance()->setAttribute(
    	Doctrine::ATTR_DEFAULT_COLUMN_OPTIONS,
    	array('notnull' => true, 'unsigned' => true));
    
    // set the default primary key to be named 'id', integer, 4 bytes
    Doctrine_Manager::getInstance()->setAttribute(
    	Doctrine::ATTR_DEFAULT_IDENTIFIER_OPTIONS,
    	array('name' => 'id', 'type' => 'integer', 'length' => 4));
    
    

    berkas tersebut aing salin dari sini.

  7. Buat tabel dengan nama ci di Mysql.
  8. Ubah berkas database.php di folder ci/application/config/.
    $db['default']['hostname'] = "localhost";
    $db['default']['username'] = "ci";
    $db['default']['password'] = "ci";
    $db['default']['database'] = "ci";
    $db['default']['dbdriver'] = "mysql";
    
  9. Ubah berkas autoload.php dalam folder ci/application/config/.
    //dengan ini, CI akan meload doctrine sebagai plugin
    $autoload['plugin'] = array('doctrine');
    

Oke, sampai di sini kita sudah siap untuk mulai membuat Model.

  1. Buat berkas user.php di folder ci/application/models/.
    <?php
    //membuat kelas User yang merupakan perluasan
    //dari Doctrine_Record
    class User extends Doctrine_Record{
        //membuat fungsi untuk mendefinisikan tabel
        public function  setTableDefinition() {
            //tabel ini, akan bernama 'user' secara default,
            //memiliki kolom 'username', 'password', dan 'real_name'
            $this->hasColumn('username', 'string', 255);
            $this->hasColumn('password', 'string', 255);
            $this->hasColumn('real_name', 'string', 255);
        }
    }
    ?>
    
  2. Buat berkas controller dengan nama pengguna.php di ci/application/controllers/.
    <?php
    
    //membuat kelas Pengguna
    class Pengguna extends Controller{
        //membuat fungsi tambah yang berguna untuk menambah
        //pengguna (menginput data dalam tabel user)
        function tambah(){
            //mendefinisikan variabel $p dengan perilaku
            //seperti kelas User
            $p = new User();
            //variabel $p cukup merujuk pada nama kolom
            //yang telah didefinisikan oleh kelas User untuk
            //mengisi nilainya
            $p->username = 'ci';
            $p->password = 'ci';
            $p->real_name = 'codeigniter';
            //simpan ke dalam tabel
            $p->save();
    
            //tampilkan pesan
            echo "Silahkan cek database ci di Mysql";
        }
    }
    
    ?>
    
  3. Buat tabel user pada Mysql. Kolom yang tersedia adalah id, username, password, dan real_name

    CI Eps 3 Img 1

    Membuat Tabel user

  4. Buka http://localhost/ci/pengguna/tambah

    CI Eps 2 Img 2

    Mengakses Controller pengguna

  5. Periksa tabel user pada Mysql. 

    CI Eps 3 Img 3

    Sukses Menambah Satu Baris Data pada Tabel user

Yap, sukses kita menggunakan doctrine sebagai alat bantu kita. Sejauh ini sepertinya tidak ada kendala yang berarti dalam penggunaan doctrine. Tapi menurut ini, doctrine tidak bisa digunakan jika PHP yang kita gunakan adalah versi 4 (dan di bawahnya).

Oke, sepertinya cukup sekian dulu mengenai doctrinenya, happy coding.

Iklan

Codeigniter untuk pemula, eps 2

Setelah sukses, semoga, dengan instalasi Codeigniter (CI), maka sekarang saatnya menjajal framework ini. Oh, ya, sebagai bantuan, saya aing menggunakan IDE Netbeans.

Pertama kita akan membuat controller dan view yang akan menampilkan hello world.

  1. Buat berkas hello.php di ci/application/controllers/.
    <?php
    
    //membuat kelas Hello
    class Hello extends Controller{
        //membuat fungsi default yang akan dipanggil kelas ini
        public function index(){
            //buat variabel $vars yang merupakan array
            //dimana key text berisi teks "Halo Dunia"
            $vars['text'] = "Halo Dunia";
            //controller ini meload tampilan dari file
            //hello_view.php yang terdapat dalam folder
            //ci/application/views/, yang digunakan cukup
            //nama berkas, tidak perlu ekstensi berkas.
            //dalam menampilkan file hello_view, variabel
            //$vars diikutsertakan
            $this->load->view('hello_view', $vars);
        }
    
    ?>
  2. Buat berkas hello_view.php di ci/application/views/.
    <?php
    
    //tampilkan variabel $text
    //variabel ini berasal dari $vars['text']
    //yang terdapat dalam controller hello.php
    echo $text;
    
    ?>
    
  3. Buka alamat http://localhost/ci/index.php/hello melalui browser Anda. Hasilnya kurang lebih seperti ini.
    CI Eps 2 Img 1

    Hello World

     

Lihat, kita butuh minimal dua berkas hanya untuk menampilkan hello world. Dengan metode lama, aing hanya butuh satu berkas, katakanlah, hello.php saja. Tapi dengan pattern MVC, aing bisa memisahkan antara bagaimana mengelola yang akan ditampilkan, dan bagaimana menampilkan. Terhindar dari spaghetti code dan segala macam masalah turunannya, bisa membuat template tampilan, dan pada akhirnya terasa betul memangkas waktu membuat situs/aplikasi dengan PHP. Mari kita lanjutkan.

Kedua, buat url situs/aplikasi kita lebih cantik dengan menghilangkan index.php.

  1. Buat berkas .htaccess di ci/.
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /ci/index.php/$1 [L]
    
        ErrorDocument 404 /ci/index.php
    
  2. Buka berkas config.php di ci/application/config/. Rubah baris yang berisi:
    $config['index_page'] = "index.php";

    Menjadi:

    $config['index_page'] = "";
  3. Melalui browser, buka http://localhost/ci/hello.

    CI Eps 2 Img 2

    Tanpa index.php

Lebih rapi kan, url kita sekarang? Hoho.

Mengenai controller, kita dapat membuat banyak fungsi di dalamnya. Misalnya selain fungsi index, kita ingin menambahkan fungsi fungsi1 yang dapat diakses melalui http://localhost/ci/hello/fungsi1/, hello adalah nama controller, fungsi1 adalah nama fungsi.

  1. Tambahkan ini ke dalam controller hello (ci/application/controllers/hello.php).
        //membuat fungsi default yang akan dipanggil kelas ini
        public function index(){
            //bagian ini tidak diubah
        }
    
        //membuat fungsi fungsi1
        public function fungsi1($parameter1, $parameter2){
            //membuat variabel $vars dengan key param1
            //yang berisi sama dengan variabel $parameter1 yang
            //diinput oleh user
            $vars['param1'] = $parameter1;
            //membuat variabel $vars dengan key param2
            //yang isinya sama dengan nilai variabel $parameter2
            $vars['param2'] = $parameter2;
            //fungsi fungsi1 meload tampilan dari file
            //hello_fungsi1_view.php variabel $vars diikutsertakan
            //fungsi fungsi1 bisa saja meload tampilan dari file
            //hello_view.php, sama seperti fungsi index, namun kali
            //ini kita gunakan saja file yang berbeda
            $this->load->view('hello_fungsi1_view', $vars);
        }
  2. Buat berkas file hello_fungsi1_view.php di ci/application/views/.
    //tampilkan variabel $param1
    echo 'Parameter 1: ' . $param1 . '<br />';
    //tampilkan variabel $param2
    echo 'Parameter 2: ' . $param2;
    
    ?>
  3. Buka http://localhost/ci/hello/fungsi1.
    CI Eps 2 Img 3

    Fungsi1

    Ups, sepertinya ada yang keliru, Missing argument dan Undefined variable. Oh, ya, fungsi1 membutuhkan 2 parameter, parameter1 dan parameter2.

        //membuat fungsi fungsi1
        public function fungsi1($parameter1, $parameter2){
    
  4. Buka http://localhost/ci/hello/fungsi1/peremeter1/peremeter2.

    CI Eps 2 Img 4

    Fungsi1 dengan 2 Parameter

Yap, url yang benar adalah http://localhost/ci/hello/fungsi1/peremeter1/peremeter2. Sekarang kita bisa menerka, hello adalah nama controller, fungsi1 adalah nama fungsi yang terdapat dalam controller hello, peremeter1 adalah nilai parameter pertama yang dibutuhkan oleh fungsi fungsi1, peremeter2 adalah nilai parameter kedua yang dibutuhkan oleh fungsi fungsi1. Untuk menyiasati ketiadaan parameter yang diberikan oleh pengguna, kita dapat mendefinisikan nilai parameter pada controller.

  1. Ubah controller hello.php.
        //membuat fungsi fungsi1
        public function fungsi1($parameter1 = 0, $parameter2 = 'pemereter2'){
    
  2. Buka http://localhost/ci/hello/fungsi1.

    CI Eps 2 Img 5

    Fungsi1 Setelah Diperbaharui

  3. Sekarang kita coba memasukkan parameter pada url, buka http://localhost/ci/hello/fungsi1/1001.
    CI Eps 2 Img 6

    Fungsi1 dengan Nilai Parameter1

    Kita memasukkan nilai 1001 sebagai nilai parameter1, sedang parameter2 karena tidak diberi nilai, tetap menampilkan nilai default yang kita tentukan dalam controller.

Sepertinya cukup sekian episode 2 dari perkenalan kita dengan Codeigniter. Saran dan kritik sangat diharapkan. Episode depan sepertinya akan berisi tentang M dari pattern MVC, semoga.