Pertanyaan yang sering diajukan
From PRADO Wiki
Apakah PRADO mempunyai lapisan abstraksi database?
Tidak dalam versi 3.0.x. Dukungan DB lengkap akan disediakan mulai v3.1, yang menyertakan lapisan abstraksi DB serta komponen dan kontrol DB. Akan tetapi, anda dapat menggunakan salah satu dari banyak libari abstraksi database PHP yang sudah ada.
Apa perbedaan antara Page dan Template?
Langsung ke pokok masalah, keduanya berbeda konsep dalam PRADO dan tidak benar untuk perbandingan. Kontrol misalnya, komponen yang mampu menyajikan dan berinteraksi dengan pengguna, dapat mempunyai template guna membantu mengatur tata letak penyajiannya. Sebuah page adalah jenis khusus atas kontrol yang dapat diminta secara langsung oleh pengguna-akhir, sementara kontrol lain diatur oleh sebuah halaman.
Halaman
- harus mempunyai template (file .page)
- tidak memerlukan kelas halaman dan standar ke TPage jika tidak ada yang ditetapkan
- membolehkan kelas halaman, tapi harus memperluas TPage
- TPage adalah subkelas dari TTemplateControl
Kontrol Non-halaman
- harus mempunyai kelas kontrol
- dapat memiliki template terkait (file .tpl) jika kelas kontrol memperluas TTemplateControl
Apa perbedaan antara modul dan layanan?
Secara singkat, ketika sebuah permintaan datang, permitnaan ditempatkan melalui sebuah layanan (biasanya TPageService), yang menangani permintaan via mmodul (biasanya THttp* dan TPage).
Modul menerapkan antarmuka IModule. Modul adalah librari "di belakang layar" bagi aplikasi. Diantara aturan-aturan lainnya, modul menyediakan komponen "model" dengan pola MVC (jika MVC adalah pola desain yang sedang digunakan).
Layanan menerapkan antarmuka IService. Layanan menjembatani antara aplikasi dan pengguna. Kapan sasja pengguna mengirimkan permintaan ke aplikasi PRADO, ia meneruskannya ke sebuah layanan. Kebanyakan aplikasi bergantung secara eksklusif pada TPageService dan tidak mengimplementasikan yang lainnya.
Bagaimana saya membuat link ke halaman lain?
Karena skema URL dapat berubah, para pengembang tidak seharusnya menggunakan link eksplisit ke halaman lain dalam sebuah proyek PRADO. Para pengembang harus menggunakan abstraksi yang ditawarkan dengan constructUrl():
<a href="<%= $this->Service->constructUrl('Path.keHalaman') %>">NamaLink</a>
Jika variabel dilibatkan:
<a href="<%= $this->Service->constructUrl('Path.keHalaman', GetVarsArray) %>">LinkName</a>
Apa perbedaan antara TPage->onInit() dan TPage->onLoad()?
Ini sebenarnya adalah pertanyaan "Properti apa (termasuk nilai) yang harus dimiliki kontrol?" relatif terhadap masa hidup halaman. PRADO mengambil properti kontrol dalam lima tahap, masing-masing mengganti yang terakhir:
- Data Template.
- Set data dalam onInit: Ini adalah di mana anda harus menginisialisasi komponen. Bagian inisialisasi adalah penyatuan data. Sebagai contoh, pada sebuah halaman yang berisi kotak daftar negara, anda ingin mengisinya dengan negara pada tahap ini. TListControl (dan semua turunan TDropDownList, TCheckBoxList, dll), TDataGrid, TDataList, dan TRepeater harus diinisialisasi di sini.
- Data ViewState.
- Data POST. Jika kontrol anda belum diinisialisasi pada titik ini, akan menghasilkan hal yang aneh.
- Set data dalam onLoad: Jika anda ingin mengganti nilai POST, anda harus melakukannya di sini.
Jika tidak ada data yang mempengaruhi pengambilan kontrol dalam tahap ViewState dan POST, onInit serta onLoad berfungsi sama.
Apa perbedaan antara tag Databind dan Expression?
Tag Expression dijalankan pada tahap PreRender, di mana kontrol seperti TRepeater dijalankan.
Tag Databind mengambil nilainya di setiap turunan databind (misalnya setiap kali TRepeater mengambil item data). Tidak ada bedanya penggunaan dengan tag Databind yang akan benerja dengan benar tetapi berpotensi menurunkan performansi aplikasi.
Bagaimana saya menghindari nilai pengkodean langsung seperti nama situs?
Teknik ini dipakai dalam aplikasi demo PradoBlog.
- Buat file konfigurasi terpisah, Name.xml:
<?xml version="1.0" encoding="utf-8"?> <parameters> <parameter id="ConfigKey" value="ConfigValue" /> </parameters>
- Link ke file konfigurasi terpisah dari application.xml di bawah <application> <modules>: (Perhatikan kurangnya ekstensi .xml.)
<module class="System.Util.TParameterModule" ParameterFile="Application.Path.toSettings.Name" />
- Gunakan nilai konfigurasi
- ...dalam template:
<%$ ConfigKey %> - ...dalam kelas:
$this->Application->Parameters['ConfigKey']
- ...dalam template:
Bagaimana saya menentukan pengguna yang masuk saat ini?
Ini akan mengembalikan sebuah obyek yang mengimplementasikan IUser:
$this->getApplication()->getUser()
Bagaimana saya menggunakan librari PEAR dengan PRADO?
Librari PEAR tergantung pada akarnya dalam path, maka jika path PHP anda tidak menyertakan libari PEAR, ubah itu dalam php.ini atau dengan menambahkan variabel 'include_path' via ini_set().
Akan tetapi, ini tidak menghentikan inklusi gaya-PRADO. Tambahkan application.xml berikut di bawah <paths>:
<alias id="Pear" path="/path/ke/pear" />
...dan sertakan libarai PEAR menggunakan Prado::using().
Apa yang harus saya lakukan untuk menyebarkan pada sebuah webfarm atau cluster?
Seperti dalam setiap aplikasi web, anda perlu memastikan bahwa sesi tidak disimpan menggunakan penyimpanan sesi standar PHP. Gunakan database atau memcache atau yang lebih baik yang dibutuhkan.
Sebagai tambahan, PRADO membuat kunci validasi dan enkripsi secara acak, dan informasi itu disimpan pada basis per server. Ini berarti bahwa anda akan mendapatkan kesalahan korupsi pagestate (diantara yang lainnya) ketika prang beralih server. Untuk membetulkan masalah ini, anda dapat menyetel kunci anda sendiri melalui file application.xml seperti ini:
<module id="security" class="TSecurityManager"
EncryptionKey="someKeyHere" ValidationKey="anotherKeyHere" />

