Kemas projek dan langkah seterusnya
Semak struktur fail projek inventori, tukar logik kepada komponen CFC yang boleh diguna semula, dan ikut senarai semak keselamatan sebelum ke pelayan sebenar.

Kandungan
Kemas projek dan langkah seterusnya
Empat belas bab kemudian, bermula daripada bab pengenalan, anda mempunyai aplikasi yang berfungsi: senarai produk, borang, log masuk, gerakan stok dan laporan.
Bab ini tidak menambah ciri baharu. Ia mengemas apa yang sudah ada, dan menunjukkan arah selepas ini.
Apa yang anda sudah bina
| Bab | Yang ditambah |
|---|---|
| 00 | Gambaran projek dan persediaan |
| 01 | Halaman CFML pertama |
| 02 | Pemasangan Lucee |
| 03 | Nilai, keputusan dan gelung |
| 04 | Pangkalan data dan cfquery |
| 05 | Include dan jadual HTML |
| 06 | Borang, pengesahan dan cfqueryparam |
| 07 | Ubah dan arkib |
| 08 | Log masuk dan sesi |
| 09 | Carian, penapis dan halaman |
| 10 | Gerakan stok dan transaksi |
| 11 | Laporan dan CSV |
| 12 | XSS, CSRF, peranan dan had cubaan |
| 13 | Kemas dan langkah seterusnya |
Itu bukan projek mainan. Ia mempunyai kira-kira 660 baris kod dalam 17 fail, empat jadual pangkalan data, dan setiap ciri telah diuji pada enjin Lucee yang sama seperti pelayan produksi.
Struktur fail
Selepas semua bab, folder projek anda sepatutnya kelihatan seperti ini:
C:\inventori\
├── Application.cfc
├── index.cfm
├── log-masuk.cfm
├── logkeluar.cfm
├── produk-tambah.cfm
├── produk-ubah.cfm
├── produk-arkib.cfm
├── stok.cfm
├── laporan.cfm
├── laporan-csv.cfm
├── components\
│ └── Harga.cfc
└── includes\
├── atas.cfm
├── bawah.cfm
├── csrf.cfm
└── semakan-login.cfm

Dua fail pada senarai itu mungkin belum wujud dalam projek anda: components\Harga.cfc dan laporan-csv.cfm. Yang pertama diperkenalkan di bawah, yang kedua dalam bab laporan.
Kalau fail anda bertaburan di luar folder ini, pindahkan sekarang. Struktur yang jelas lebih penting daripada ciri tambahan.
Langkah pertama ke arah komponen
Setakat ini, setiap halaman mengandungi logiknya sendiri. Apabila satu pengiraan digunakan di dua tempat, anda menyalinnya, dan salinan itu akan berpisah perlahan-lahan.
CFML menyelesaikan masalah ini dengan komponen, iaitu fail .cfc yang mengandungi fungsi boleh guna semula.
Cipta folder components, kemudian fail components/Harga.cfc:
component {
function denganCukai(numeric harga, numeric kadar = 0.06) {
return numberFormat(arguments.harga * (1 + arguments.kadar), "0.00");
}
}
Kemudian gunakannya dalam mana-mana halaman:
<cfset h = new components.Harga()>
<cfoutput>#h.denganCukai(18.50)#</cfoutput>
Saya menguji fail ini pada rig: denganCukai(18.50) memulangkan 19.61, dan denganCukai(100, 0) memulangkan 100.00.
Perhatikan dua perkara. Parameter kedua mempunyai nilai lalai, jadi pemanggil boleh meninggalkannya. Dan di dalam fungsi, parameter dibaca melalui arguments, bukan namanya terus. Itu peraturan CFML yang akan anda temui semula apabila menulis komponen.
Mengapa ini penting? Kerana cukai, diskaun dan format harga akan digunakan di banyak halaman, sama seperti transaksi stok dalam bab gerakan stok yang kini menjadi satu corak berulang. Satu fungsi bermakna satu tempat untuk dibetulkan apabila kadar berubah.
Ujian automatik
Apabila logik berpindah ke komponen, ia boleh diuji tanpa membuka pelayar. Lucee menyokong TestBox, yang membolehkan anda menulis ujian seperti:
describe("Harga", function() {
it("menambah cukai 6 peratus", function() {
var h = new components.Harga();
expect(h.denganCukai(100)).toBe("106.00");
});
});
Ujian ini dijalankan dalam terminal atau pelayar, dan ia memberitahu anda dengan segera apabila perubahan kod memecahkan sesuatu.
Untuk projek sebesar ini, ujian automatik belum wajib. Apabila anda menambah diskaun, cukai berlapis dan pembundaran, ia berbaloi.
Senarai semak sebelum ke pelayan sebenar
Aplikasi yang berjalan di WampServer belum bersedia untuk pelanggan. Sebelum memindahkannya, semak perkara berikut.
| Perkara | Mengapa |
|---|---|
| Kata laluan pangkalan data bukan kosong | root tanpa kata laluan hanya selamat di komputer sendiri |
rahsia123 ditukar | Kata laluan contoh tidak boleh digunakan di pelayan |
| HTTPS diaktifkan | Cookie sesi boleh dicuri melalui HTTP |
Fail cipta-admin.cfm dipadam | Ia membolehkan sesiapa mencipta akaun |
Application.cfc tidak mendedahkan kredensial | Jangan simpan kata laluan dalam kod yang dikongsi |
| Sandaran pangkalan data dibuat | phpMyAdmin menyediakan pilihan Export untuk setiap pangkalan data |
Folder includes tidak boleh disenaraikan | Uji dengan membuka includes/ dalam pelayar |
Baris terakhir itu sering dilupakan. Sesetengah pelayan membenarkan senarai folder, dan pelawat boleh melihat nama fail dalaman anda.
Memindahkan data
Aplikasi tanpa data tidak berguna. Dua langkah memindahkan data daripada WampServer ke pelayan:
- Dalam phpMyAdmin, pilih pangkalan data
inventori, kemudian eksport sebagai SQL. - Pada pelayan baharu, cipta pangkalan data kosong dan import fail SQL itu.
Selepas itu, kemas kini Application.cfc dengan host, nama pangkalan data, pengguna dan kata laluan yang baharu. Uji halaman senarai sebelum memberikan akses kepada sesiapa.
Jangan sekali-kali mengimport fail SQL ke pangkalan data yang sudah mempunyai data. Ia akan mencipta jadual pendua atau gagal separuh jalan. Uji pada pangkalan data kosong dahulu.
Satu peringatan tentang data pelanggan
Apabila aplikasi ini menyimpan nama pelanggan, nombor telefon atau alamat, tanggungjawab anda berubah. Data itu bukan milik anda, dan ia perlu dilindungi.
Dua perkara asas: jangan simpan apa yang tidak diperlukan, dan jangan biarkan data itu keluar daripada pelayan tanpa sebab. Senarai semak keselamatan dalam bab keselamatan menutup bahagian teknikal, tetapi keputusan tentang data ialah keputusan anda.
Tiga arah selepas ini
Pertama, pelbagai cawangan. Apabila kedai membuka cawangan kedua, stok perlu dipecahkan mengikut lokasi. Itu bermakna lajur lokasi_id pada gerakan_stok, dan laporan yang menjumlahkan mengikut lokasi.
Kedua, pesanan pelanggan. Gerakan keluar sekarang mewakili jualan, tetapi tiada rekod siapa yang membeli. Jadual pesanan dan pesanan_item akan menyambungkan stok kepada pelanggan sebenar.
Ketiga, antara muka yang lebih baik. Semua halaman kini menggunakan HTML biasa. Apabila anda selesa, tambah sedikit JavaScript untuk carian langsung tanpa memuat semula halaman.
Tiada satu pun daripada ini perlu dilakukan hari ini. Setiap satu menambah kerumitan, dan setiap satu sepatutnya ditambah hanya apabila ada keperluan sebenar.
Perkara yang saya pelajari menulis siri ini
Tiga perkara berulang kali muncul, dan ketiga-tiganya berbaloi diingati.
Pertama, tanda # dalam CFML mempunyai dua makna. Di luar <cfoutput>, ia dicetak sebagai teks. Di dalamnya, ia memulakan ungkapan. Warna CSS seperti #b45309 akan memecahkan halaman. Saya terserempak dengan masalah ini lima kali.
Kedua, ujian pada enjin sebenar menemui perkara yang tidak dapat dilihat dalam bacaan kod. driver: "mysql" kelihatan betul tetapi tidak mendaftarkan datasource. > kelihatan selamat tetapi dihantar kepada MySQL sebagai teks.
Ketiga, kod yang berfungsi belum tentu selamat. Ujian yang baik bukan sahaja bertanya "adakah ia berjalan", tetapi juga "apa yang berlaku apabila seseorang memberi input yang tidak dijangka". Halaman senarai berfungsi selama sebelas bab sebelum saya menemui bahawa ia boleh menjalankan skrip daripada nama produk.
Soalan Lazim
Perlukah saya menukar semua halaman kepada komponen sekarang? Tidak. Tukar apabila satu logik digunakan di dua tempat atau lebih. Sebelum itu, salinan kecil lebih mudah difahami.
Boleh saya menggunakan aplikasi ini untuk kedai sebenar? Boleh, selepas senarai semak di atas dipatuhi dan data diuji dengan beberapa pengguna. Mulakan dengan satu pengguna, kemudian tambah.
Apa jadi kalau saya mahu menambah medan baharu pada produk? Tambah lajur melalui phpMyAdmin, kemudian tambah medan itu pada borang dan query. Jangan lupa kemas kini senarai dan laporan.
Di mana saya boleh belajar lebih lanjut? Dokumentasi Lucee ialah tempat pertama. Selepas itu, baca kod projek sumber terbuka dan tulis semula bahagian kecil untuk memahami keputusannya.
Adakah siri ini akan disambung? Bab tambahan akan ditambah apabila ada keperluan sebenar yang diuji. Setiap bab mesti melalui ujian yang sama seperti yang anda baca.
Sumber
- Dokumentasi Lucee: docs.lucee.org
- TestBox: testbox.ortusbooks.com
- Rujukan komponen CFML: docs.lucee.org/reference/types/component.html
- OWASP, senarai semak keselamatan: owasp.org/www-project-top-ten/