WHAT'S NEW?


Yii 1 - Function pada Controller (Yii – Controller)


Sebuah controller adalah kelas instan dari CController atau kelas turunan CController. Controller dibuat oleh aplikasi saat user melakukan permintaan. Ketika berjalan, controller melakukan aksi (action) yang diminta, biasanya memerlukan model dan membuat view yang sesuai. Sebuah aksi, dalam bentuk paling sederhana sebenarnya hanyalah metode kelas yang namanya dimulai dengan kata ACTION. Adapun hasil dari generator CRUD dari TblPegawai seperti pada penjelasan berikut:

1. Class ActiveRecord

class TblPegawaiController extends Controller

{

    public $layout='//layouts/column2';

Class TblPegawaiController extends Controller menciptakan kelas TblPegawaiController dengan mengacu kelas perluasan kelas controller pada CController yang telah disediakan Yii. public $layout =’//layout/column2′; variable $ layout menggunakan jenis layout tampilan dua kolom pada /view/layout/column2.

2. Function filters()

public function filters()

    {
        return array(
            'accessControl', // perform access control for CRUD operations
            'postOnly + delete', // we only allow deletion via POST request
        );
    }
Fungsi yang menerapan pembatasan akses dari operasional CRUD dan hanya mengizinkan perintah hapus lewat permintaan POST. Filter kontrol akses merupakan skema awal otorisasi yang memeriksa apakah pengguna saat ini dapat melakukan aksi controller yang diminta. Otorisasi didasarkan pada nama pengguna, alamat IP klien dan jenis permintaan. Ini disediakan sebagai filter bernama “accessControl”. Untuk mengontrol akses terhadap aksi dalam controller, kita menginstalasi filter kontrol akses dengan mengoverride CController::filters (lihat Filter untuk lebih jelasnya mengenai instalasi filter).

3. Function accessRules()

public function accessRules()
    {
        return array(
            array('allow',  // allow all users to perform 'index' and 'view' actions
                'actions'=>array('index','view'),
                'users'=>array('*'),
            ),
            array('allow', // allow authenticated user to perform 'create' and 'update' actions
                'actions'=>array('create','update'),
                'users'=>array('@'),
            ),
            array('allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions'=>array('admin','delete'),
                'users'=>array('admin'),
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }
Yii memiliki dua cara untuk mengatur autorisasi. Yang pertama adalah dengan menggunakan Access Control Filter dan yang satu lagi dengan menggunakan Role-Based Access Control. Fungsi ini mengatur mengizinkan atau melarang user (autorisasi) menjalankan fungsi Access Control Filter atau aksi (action) yang ada pada controller tersebut. Adapun secara default Yii menyediakan akses ke actionIndex(), actionViews, actionCreate, actionDelete(), actionUpdate(), actionAdmin(). Sistem ini berbasis “allow” alias mengizinkan karena menulis siapa yang boleh mengakses.
  • action adalah nama action pada controller bersangkutan.
  • user adalah user siapa saja yang boleh akses, kita boleh langsung tulis username user (username yang dipakai ketika login). Selain nama juga bisa berupa simbol yang terdiri dari: * : semua jenis user, baik yang tidak login(guest) maupun yang sudah login(authenticated user). ? : hanya user yang tidak login @ : hanya user yang sudah login
  • expression, memungkinkan kita memasukkan coding PHP.

4. Function actionIndex()

    public function actionIndex()
    {
        $dataProvider=new CActiveDataProvider('TblPegawai');
        $this->render('index',array(
            'dataProvider'=>$dataProvider,
        ));
    }
Fungsi ini aksi yang menjalankan perintah me-render ke view file index.php dengan menyertakan parameter CActiveDataProvider. CActiveDataProvider menyediakan data dalam objek ActiveRecord dari kelas/model (dalam contoh TblPegawai.php) dan menggunakan metode findAll untuk mengambil data dari database.

5. Function actionIndex()

    public function actionView($id)
    {
        $this->render('view',array(
            'model'=>$this->loadModel($id),
        ));
    }
Aksi ini menjalankan yang perintah actionView dengan nilai parameter variable $id dalam fungsi ini me-render ke file view.php dengan mengirim parameter lewat perintah $this->render(‘view’,’model’=>loadModel($id)). Hasil tampilan adalah salah satu rekaman yang ditunjuk lewat variable $id, lewat file view.php.
       Fungsi actionView() menjalankan melalui fungsi render dengan memanggil file view.php, dengan parameter model berisi atribut yang di filter lewat fungsi loadModel($id). Kemudian fungsi loadModel($id) mengarah ke rekaman yang akan ditampilkan lewat view.php.

6. Function actionCreate()

    public function actionCreate()
    {
        $model=new TblPegawai;
        if(isset($_POST['TblPegawai']))
        {
            $model->attributes=$_POST['TblPegawai'];
            if($model->save())
                $this->redirect(array('view','id'=>$model->nip));
        }
        $this->render('create',array(
            'model'=>$model,
        ));
    }
  • $model = new TblPegawai : membuat instan kelas dari kelas TblPegawai
  • $this->performAjaxValidation($model) : memeriksa isian lewat fungsi performAjaxValidation()
  • if(isset($_POST[‘TblPegawai’])) : akan bernilai true, jika variabe kelas terbentuk semua isian benar. Jika hasilnya benar maka akan melanjutkan proses penyimpanan dengan perntah $model->save
  • $model->attributes=$_POST[‘TblPegawai’] : menyalin atribut dan isinnya kelas TblPegawai ke kelas $model.
  • if($model->save()) : proses menyimpan berhasil, akan dilanjutkan ke pernyataan selanjutnya
  • $this->redirect(array(‘view’,’id’=>$model->nip)); menjalankan view.php mengembalikan nilai dan menunjuk nip
  • $this->render(‘create’,array(‘model’=>$model,)), : memberikan ke file create.php dengan parameter model=>$model

7. Function actionAdmin()

    public function actionAdmin()
    {
        $model=new TblPegawai('search');
        $model->unsetAttributes();  // clear any default values
        if(isset($_GET['TblPegawai']))
            $model->attributes=$_GET['TblPegawai'];
        $this->render('admin',array(
            'model'=>$model,
        ));
    }
  • $model = new TblPegawai(‘search’); : menciptakan kelas instan $model turunandari kelas TblPegawai, ‘search’ adalah menyertakan nilai awal nilai search
  • $model->unsetAttributes();  : menjalankan fungsi mengosongkan isi atribut
  • if(isset($_GET[‘TblPegawai’])) : digunakan agar pembacaan atribut dan nilai dalam model TblPegawai sudah ada
  • $model->attributes=$_GET[‘TblPegawai’] : mengambil atribut dan nilai model TblPegawai ke variable $model

8. Function actionUpdate()

   public function actionUpdate($id)
    {
        $model=$this->loadModel($id);
        if(isset($_POST['TblPegawai']))
        {
            $model->attributes=$_POST['TblPegawai'];
            if($model->save())
                $this->redirect(array('view','id'=>$model->nip));
        }
        $this->render('update',array(
            'model'=>$model,
        ));
    }
Suatu aksi yang menjalankan proses memperbarui rekaman. Pertama biasanya scara default data ditampilkan dengan grid dan ditunjuk dengan icon lalu url akan mengarah ke Http://localhost/myweb/index.php?r=tblPegawai/update&id=10001. Secara proses sama dengan function actionCreate() bedanya sebelum disimpan, memanggil rekaman yang akan diubah dengan parameter $id , lewat fungsi loadModel($id). Kemudian fungsi loadModel ($id) akan menunjuk satu rekaman yang akan dirubah.
  • $this->performAjaxValidation($model); : melakukan validasi yang diambil dari isian formulir secara interaktif, dengan parameter $model;
  • if(isset($_POST[‘TblPegawai’]))  : melakukan pengujian variabel, akan bernilai true jika variable kelas terbentuk semua isian benar
  • $model->attributes=$_POST[‘TblPegawai’]; : menyalin atribut kelas TblPegawai ke variable $model dengan menggunakan properti atributes

9. Function actionAdmin()

    public function actionDelete($id)
    {
        $this->loadModel($id)->delete();
        if(!isset($_GET['ajax']))
            $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
    }
  • $this->loadModel($id)->delete(); : menjalankan method $this->loadModel($id) dengan parameter $id bernilai nomor pegawai yang dicari, kemudian fungsi loadModel($id) akan mengarah ke rekaman yang akan dihapus, dilanjutkan ke ->delete() untuk metode dalam menghapus record
  • $this->redirect(isset($_POST[‘returnUrl’])? $_POST [‘returnUrl’] : array(‘admin’)); : mengembalikan dan menjalankan ke url: http://localhost/myweb/index.php?r=tblPegawai/admin

10. Function actionUpdate()

    public function loadModel($id)
    {
        $model=TblPegawai::model()->findByPk($id);
        if($model===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $model;
    }
Fungsi loadModel dignakan untuk memindakan salah satu rekaman berdasarkan pencarian dengan menggunakan parameter $id, setelah nilai $id ditemukan dalam tabel (dengan primary key), nilai atribut kelas pegawai akan disalin ke variabel $model. Fungsi ini digunakan untuk operasi pengubahan yang ada di actionUpdate($id), dan penghapusan daam actionDelete($id).
  • $model=TblPegawai::model()->findByPk($id); : menyalin satu rekaman ke variabel $model dengan menjalankan metode findByPk($id), untuk mencari rekaman berdasarkan kunci primer/utama dalam tabel.
  • throw new CHttpException(404, ‘The requested page does no exist.’); return $model; : Apabila data dari $model tidak ditemukan maka akan dimunculkan pesan kesalahan 404

11. Function performAjaxValidation($model)

    protected function performAjaxValidation($model)
    {
        if(isset($_POST['ajax']) && $_POST['ajax']==='tbl-pegawai-form')
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }
Fungsi ini secara interaktif untuk memvalidasi dari isian sebelum melakukan penyimpanan.
Sumber :
Badiyanto S.Kom, Buku Pintar framework Yii, 2013, Mediakom, Yogyakarta

0 komentar:

Posting Komentar