Membuat Halaman NewUser

Halaman NewUser disediakan untuk pengguna administrator guna membuat akun pengguna baru. Ini perlu menampilkan sebuah formulir yang mengumpulkan informasi mengenai akun pengguna baru. Berdasarkan definisi database, kita akan perlu mengumpulkan informasi berikut:

Kita membuat dua file protected/pages/users/NewUser.page dan protected/pages/users/NewUser.php masing-masing untuk menyimpan template halaman dan kelas halaman.

Membuat Template Halaman

Berdasarkan pada analisis di atas, kita menulis template halaman seperti berikut:

<%@ Title="My Blog - New User" %> <com:TContent ID="Main">

Create New User

Username: <com:TRequiredFieldValidator ControlToValidate="Username" ErrorMessage="Please provide a username." Display="Dynamic" /> <com:TCustomValidator ControlToValidate="Username" ErrorMessage="Sorry, your username is taken by someone else. Please choose another username." OnServerValidate="checkUsername" Display="Dynamic" />
<com:TTextBox ID="Username" />
Password: <com:TRequiredFieldValidator ControlToValidate="Password" ErrorMessage="Please provide a password." Display="Dynamic" />
<com:TTextBox ID="Password" TextMode="Password" />
Re-type Password: <com:TCompareValidator ControlToValidate="Password" ControlToCompare="Password2" ErrorMessage="Your password entries did not match." Display="Dynamic" />
<com:TTextBox ID="Password2" TextMode="Password" />
Email Address: <com:TRequiredFieldValidator ControlToValidate="Email" ErrorMessage="Please provide your email address." Display="Dynamic" /> <com:TEmailAddressValidator ControlToValidate="Email" ErrorMessage="You entered an invalid email address." Display="Dynamic" />
<com:TTextBox ID="Email" />
Role:
<com:TDropDownList ID="Role"> <com:TListItem Text="Normal User" Value="0" /> <com:TListItem Text="Administrator" Value="1" /> </com:TDropDownList>
First Name:
<com:TTextBox ID="FirstName" />
Last Name:
<com:TTextBox ID="LastName" />
<com:TButton Text="Create" OnClick="createButtonClicked" /> </com:TContent>

Template tidak jauh berbeda dari template Contact dan halaman LoginUser. Sebagian besar terdiri dari kotak teks dan validator. Beberapa kotak teks, seperti nama pengguna, dikaitkan dengan dua validator karena keterlibatan aturan multipel validasi.

Membuat Kelas Halaman

Dari template halaman di atas, kita melihat bahwa kita perlu untuk menulis sebuah kelas halaman yang mengimplementasikan dua pengendali event: checkUsername() (disertakan ke event validator kustom OnServerValidate) dan createButtonClicked() (disertakan ke event tombol "create" OnClick). Oleh karena itu, kita menulis kelas halaman seperti berikut:

class NewUser extends TPage { /** * Memeriksa apakah nama pengguna sudah ada dalam database. * Metode ini merespon ke event OnServerValidate pada validator kustom nama pengguna. * @param mixed event sender * @param mixed event parameter */ public function checkUsername($sender,$param) { // benar jika nama pengguna tidak ditemukan dalam database $param->IsValid=UserRecord::finder()->findByPk($this->Username->Text)===null; } /** * Membuat akun pengguna baru jika semua input benar. * Metode ini merespon ke event OnClick pada tombol "create". * @param mixed event sender * @param mixed event parameter */ public function createButtonClicked($sender,$param) { if($this->IsValid) // ketika semua validasi sukses { // populasikan obyek UserRecord dengan input pengguna $userRecord=new UserRecord; $userRecord->username=$this->Username->Text; $userRecord->password=$this->Password->Text; $userRecord->email=$this->Email->Text; $userRecord->role=(int)$this->Role->SelectedValue; $userRecord->first_name=$this->FirstName->Text; $userRecord->last_name=$this->LastName->Text; // simpan database melalui mekanisme Rekaman Aktif $userRecord->save(); // alihkan browser ke homepage $this->Response->redirect($this->Service->DefaultPageUrl); } } }

Dalam kode di atas, memanggil save() akan menyisipkan baris baru dalam tabel users. Fitur intuitif ini dihidupkan oleh Rekaman Aktif.

Untuk memudahkan, nama pengguna dalam sistem blg kita adalah tidak sensitif-huruf! Dalam banyak sistem praktis, nama pengguna mungkin perlu sensitif-huruf. Maka penanganan khusus perlu dibuat saat pembuatan akun pengguna baru dan juga melakukan otentikasi. Juga, ruang kosong dalam nama pengguna perlu dipotong ketika membuat akun baru dengan itu.

Pengujian

Untuk menguji halaman NewUser, kunjungi URL http://hostname/blog/index.php?page=users.NewUser. Kita akan melihat output halaman berikut. Coba masukan informasi berbeda ke dalam formulir dan lihat bagaimana input divalidasi. Jika semua aturan validasi memuaskan, kita akan mengharapkan akun pengguna dibuat dan browser dialihkan ke homepage.

Menambahkan Pemeriksaan Perijinan

Selama pengujian, Anda mungkin bertanya: apakah halaman NewUser seharusnya hanya bisa diakses oleh pengguna administrator? Ya, ini disebut otorisasi. Sekarang kami menjelaskan bagaimana kita menambahkan pemeriksaan perijinan ini ke halaman NewUser.

Cara langsung pada pemeriksaan perijinan adalah dalam kelas halaman di mana kita memeriksa apakah $this->User->IsAdmin adalah true, dan jika tidak, kita mengalihkan browser ke halaman LoginUser.

PRADO menawarkan cara lebih sistematis terhadap pemeriksaan perijinan akses halaman. Untuk melakukannyaTo , kita perlu menggunakan konfigurasi halaman. Membuat sebuah file protected/pages/users/config.xml dengan konten seperti berikut:

Konfigurasi halaman berisi aturan otorisasi yang berlaku untuk halaman di bawah direktori protected/pages/users. Konfigurasi di atas terbaca bahwa NewUser bisa diakses oleh para pengguna dengan aturan admin (lihat BlogUser.createUser() untuk alasan kenapa kata "admin"), dan menolak akses anonim (users="?" berarti pengguna tamu) untuk seluruh halaman di bawah direktori.

Sekarang jika kita mengunjungi halaman NewUser sebagai seorang tamu, kita akan dialihkan ke halaman LoginUser terlebih dahulu. Jika kita masuk dengan sukses, kita akan mengalihkan kembali ke halamanNewUser.

Konfigurasi halaman dapat berisi lebih dari satu aturan otorisasi. Sebagai contoh, ia dapat menyertakan modul seperti yang ktia lakukan dalam konfigurasi aplikasi. Untuk aplikasi PRADO, setiap direktori halaman dapat mempunyai konfigurasi halaman yang berlaku bagi halaman dalam direktori yang sama dan seluruh subdirektorinya.