Jumat, 04 Juli 2014

Membuat CRUD dengan Zend DB pada Zend Framework 2 (Part I)

Sebelumnya, saya telah menulis cara untuk menginstall Zend Framework2, membuat Module, Penggunaan form, dan penggunaan filter untuk validation pada Zend Framework 2. untuk itu, sudah saatnya kita masuk pada tahap CRUD (Create Read Update Delete), dimana nanti form yang telah kita buat seperti tahap sebelumnya bisa menyimpan ke database. untuk hal seperti itu kita menggunakan Zend DB, untuk caranya ikuti langkah berikut ini :
  1. Buat database anda terlebih dahulu.
  2. Buat tabel database anda seperti berikut :
    CREATE TABLE user (
    id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    name TEXT NOT NULL,
    email VARCHAR(255) NOT NULL,
    password TEXT NOT NULL,
    PRIMARY KEY (id),
    UNIQUE INDEX idx_email(email)
    );
  3. Buatlah Koneksi antara Zend  Framework dan database dengan cara masuk pada folder <Application_Home>/config/autoload/global.php
  4. Buatlah Source code seperti berikut yang berisikan tentang nama databse, user database, dan password database  anda seperti berikut ini :
    return array(
    'db' => array(
    'driver' => 'Pdo',
    'dsn' => 'mysql:dbname=yourdatabasename;host=localhost',
    'username' => 'yourusernamedatabase,
    'password' => 'yourpassworddatabase',
    'driver_options' => array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
    ),
    ),
    'service_manager' => array(
    'factories' => array(
    'Zend\Db\Adapter\Adapter'
    => 'Zend\Db\Adapter\AdapterServiceFactory',
    ),
    ),
    );
  5. Buatlah model baru untuk class User . Buat di src/Users/Model/User.php  dengan source code dibawah ini :
    <?php
    namespace Users\Model;
    class User
    {
    public
    public
    public
    public
    $id;
    $name;
    $email;
    $password;
    public function setPassword($clear_password)
    {
    $this->password = md5($clear_password);
    }
    function exchangeArray($data)
    {
    $this->name = (isset($data['name'])) ? $data['name']
    : null;
    $this->email
    =
    (isset($data['email']))
    ?
    $data['email'] : null;
    if (isset($data["password"]))
    {
    $this->setPassword($data["password"]);
    }
    }
    }
  6. Buatlah tabel baru untuk User. buat di src/Users/Model/UserTable.php dengan source code berikut ini :
    <?php
    namespace Users\Model;
    use Zend\Db\Adapter\Adapter;
    use Zend\Db\ResultSet\ResultSet;
    use Zend\Db\TableGateway\TableGateway;
    class UserTable
    {
    protected $tableGateway;
    public
    function
    __construct(TableGateway
    $tableGateway)
    {
    $this->tableGateway = $tableGateway;
    }
    public function saveUser(User $user)

    {
    $data = array(
    'email'=>$user->email,
    'name'=>$user->name,
    'password'=>$user->password,
    );
    $id = (int)$user->id;
    if ($id == 0){
    $this->tableGateway->insert($data);
    }else{
    if ($this->getUser($id)){
    $this->tableGateway->update($data,
    array('id'=>$id));
    }else{
    throw new \Exception('User ID does not
    exist');
    }
    }
    }
    public function getUser($id)
    {
    $id = (int) $id;
    $rowset
    =
    $this->tableGateway-
    >select(array('id'=>$id));
    $row = $rowset->current();
    if (!$row) {
    throw new \Exception("Could not find row
    $id");
    }
    return $row;
    }
    }
  7. Sekarang buka RegisterController.php dan tambahkan source code berikut dibawah sekali :
    protected function createUser(array $data)
    {
    $sm = $this->getServiceLocator();
    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
    $resultSetPrototype
    =
    new
    \Zend\Db\ResultSet\ResultSet();
    $resultSetPrototype->setArrayObjectPrototype(new
    \Users\Model\User);
    $tableGateway
    =
    new
    \Zend\Db\TableGateway\TableGateway('user',
    $dbAdapter, null, $resultSetPrototype);
    $user = new user();
    $user->exchangeArray($data);
    $userTable = new UserTable($tableGateway);
    $userTable->saveUser($user);
    return true;
    }
  8. Sekarang tambahkan source yang berfungsi untuk membuat user pada RegisterController.php yang berada pada processAction() dan masukan source berikut sesudah source redirecting page pada RegisterController.php ini :
    // Create user
    $this->createUser($form->getData());
  9. Sekarang buka browser dan masuk ke halaman form http://localhost/zendskeletonapplication/public/user/register dan isikan datanya lalu save maka akan pergi ke halaman berikut :
  10. Setelah itu coba cek databasenya, apakah data yang dimasukna telah dimasukan telah terinput pada database? jika telah terinputkan didalam databse maka untuk tahap Create (CRUD part I) selesai..
Untuk PDF bisa didownload disini.

Tidak ada komentar:

Posting Komentar