>> [Seminar] [Kohana: A Ringan PHP Framework]
[Brandon Liu] [Harvard University]
[Ini adalah CS50.] [CS50.TV]
>> Hi everyone. Nama saya adalah Brandon.
Saya junior di sini di perguruan tinggi melakukan ilmu komputer, dan hari ini kita akan berbicara tentang
Kohana, yang merupakan framework pengembangan web PHP.
Hari ini akan menjadi coding seminar hidup,
jadi saya pada dasarnya akan menghabiskan 5-10 menit menjelaskan apa Kohana adalah,
dan kemudian aku benar-benar akan membangun sebuah blog super sederhana
untuk Anda di sini benar-benar dari awal.
Kita akan men-download kode dari situs Kohana,
dan kita akan mulai membangun sebuah blog, dan mudah-mudahan itu akan menjadi sangat instruktif,
karena Anda akan melihat mungkin mungkin aku akan membuat beberapa kesalahan,
dan Anda akan melihat saya pulih dari mereka,
atau Anda akan melihat proses pemikiran saya sebagai saya membangun melalui blog ini,
dan sementara itu, Anda juga akan mendapatkan akrab dengan kerangka itu sendiri.
Mudah-mudahan itu akan menjadi latihan yang sangat instruktif.
>> Pertama, apa sebenarnya adalah suatu kerangka kerja?
Jika Anda telah mengambil CS50 sejauh ini, Anda belum benar-benar bekerja dengan
kerangka kerja lagi, dan hal ini adalah ini.
Anda mungkin telah melakukan 1 pengembangan web pset sudah,
dan katakanlah Anda terus membangun website dan tetap membangun website.
Anda akan mulai melihat beberapa hal.
Hal pertama yang akan Anda perhatikan adalah bahwa Anda mungkin melakukan hal yang sama
berulang-ulang sepanjang waktu,
hal-hal seperti membersihkan input data pengguna,
hal-hal seperti mengatur file Anda dengan cara tertentu.
Hal lain yang juga mungkin akan melihat adalah bahwa kode Anda
mungkin mulai menjadi sangat, sangat berantakan,
dan Anda dapat meninggalkan itu berantakan dan hanya memiliki waktu yang sangat sulit merawatnya,
atau Anda dapat mulai untuk struktur kode Anda dan membuatnya modular
dengan cara tertentu untuk membuatnya lebih maintainable.
>> Sinilah kerangka web pada dasarnya masuk
Orang-orang yang telah membangun banyak situs, mereka mengatakan,
"Kami tidak perlu mengulang ini setiap kali kita membangun sebuah website."
"Kenapa kita tidak hanya membuat paket yang melakukan semua hal-hal ini untuk Anda
setiap kali Anda ingin membangun sebuah website? "
Dan sehingga ketika Anda membuat sebuah website baru,
Anda hanya fokus pada apa sebenarnya situs web tertentu ini adalah tentang.
Anda tidak perlu mengulang semua berbagai konfigurasi
dan pemisahan kode dan menulis ulang kode
bahwa Anda seringkali harus lakukan ketika Anda membuat website.
Idenya adalah bahwa kerangka memungkinkan Anda untuk menulis kode-tingkat yang lebih tinggi
tanpa harus khawatir tentang rincian tingkat rendah.
Sebuah detail-tingkat yang lebih rendah mungkin sesuatu seperti
berurusan dengan membersihkan input data pengguna.
Itu adalah sesuatu yang Anda tidak harus benar-benar perlu khawatir tentang.
Anda harus fokus pada apa yang alokasi web Anda sebenarnya tentang.
Hal ini menghilangkan banyak kode boilerplate.
Ini adalah sebuah arsitektur untuk proyek Anda.
>> Yang paling populer akan menjadi Model-View-Controller,
yang aku akan berbicara tentang dalam satu detik.
Dan banyak kali kerangka kerja ini mewujudkan satu set prosedur,
aturan, dan praktik terbaik untuk Anda untuk menggunakan
sehingga ketika Anda mengadopsi kerangka web
Anda harus menulis kode Anda dengan cara tertentu,
dan itu umumnya disepakati seperangkat prinsip
oleh masyarakat yang secara umum diterima menjadi
cara yang baik untuk menulis kode.
Itu membuat kode Anda lebih dipertahankan, lebih bermanfaat,
seterusnya dan sebagainya.
Dan akhirnya, hal yang saya ingin menekankan tentang kerangka kerja
dibandingkan perpustakaan adalah ide tentang inversi kontrol, dan hal ini adalah ini.
Perbedaan antara perpustakaan dan kerangka kerja adalah bahwa dengan perpustakaan
Anda masih menulis program utama,
dan Anda semacam memanggil perpustakaan
dan menyerukan kepada perpustakaan untuk melakukan sesuatu untuk Anda.
Perbedaan antara perpustakaan dan kerangka kerja
adalah bahwa kerangka dimulai dengan kontrol,
dan memanggil kode Anda,
sehingga Anda dapat menganggapnya sebagai - ini adalah mengapa itu disebut kerangka -
framework menyediakan frame ini dan struktur untuk kode Anda,
dan Anda mengisi lubang,
dan ini akan menjadi lebih jelas dalam satu detik
ketika Anda melihat saya mulai menulis kode dalam konteks kerangka.
Anda akan melihat bahwa aku mengisi kekosongan,
dan kerangka kerja adalah jenis mengendalikan semua bagian yang bergerak,
dan saya harus menempatkan potongan-potongan di tempat yang tepat.
>> Hari ini kita akan berbicara tentang Kohana,
yang merupakan salah satu dari banyak kerangka kerja PHP.
Ada kerangka kerja web, dan ada yang di hampir setiap bahasa tunggal,
dan aku memilih Kohana Kohana karena ini bisa dibilang
dan umumnya diakui sebagai kerangka PHP yang paling mudah untuk mengambil.
Ini adalah yang paling ringan.
Ada yang lain di luar sana yang datang dengan banyak, lebih banyak fitur,
tapi mereka cenderung lebih sulit untuk mengambil.
Dan akhirnya, Kohana menggunakan arsitektur MVC.
Ini cukup ringan bahwa kita benar-benar dapat membangun sebuah proyek
di sini tepat di depan mata Anda, dan Anda dapat cukup banyak
mengikutinya cukup mudah.
>> Apa arsitektur MVC?
Ini adalah singkatan dari Model-View-Controller,
dan mungkin jika Anda berpikir tentang kode Anda telah menulis sejauh ini
untuk beberapa psets pengembangan web Anda
Anda mungkin dapat melihat beberapa dari ini, tapi biasanya ketika Anda mulai menulis
aplikasi web yang lebih kompleks,
pembagian antara 3 segmen ini menjadi lebih dan lebih jelas.
Aku ditata MVC sini semacam sebagai stack,
dan sering Anda akan mendengar orang berbicara tentang tumpukan dalam pengembangan web,
dan ini adalah untuk menggambarkan gagasan bahwa
setiap lapisan, setiap komponen benar-benar mencoba untuk hanya berkomunikasi
antara 2 komponen lainnya.
Seseorang mengakses website Anda sebagai klien atau browser.
Mereka berinteraksi dengan program anda melalui kode tampilan.
Tampilan kode berinteraksi dengan controller.
Controller berinteraksi dengan model,
dan model yang berinteraksi dengan database SQL.
Dan tidak ada hopping di antara jika Anda menulis kode Anda dengan benar.
>> Apa hal-hal ini dilakukan?
Model ini pada dasarnya adalah bagian dari kode yang berhubungan dengan data Anda.
Segala sesuatu yang berhubungan dengan database Anda, dengan benda-benda yang Anda simpan,
atau mengambil benda-benda dalam database,
yang semua ditangani oleh model.
Mungkin Anda memiliki objek dalam database Anda.
Kita akan menciptakan sebuah model yang berkaitan dengan posting,
jadi posting mungkin memiliki beberapa atribut untuk itu.
Anda mungkin memiliki fungsi sekitar mereka menyimpan tulisan atau mengambil posting
atau penyaringan posting dan seterusnya dan sebagainya,
dan itu semua kode yang ditangani oleh model.
Controller adalah semacam logika aplikasi,
dan banyak hal yang berbeda bisa masuk logika aplikasi.
Jika Anda sedang berbicara dengan API yang berbeda,
yang mungkin di mana Anda sedang berhadapan dengan logika aplikasi.
Jika Anda mencoba untuk memiliki untuk membawa data dari beberapa model yang berbeda
dan harus menggabungkan mereka dalam beberapa cara, yang sering dapat ditangani oleh controller.
Sebagai contoh, di Facebook, jika Anda teman seseorang,
maka mungkin bahwa tindakan membangun hubungan yang
dapat dilakukan oleh controller.
>> Dan akhirnya, pandangan adalah kode yang menghasilkan apa yang sebenarnya Anda lihat.
Banyak kali saya pikir di psets CS50
mereka tidak benar-benar mendorong kalian untuk memisahkan 3 hal.
Anda mungkin akan memiliki besar, file yang panjang ini di mana di bagian atas
Anda membuat beberapa permintaan SQL dan mungkin melakukan beberapa proses
data Anda diambil dari database,
dan kemudian Anda memiliki semua HTML Anda di bagian bawah.
Dan Anda mungkin menemukan bahwa ketika Anda membuat semakin banyak halaman
bahwa Anda akan memiliki beberapa kode pengulangan, dan juga,
masalahnya file Anda akan benar-benar besar dan panjang
dan menjadi berat untuk mengelola.
Alasan mengapa MVC begitu dihormati
dibuat untuk sejumlah alasan.
Hal pertama adalah sesuatu yang disebut pemisahan keprihatinan
yang merupakan gagasan bahwa ketika Anda memiliki -
idealnya 1 bagian dari kode harus melakukan 1 hal dan melakukannya dengan sangat baik,
dan Anda tidak harus menggabungkan potongan-potongan kode yang melakukan hal-hal yang berbeda.
Misalnya, melihat kode dan kode model,
mereka tidak benar-benar harus berhubungan.
Mereka tidak harus berada dalam file yang sama, sehingga ketika Anda bisa, memisahkan mereka
sehingga mudah untuk mempertahankan.
>> Hal lain adalah penggunaan kembali kode.
Anda mungkin menemukan diri Anda menulis query SQL yang sama atau melakukan
pertanyaan serupa yang dapat disarikan ke dalam 1 fungsi,
dan itulah ide di balik model dan controller,
setelah itu dalam fungsi yang terpisah yang dapat Anda menggunakan kembali di tempat yang berbeda dalam proyek Anda.
Dan akhirnya, yang terkait dengan pengeringan kode Anda,
atau tidak mengulangi diri sendiri, jangan ulangi sendiri.
Hal ini sangat dipahami dalam pembangunan.
Setiap kali Anda bisa, Anda tidak ingin mengulang diri sendiri, karena jika Anda mengulangi diri sendiri,
itu jauh lebih mahal untuk mempertahankan.
Jika Anda ingin mengubah 1 hal, Anda harus mengubahnya di mana-mana,
dan yang mengarah ke bug, dan itu mengerikan.
>> Baiklah.
Semua pertanyaan sejauh ini tentang Kohana sama sekali?
Besar.
Sekarang kita akan menyelam ke dalam sesi coding hidup,
dan mudah-mudahan semuanya berjalan dengan baik.
Saya akan dasarnya membangun website ini
pada salah satu server remote saya, dan dengan cara itu kalian juga bisa
melihat situs web dan mengakses situs web,
dan juga lingkungan yang lebih baik daripada Configured mesin remote saya,
karena itu berjalan Linux bukan OS X.
Kita benar-benar akan mulai.
KohanaFramework.org.
Aku akan men-download kode dari situs web.
Aku akan copy alamat link,
pergi ke server saya, download,
dan aku akan mengeluarkannya.
>> [Student] Apa terbesar Anda dapat membuat teks?
[Brandon Liu] Apakah itu lebih baik?
[Student] Apakah itu bisa dilakukan? >> [Brandon Liu] Ya, itu bagus.
Saya download file ZIP dan membuka ritsleting itu ke sebuah direktori bernama Kohana,
dan kita akan mengubah nama yang CS50-Kohana,
dan mari kita masuk
Mengagumkan.
Disini anda melihat sekelompok file yang berbeda.
Sebagian besar dari Anda dapat mengabaikan - kita tidak akan pergi melalui setiap file yang ada di sini
karena keterbatasan waktu kita,
tetapi umumnya ketika Anda menginstal Kohana, hal pertama yang Anda lakukan
adalah Anda pergi ke direktori,
dan Anda pada dasarnya akan melakukan beberapa tes lingkungan dan yang lainnya
untuk memastikan lingkungan anda benar diatur untuk menjalankan Kohana
dan memastikan bahwa semuanya baik-baik saja.
Anda dapat melihat banyak hal berlalu, tetapi umumnya Anda selalu mengalami 1 masalah ini
di mana ia mengeluh bahwa beberapa direktori tidak dapat ditulisi,
dan itu karena dari beberapa izin.
Saya tidak tahu berapa banyak kalian telah belajar tentang hak izin berkas di CS50,
tetapi jika Anda melakukan pengembangan web, Anda akan mengalami masalah ini banyak.
Aku akan membuatnya dapat ditulis
dan saya pikir saya juga harus - ada kita pergi.
>> Oke, jadi sekarang Anda dapat melihat semuanya berlalu,
dan sekarang akan memberitahu Anda untuk mengubah nama file install.php.
Aku akan memindahkan file install.php untuk installed.php,
dan jika saya refresh,
itu memberi saya beberapa error, dan ini adalah di mana debugging masuk
Ini adalah di mana Anda dapat melihat apa yang sebenarnya akan terjadi.
Masalahnya, secara default, Kohana mengasumsikan bahwa
proyek Anda di direktori akar domain Anda,
jadi itu mengharapkan Anda untuk menjadi di demo.brandonkliu.com.
Kita harus tahu itu bahwa itu benar-benar dalam subfolder.
Ini dalam subfolder yang disebut CS50 Kohana.
Masalahnya adalah, itu salah mengartikan CS50-Kohana
sebagai sesuatu yang lain, yang saya akan menjelaskan kepada Anda dalam hitungan detik.
Tapi saya harus memberitahu Anda bahwa adalah sesuatu yang diharapkan.
Apa yang akan kita lakukan adalah kita akan masuk ke folder ini disebut bootstrap.php,
yang merupakan folder konfigurasi di mana banyak hal yang berbeda ditetapkan.
Saya membuka bahwa sampai.
Maka mungkin salah satu hal pertama yang saya akan lakukan adalah mengubah zona waktu.
>> Dan kemudian mari kita lihat.
Aha! Tepat di sini.
Ada banyak ucapan konfigurasi yang berbeda di sini,
tapi yang saya cari adalah hal ini disebut URL dasar,
dan secara default saya mendapatkannya diatur ke Kohana,
tapi aku akan mengubah itu untuk CS50-Kohana,
dan saya pikir yang harus memperbaikinya.
Ya, bagus.
Secara default, untuk melihat bahwa itu bekerja, ia mengatakan, "Hello World."
Dari mana datangnya? Bagaimana kita bisa Hello World?
Di mana tepatnya adalah kode yang benar-benar menulis itu?
Untuk memahami itu, saya akan memperkenalkan konsep ini disebut routing.
Hampir semua kerangka web memiliki konsep yang disebut routing,
yang merupakan bagian dari perangkat lunak yang akan memetakan URL tertentu
ke bagian tertentu dari kode dalam kerangka Anda.
Sebagai contoh, jika Anda memiliki beberapa URL dan Anda pergi ke beberapa URL seperti foo.com / blog / semua
lalu apa kerangka yang akan dilakukan - atau setidaknya apa Kohana yang akan dilakukan -
adalah itu akan menemukan kelas yang disebut kontroler blog,
dan itu akan menjalankan fungsi bernama tindakan semua.
Aku tahu aku sedang berbicara tentang kelas dan fungsi,
dan aku tahu kalian belum tercakup kelas dan fungsi
di CS50, tapi untuk saat ini,
Anda bisa memikirkan kelas hanya sebagai kelompok fungsi,
cara pengelompokan fungsi bersama-sama.
Itu benar-benar semua yang perlu Anda ketahui.
>> Sekarang jika kita melihat struktur folder kita,
di dalam folder aplikasi ada folder lain yang disebut kelas,
dan folder lain disebut Controller dan Model.
Jika Anda melihat ke dalam folder Controller,
kita melihat bahwa ada file bernama Welcome,
dan Anda bisa lihat di sini adalah kelas yang disebut Pengendali Selamat datang,
dan ada fungsi yang disebut Aksi Index,
dan apa yang dilakukannya itu menetapkan tubuh respons Anda terhadap Hello World.
Di situlah kode sedang ditulis.
Pertanyaan lain adalah, well, aku tidak pergi ke
bla, bla, bla, / welcome / index.
Bagaimana saya berakhir di sini?
Nah, itu hanya karena
di sini di bagian bawah file bootstrap kita
di mana kita menetapkan rute kami
Anda dapat melihat bahwa mereka menetapkan beberapa default untuk Anda.
Kontroler default adalah Selamat Datang. Aksi baku adalah Index.
Itu sebabnya ketika kita menempatkan apa-apa di sana secara otomatis pergi ke Welcome kontroler
dan Aksi indeks.
>> Semuanya masuk akal sejauh ini?
Sekarang, Anda dapat melakukan lebih dari sekedar pergi ke Pengawas
dan tindakan tertentu.
Anda juga dapat mengirim parameter ke controller.
Hanya sebagai contoh,
Aku akan menambahkan aksi lain untuk kontroler ini untuk menunjukkan Anda.
Mari kita sebut tindakan ini Echo, karena itu akan memberitahu Anda apa pun yang Anda berikan,
dan jadi aku pada dasarnya akan ambil
parameter yang akan dikirim melalui saya ke program routing,
dan seperti yang Anda lihat di sini,
baris ini di sini, Anda dapat melihat bahwa
ini pada dasarnya berarti Anda memiliki controller, dan Anda memiliki /,
dan Anda memiliki tindakan, dan Anda memiliki / yang lain,
dan itu akan menjadi parameter, dan karena kita memiliki nama ID ini
dalam kurung sudut, itu berarti bahwa kita penamaan parameter ID ini.
Kemudian dalam kode controller saya jika saya ingin terus ambil dari parameter itu,
Saya dapat menggunakan kode saya menulis, menemukan parameter bernama ID.
Itulah yang saya lakukan di sini, dan aku akan kembali dan berkata,
"Anda mengatakan" itu.
Dan jika saya pergi ke website kami,
Aku pergi ke cs50-kohana/welcome/echo/Helloooo--
oh, itu benar.
Ada 1 langkah saya ditinggalkan.
Ini adalah bagian dari coding ide hidup.
>> Berikut ini 1 hal. Mari kita lihat.
Jadi biasanya secara default dengan banyak aplikasi web ini
Anda harus menyertakan hal index.php ini di URL Anda,
karena ide tersebut index.php adalah semacam entry point
aplikasi Anda, tapi tentu saja,
itu semacam menjengkelkan harus.
Anda tidak ingin memiliki index.php muncul dalam URL Anda,
dan hampir semua kerangka web luar kotak
memiliki masalah index.php ini,
dan jadi Anda harus mengambil beberapa tindakan untuk dapat menghapus itu.
Dan dalam hal ini,
apa yang akan kita lakukan adalah kita akan menggunakan file bernama htaccess.,
dan ini adalah sesuatu yang khusus untuk web server Apache,
dan dapat melakukan hal-hal seperti menulis ulang URL
dan mengarahkan URL dan seterusnya dan sebagainya,
dan Kohana cukup baik untuk menyediakan file htaccess Template. yang bisa kita gunakan.
>> Seperti yang Anda lihat, ada file sana disebut example.htaccess,
dan kita akan menyalin bahwa untuk htaccess..
Aku akan membuka ini dan mengeditnya,
dan pada dasarnya melakukan banyak hal yang berbeda.
Garis utama Anda mungkin ingin lihat adalah di sini.
Idenya adalah bahwa ini membuat sebuah aturan yang mengatakan,
"Oke, apa pun yang Anda ketik, tambahkan index.php itu."
Anda dapat melihat bahwa.
The. * Singkatan dari apa pun, cocok apa-apa,
dan kemudian bagian kedua adalah index.php / $ 0,
dan $ 0 mengacu pada apa pun yang cocok sebelumnya.
Apakah itu masuk akal?
Tetapi hal yang sangat penting yang saya ingin mengubah adalah mengubah dasar menulis ulang ini,
yang merupakan basis URL.
Ini semacam mengasumsikan di mana Anda bekerja dari.
Aku akan menambahkan CS50 Kohana itu,
dan dengan cara itu jika saya menghapus index.php,
itu harus bekerja, dan aku akan menambahkan beberapa nomor
untuk menunjukkan bahwa itu memang berhasil.
Kedengarannya bagus.
>> Ada pertanyaan sejauh ini?
[Student] Bagaimana bisa tahu untuk membuat 123?
Apakah itu argumen?
Tepat. Anda dapat menganggap itu seperti sebuah argumen.
Tetapi hal yang aneh, meskipun, adalah bahwa cara Kohana melakukannya
adalah mereka tidak melakukannya persis seperti argumen.
Anda harus ambil seperti ini.
Anda harus ambil objek permintaan dan meminta parameter yang bernama ID,
dan bahwa nama ID berasal dari file bootstrap
bahwa saya menunjukkan sebelumnya, dan nama ID adalah pada mereka kurung sudut,
dan itulah bagaimana Anda ambil parameter tersebut.
Mengagumkan.
Ada pertanyaan lain?
Seperti saya katakan, pengendali, mereka menangani logika aplikasi,
jadi itu 1 contoh di mana Anda dapat melihat ltu -
itu sangat dasar, tapi masih logika aplikasi,
ide meraih parameter dan menciptakan string baru
yang mengatakan, "Kau bilang bla," dan kemudian meludah bahwa kembali kepada Anda.
Dan umumnya apa yang Anda lakukan adalah Anda membuat kontroler yang berbeda.
Anda membuat kontroler terpisah untuk bagian yang berbeda dari situs Anda.
>> Hari ini kita akan membuat website yang sangat sederhana,
dan itu akan menjadi sebuah blog yang sangat dasar.
Kita akan membuat controller baru hanya untuk posting di blog.
Tapi kemudian jika saya harus juga menambahkan komentar ke posting blog,
maka saya mungkin akan ingin membuat controller baru bagi mereka komentar.
Jika saya ingin menambah pengguna, saya mungkin akan menambahkan controller baru bagi para pengguna,
dan secara umum, idenya adalah bahwa setiap kali Anda memiliki model baru,
objek data baru yang Anda hadapi,
Anda memiliki pengontrol tunggal untuk itu objek data.
Hari ini kita hanya akan bekerja dengan 1 objek data,
dan itu akan menjadi tulisan,
dan juga Anda bisa memikirkan objek data sesuai dengan tabel.
Umumnya setiap tabel sesuai dengan 1 jenis objek data,
sehingga tabel posting akan memiliki 1 post Model,
yang akan memiliki 1 post yang sesuai dengan controller,
dan sama untuk komentar, yang sama bagi pengguna, dan seterusnya dan sebagainya.
Dan itu adalah aturan umum.
Ada akan menjadi kasus khusus di mana Anda mungkin berbeda dari itu,
tetapi 90% dari waktu itulah apa yang Anda akan lakukan,
dan aku akan menunjukkan kepada Anda bahwa apa yang akan kita lakukan hari ini.
1 konsep yang lebih sebelum kita menyelam kembali ke dalam kode,
ide ini objek pemetaan relasional.
>> Kalian telah melakukan pset pengembangan web,
dan Anda telah melihat bahwa Anda membuat sebuah query SQL,
dan apa pun itu kembali ke Anda adalah baris.
Anda mendapatkan baris ini, dan indeks Anda mereka dengan beberapa nama,
nama kolom dan meja,
dan itulah bagaimana Anda bekerja dengan itu,
dan itu dapat sedikit rumit.
Tapi lebih jauh lagi, jika Anda memiliki hubungan dalam database Anda,
seperti misalnya jika saya memiliki komentar dan posting,
maka mungkin saya ingin mengambil pos induk komentar.
Jika saya menggunakan hanya baris di SQL, maka semua bisa saya dapatkan adalah ID
dari pos induk dan bukan pos itu sendiri.
Tapi ketika kita coding, apa yang sebenarnya kita inginkan adalah untuk benar-benar mengambil
orangtua posting itu sendiri kadang-kadang.
Apa object relational mapping dilakukan adalah
dibutuhkan hasil query database
dan menempatkan ke objek untuk Anda, yang jauh lebih baik untuk bekerja dengan
dari array polos dan baris.
>> Misalnya, sekarang ketika saya memiliki komentar mungkin,
dan saya ingin ambil pasca induknya,
dan saya mungkin komentar panah pos,
maka benar-benar akan memberikan objek posting
sesuai dengan pos induk yang sebenarnya, bukan hanya beberapa ID,
yang saya dinyatakan akan harus menggunakan dan membuat SQL query lain untuk mengambil pos,
yang rumit dan tidak perlu.
Dan selanjutnya, dengan memetakan semua baris data ini menjadi benda-benda,
Anda juga dapat melampirkan lebih banyak fungsi ke obyek,
jadi misalnya, saya berbicara tentang bagaimana kelas pada dasarnya pengelompokan fungsi.
Anda dapat menganggap seperti itu.
Sebagai contoh, mungkin saya memiliki objek posting ini,
dan mungkin saya ingin memiliki semacam fungsi yang melekat padanya
yang pada dasarnya memberitahu saya itu baru-baru ini diposting?
Apakah itu diposting dalam minggu terakhir, benar atau salah?
Dan itulah fungsi saya dapat melampirkan ke objek,
dan itu benar-benar nyaman untuk memilikinya di tempat yang sama,
dan ada sejumlah fungsi yang berbeda Anda dapat membuat
untuk benda-benda ini, dan itu benar-benar bagus untuk dapat melampirkan ke kelas,
suatu benda, sedangkan jika Anda hanya memiliki baris yang berasal dari database Anda,
maka Anda tidak bisa benar-benar melampirkan fungsi apapun itu.
Ini benar-benar hanya data.
Setiap pertanyaan tentang itu sama sekali?
ORMs adalah pengembangan web sangat umum,
dan ada banyak jenis ORMs,
dan Kohana memiliki ORM sendiri.
Itu sangat dasar, tetapi Anda akan mendapatkan rasa dari apa yang tampak seperti.
>> Mari kita membuat model untuk posting blog kami,
dan hal pertama yang kami jelas perlu lakukan adalah untuk membuat sebuah meja yang sebenarnya
dalam database kami untuk benar-benar menyimpan data kita bagi mereka posting.
Hal pertama yang akan saya lakukan adalah pergi ke phpMyAdmin.
Apakah kalian menggunakan phpMyAdmin sebelumnya?
Oke, mengagumkan, jadi kalian sudah tahu apa itu,
dan aku akan membuat sebuah tabel baru yang disebut Kohana Posts,
dan itu akan menjadi benar-benar sederhana.
Aku harus masuk kembali masuk
Semua kita akan lakukan hari ini adalah memiliki seorang penulis dan tubuh,
hanya tetap sederhana.
Aku akan membuat tabel itu,
dan sekarang kita hanya memiliki tabel yang mewakili postingan kita
dengan 2 kolom untuk penulis dan tubuh kita.
Hal lain yang saya akan lakukan sekarang adalah
mengkonfigurasi aplikasi web saya sehingga tahu bagaimana untuk menghubungkan ke database,
dan ini, sekali lagi, adalah sesuatu yang Anda harus lakukan dengan semua aplikasi web.
Anda harus memberitahu itu nama pengguna dan password
dan nama database dan sebagainya dan sebagainya
untuk mencari tahu bagaimana untuk benar-benar terhubung ke database Anda.
>> Di Kohana, kita memiliki sesuatu yang disebut modul basis data,
dan di folder konfigurasi kita memiliki folder ini disebut Database,
dan seperti yang Anda lihat, ada banyak pengaturan yang harus ditetapkan di sini
untuk menceritakannya apa nama pengguna dan password
untuk database sehingga saya benar-benar dapat terhubung ke itu.
Dan karena saya tidak ingin kalian benar-benar tahu
nama pengguna dan password dari database saya,
Aku punya file di mana saya sudah mengatur semuanya, dan aku akan copy dan paste di atas.
Mengagumkan.
Oke. Saya pikir itu semua konfigurasi yang harus saya lakukan,
tapi mari kita lihat.
Kami akan terus bekerja di dalamnya, dan jika sesuatu crash,
maka kita akan memperbaikinya.
Sekarang apa yang akan saya lakukan adalah saya akan membuat controller baru.
Atau sebenarnya, maaf.
Pertama, saya harus menciptakan model baru.
Aku akan membuat model baru yang disebut post.php,
dan apa yang akan kita lakukan adalah kita akan menyebutnya kelas Model_Post.
Dapatkan beberapa sintaks pada,
dan jadi ketika saya mengatakan, "meluas ORM," yang pada dasarnya
beberapa object-oriented programming yang lebih,
yang sayangnya kalian belum belajar di CS50 belum,
tapi cukup mudah untuk mengambil.
Ini memberi saya semua fungsi tambahan ini yang datang dalam paket ORM ini,
dan jadi saya mendapatkan banyak fungsi dan yang lainnya secara gratis tambahan,
yang akan Anda lihat sedikit dalam satu detik.
>> Sekarang sebenarnya semua harus saya lakukan adalah membuat kelas ini.
Aku bahkan tidak perlu membuat fungsi atau apa pun,
tapi aku sudah membuat sebuah kelas yang mewakili meja,
dan karena saya telah diperpanjang kelas ORM ini,
Saya mendapatkan banyak hal-hal gratis, jadi untuk sekarang Anda tidak perlu mengatur apa-apa lagi up.
Dan sekarang apa yang akan saya lakukan adalah saya akan membuat controller baru,
yang aku akan nama blog.php,
dan aku akan salin Welcome kontroler
jadi saya tidak perlu mengetik ulang beberapa hal,
dan sekarang saya harus mengubah nama ini.
Sekarang apa yang akan saya lakukan untuk menguji untuk memastikan semuanya bekerja keluar,
Aku akan ambil posting pertama dari database saya
dan mencetak tubuh posting di layar.
Untuk melakukan itu apa yang akan saya lakukan pertama adalah aku akan menyimpan posting
ke variabel sehingga apa yang kita lakukan adalah -
di Kohana apa yang Anda lakukan adalah untuk mengambil objek posting
itu agak rumit, tetapi Anda harus melakukan hal ini disebut ORM :: pabrik,
dan kemudian Anda lulus dalam nama model yang Anda inginkan,
dan ia mengembalikan objek ORM yang mewakili model itu.
Dan kemudian, seperti saya katakan, ketika kita memperpanjang objek ORM,
kita mendapatkan semua metode ini secara gratis, jadi misalnya,
kita mendapatkan fungsi baru ini disebut "menemukan semua,"
yang secara otomatis mengembalikan setiap posting dalam database,
yang cukup nyaman.
>> Dan sekarang dalam tubuh aku akan kembali
posting pertama dan kembali tubuhnya.
Dan tentu saja, saya harus membuat sebuah tulisan,
jadi mari kita memasukkan posting baru.
Aku akan mengatakan, "Brandon, posting pertama saya."
Mengagumkan.
Dan sekarang kita akan pergi ke blog
dan jika semua bekerja dengan baik - oh, ini adalah beberapa hal izin berkas bodoh lainnya lagi.
Tunggu 1 detik. Ini semacam masuk akal.
Di sana kami pergi. Oke.
Saya tetap bahwa masalah izin.
Itu mencoba untuk membuat beberapa file dan beberapa log,
dan hak akses, sekali lagi, tidak benar diatur, jadi saya membuatnya
sehingga file-file yang ditulis dan dieksekusi
sehingga benar-benar bisa masuk ke hal-hal.
Sekarang itu memberi saya mengatakan pengecualian lain, "kelas ORM tidak ditemukan,"
dan itu karena saya lupa langkah lain.
Itu terlalu buruk.
Dalam file folder bootstrap, ada modul ini di sini,
yang dapat anda pilih untuk mengaktifkan atau menonaktifkan.
Ini adalah banyak fitur yang berbeda yang dapat Anda pilih untuk menggunakan
dalam Kohana, yang merupakan semacam bagus.
>> Misalnya, mereka memiliki modul otentikasi
yang dapat Anda gunakan untuk otentikasi pengguna.
Mereka memiliki modul caching jika Anda ingin menerapkan
semacam caching back end untuk membuat karya aplikasi lebih cepat dan yang lainnya.
Kita harus mengaktifkan database dan modul ORM,
karena seperti saya katakan, kami menggunakan database, jelas,
dan kami juga harus mengaktifkan modul ORM,
karena kami ingin memiliki fungsi tambahan, yang baik untuk memiliki.
Semua yang harus saya lakukan adalah tanda komentar yang 2 baris,
dan jika saya refresh, itu memberi saya kesalahan lain.
Ia mengatakan, "Kelas Model_Post tidak ditemukan."
Sekarang ini adalah masalah yang baik untuk memiliki.
Mari kita lihat.
Membuat publik.
No Tunggu.
Oh, sayang.
Aku tidak tahu mengapa hal itu tidak dapat menemukan itu.
Itu benar-benar aneh.
Aku punya kelas ini di sini.
Saya kira saya mungkin harus - oh.
Saya sangat bodoh. Aku lupa untuk menambahkan tag PHP.
Itu sebabnya.
Sekarang aku harus membatalkan bahwa 1 perubahan aku baru saja melakukannya.
>> Oke. Di sana kami pergi.
Itu benar-benar konyol. Saya tidak memiliki pembukaan tag PHP.
Tapi seperti yang Anda lihat, sekarang bekerja dengan baik, kan?
Kami memiliki 1 post.
Kami meraih posting pertama, dan sekarang kami dicetak tubuhnya.
Besar. Fantastic.
Ada pertanyaan sejauh ini?
Nggak? Ada pertanyaan?
Oke, jadi kami hanya menciptakan model pos, sangat dasar,
dan kita akan menambahkan beberapa fungsi di kemudian hari.
Kita bisa menambahkan validasi dan filtering.
Validasi adalah salah satu hal yang
bahwa kerangka memecahkan untuk Anda benar-benar, benar-benar baik,
dan saya tidak berpikir kalian harus melakukan ini untuk pset CS50 Anda,
tetapi jika Anda melakukan pengembangan web untuk proyek akhir Anda,
Anda mungkin akan ingin melakukan semacam validasi,
seperti tidak memiliki nama pengguna kosong,
mungkin memiliki password dengan setidaknya beberapa panjang, hal-hal seperti itu.
Dan itu benar-benar rumit untuk menerapkan hal-hal ini oleh diri kita sendiri,
dan hampir semua kerangka web tunggal melakukannya untuk Anda
dan memungkinkan Anda untuk melakukannya dengan cara yang sangat bersih.
Dan model ini di mana Anda biasanya mengungkapkan aturan-aturan validasi,
karena itu memvalidasi apakah model adalah valid atau tidak.
>> Tapi untuk saat ini, kita akan menempatkan bahwa sampai nanti,
dan untuk saat ini kita akan bekerja pada bagian lain,
dan kami akan mencoba dan membuat tampilan baru
yang berisi daftar semua posting.
Langkah-langkah yang terlibat dalam membuat tindakan baru untuk daftar semua posting
adalah untuk mengambil daftar semua posting
dan kemudian membuat daftar semua posting melalui pandangan.
Di sini, cukup untungnya, kita sudah meraih semua posting
menggunakan baris pertama ini, menemukan semua fungsi,
dan sekarang apa yang akan kita lakukan adalah sejauh
Aku sudah langsung menetapkan tubuh respon
dengan melewatkan string, tapi sekarang saya ingin menggunakan pandangan,
dan perbedaan antara pandangan dan hanya melakukan hal ini
adalah dengan melihat saya bisa memiliki bagus, template HTML besar,
dan apa yang bisa saya lakukan adalah menyebarkannya variabel-variabel tertentu
dan kemudian memiliki pandangan secara otomatis mengisi kerangkanya
menggunakan variabel tersebut.
Apa yang saya akan lakukan adalah saya akan membuat tampilan baru,
dan aku akan nama tampilan seperti "blog / index,"
dan aku akan mengikat pada dasarnya ini - oh, apa yang saya tulis?
Otak saya adalah di tempat lain.
Aku akan mengikat posting variabel untuk melihat,
sehingga cara pandangan memiliki akses ke variabel posting ini.
>> Dan jadi sekarang saya harus membuat pandangan ini,
jadi di sini kita memiliki folder ini disebut "Views,"
dan pertama kali, aku akan membuat folder baru di bawah yang disebut "Blog."
Ini bagus. Dengan begitu kita dapat memiliki hirarki yang bagus untuk pandangan kita.
Dan kemudian aku akan membuat file lain di sana disebut "index.php."
Mengagumkan.
Sebenarnya, mari kita mereka berdua di sini.
Membuat tampilan file mungkin adalah bagian yang paling sederhana dari semua ini,
dan ini mungkin hal-hal yang Anda sudah akrab dengan.
Kita akan melakukan sesuatu yang sangat sederhana,
mulai mengatakan, "List Saya posting blog."
Kemudian kita bisa melalui,
dan kita dapat iterate melalui posting array,
ambil setiap posting dan mengatakan sesuatu seperti -
mungkin menambahkan baris
dan kemudian mencetak penulis dan tubuh.
Itu masuk akal sejauh ini?
Dan mari kita lihat apakah ia bekerja.
Tidak ada yang terjadi.
Aku bertanya-tanya mengapa.
Oh, aku merindukan 1 step. Sangat konyol dari saya.
Saya membuat pandangan, tapi aku tidak mengatur tampilan sebagai respon,
sehingga Anda harus melakukan hal 1 lagi.
Anda harus melakukan "respons tubuh ini" dan set menjadi pandangan.
Di sana kami pergi.
Kami memiliki pos kami, dan kemudian kita harus posting,
dan hanya untuk iseng, mari kita masukkan pos lain
sehingga kita dapat melihat daftar.
Dan masukkan 2 tulisan ini,
dan sekarang jika saya me-refresh halaman,
kita melihat semua tulisan ini di sini.
>> Apakah itu masuk akal sejauh ini?
Ya, pertanyaan? Oh, oke.
Seperti yang Anda lihat, kami telah mampu untuk memisahkan semua kode tersebut keluar
menjadi beberapa bagian yang berbeda, dan kemudian Anda bisa melihat itu yang paling jelas dengan kode tampilan.
File ini di sini yang mewakili pandangan,
hanya peduli mewakili data, menampilkan data.
Ini dilewatkan semacam data, dan semua hal ini hanya menunjukkan kepada Anda.
Dalam semua bagian lain dari kode Anda, Anda tidak perlu khawatir tentang semua itu,
dan sama, kode pandangan Anda tidak perlu khawatir apa-apa tentang
cara mengakses database dan seterusnya dan sebagainya,
yang benar-benar baik dan membuat kode Anda jauh lebih maintainable.
Seperti saya katakan, pandangan, mereka dinamis dalam
itu 1 file, tapi itu akan menghasilkan pandangan yang berbeda
berdasarkan variabel Anda benar-benar lulus dalam,
dan lebih jauh lagi, ada banyak fungsi pembantu yang berbeda
yang dapat Anda gunakan untuk membantu Anda menulis kode Anda lebih cepat,
mana saya akan menunjukkan Anda hanya dalam satu detik.
Ya.
>> [Student] Jadi $ 0 adalah controller, kan?
Itu hal yang kedua.
Pertanyaannya adalah adalah $ 0 controller?
$ 0 adalah variabel yang saya buat di sini.
Saya membuat pandangan pertama. Saya ditugaskan ke beberapa variabel.
Lalu aku melewati ke fungsi ini, mengaturnya sebagai tubuh respon.
Apakah itu masuk akal?
[Mahasiswa] Jadi pandangan :: pabrik, adalah tampilan seperti kelas
atau perpustakaan [tidak terdengar] fungsi pabrik?
Pertanyaannya adalah tentang fungsi tampilan :: pabrik,
dan pada dasarnya ini adalah beberapa objek yang lebih berorientasi pemrograman dasarnya.
View adalah tampilan kelas, dan memiliki metode yang disebut "Factory,"
dan itulah cara untuk mengambil objek yang bernama "blog / index."
Dan itu beberapa lebih banyak barang pemrograman berorientasi obyek
bahwa aku tidak akan masuk ke sini terlalu banyak.
Sekarang jelas, kita ingin membuat posting baru,
tapi kami tidak mau harus melakukannya melalui database,
jadi kita akan membuat tindakan baru untuk membuat posting baru,
dan ada banyak hal yang harus kita lakukan.
>> Hal pertama yang kita akan lakukan - mari kita menangani hal-hal ini satu per satu.
Hal pertama yang akan kita lakukan adalah kita harus membuat formulir
untuk memasukkan posting baru,
tapi aku juga akan menambahkan tindakan baru pertama,
sehingga menambahkan tindakan baru hanya semudah
menambahkan fungsi baru dengan controller,
dan untuk sekarang aku akan melakukan sesuatu yang sangat mendasar,
hanya ambil pandangan ini dan posting, hanya menampilkannya untuk Anda.
Dan kemudian sekarang aku akan membuat tampilan file baru,
dan aku akan mulai menulis beberapa hal.
Apa yang baik tentang Kohana adalah bahwa mereka menyediakan banyak fungsi pembantu yang berbeda
bagi Anda untuk menulis tampilan kode lebih mudah,
dan 1 dari fungsi-fungsi helper atau modul helper
adalah sekitar menulis bentuk.
Untuk menulis bentuk, saya tidak benar-benar harus langsung menulis HTML sendiri.
Kalian telah menulis bentuk HTML.
Kau tahu bagaimana itu dapat benar-benar, benar-benar menyakitkan dan rumit untuk menulis bentuk.
Ini tidak menyenangkan, jadi untungnya,
kita pada dasarnya dapat menulis bentuk menggunakan Kohana yang
membentuk fungsi pembantu untuk melakukannya untuk kita.
Kita akan pada dasarnya memiliki kolom untuk setiap hal yang kita miliki,
jadi satu untuk penulis dan satu untuk tubuh.
Kita akan memiliki label, dan kita akan memiliki masukan.
>> Dan akhirnya, kita akan memiliki submisi.
Dan seperti yang Anda lihat, ini jauh lebih bersih untuk menulis
dari semua itu HTML berantakan, yang jenis yang baik.
Memang, ada kerangka kerja web lain yang memilikinya bahkan lebih bersih dari itu,
tapi setidaknya ini lebih baik daripada menulis HTML sendiri.
Awesome, jadi ini adalah apa yang Anda lihat.
Itu semacam berantakan,
jadi saya akan menambahkan satu baris di sana
untuk membuat yang terlihat sedikit lebih bagus.
Nah, tentu saja, masih terlihat benar-benar, benar-benar buruk, tetapi kami hanya terfokus
pada fungsi untuk saat ini dan bukan pada estetika.
Tidak ada waktu untuk melakukan semuanya.
Dan seperti yang Anda lihat, sekarang kita memiliki bentuk super dasar,
yang agak manis.
Kode ini saya akan mengatakan lebih bersih daripada mencoba untuk menulis HTML membentuk diri sendiri,
jadi itu bagus.
Apa selanjutnya?
Sekarang kita perlu melakukan hal-hal dengan tindakan.
Biasanya, bila Anda menulis bentuk HTML,
Anda harus mengatakan itu di mana itu akan mengirimkan formulir untuk.
Secara default di sebagian besar kerangka web,
itu menyerahkan ke URL yang sama persis, jadi masalahnya adalah,
jika Anda mengirim permintaan untuk mendapatkan / blog / baru,
Anda harus menampilkan form,
tetapi jika Anda mengirim permintaan untuk posting / blog / baru dengan data,
itu benar-benar harus mencoba untuk menyimpan posting yang
dan melakukan sesuatu dengan itu.
>> Apa yang akan kita lakukan adalah
pada dasarnya semua yang harus kita lakukan untuk memeriksa apakah itu permintaan pos atau permintaan get
adalah untuk memeriksa apa variabel posting Anda dapat mengatur.
Dan jika variabel pos diatur, maka kita akan mencoba dan membuat posting baru.
Sekali lagi, kita hanya melakukan hal ini,
dan yang menciptakan posting baru, dan kita benar-benar akan
mengatur bidang yang seperti ini,
dan kemudian kita akan menyimpannya.
Dan kemudian aku akan mengarahkan
ke halaman indeks sehingga mereka dapat melihat daftar posting lagi.
Mari kita coba.
Aku akan mengatakan, "Brandon,"
dan kemudian mengirimkan posting, dan jika semuanya berjalan dengan baik,
seperti yang Anda lihat, itu diarahkan saya ke halaman indeks,
dan jika saya gulir ke bawah, kami memiliki posting baru dimasukkan.
Yay!
Ya, pertanyaan.
>> [Student] Bagaimana jika Anda telah memasuki hal yang sama persis
Anda masukkan sebelumnya?
Apakah itu memeriksa untuk memastikan Anda tidak diduplikasi
pengajuan yang sama?
Jadilah default, tidak ada, karena secara default -
maaf, pertanyaannya adalah jika Anda memasukkan dalam data yang sama persis dalam bentuk
dan menyampaikan bahwa, itu akan memungkinkan Anda untuk memasukkan objek duplikat,
a duplikat entri, pada dasarnya?
Sekarang, ya, itu akan memungkinkan Anda untuk melakukan itu,
karena dalam database itu sangat valid untuk memiliki sepenuhnya duplikasi baris,
tetapi jika itu adalah kekhawatiran, maka Anda dapat menambahkan validasi, misalnya,
untuk memastikan bahwa jika ini adalah persis sama dengan sesuatu yang sudah ada,
kemudian mengatakan bahwa itu suatu objek yang tidak valid,
dan kemudian Anda bahkan dapat menentukan pesan kesalahan Anda
dan berkata, "tidak valid karena ini sudah ada" atau sesuatu seperti itu.
Tapi dalam kasus ini, saya hanya bisa menciptakan sesuatu yang duplikat.
Sekarang mari kita coba dan menambahkan beberapa validasi.
Masalah dengan hal ini sekarang adalah bahwa
Aku benar-benar bisa mengirimkan posting benar-benar kosong.
Saya dapat mengklik tombol ini sekarang, dan di sana kami pergi.
Anda tidak bisa benar-benar melihatnya, tapi garis ekstra ini di sini
menunjukkan bahwa saya benar-benar memiliki posting baru.
Itu hanya memiliki seorang penulis kosong dan tubuh kosong,
dan kita tidak ingin mengizinkan orang untuk melakukan itu.
Di sinilah validasi masuk
>> Aku bisa pergi ke objek model saya,
dan sekarang saya dapat menambahkan fungsi baru yang menentukan
apa aturan validasi yang harus saya tambahkan ke model ini
memastikan bahwa itu sah atau untuk menentukan apa artinya menjadi pos yang valid?
Dan saya ingin mengatakan itu hanya posting valid jika kedua penulis dan tubuh
tidak kosong, dan ini adalah bagaimana Anda melakukannya di Kohana.
Anda membuat fungsi baru yang disebut "Aturan,"
dan kemudian Anda pada dasarnya mengembalikan array asosiatif
yang mendefinisikan aturan validasi untuk objek ini.
Kita akan kembali array, dan kemudian apa yang kita akan lakukan adalah
mengatakan "penulis," ia pergi ke array,
yang pergi ke array yang lain yang disebut "tidak kosong."
Dan kemudian aku akan mengatakan "tubuh."
Oke, dan sintaks untuk ini dan struktur untuk ini
mungkin terlihat sedikit rumit dan sedikit rumit.
Jika Anda membaca dokumentasi, itu cukup mudah untuk mencari tahu,
Tapi pada dasarnya ini adalah apa yang perlu Anda lakukan untuk menentukan
beberapa aturan validasi, dan ada banyak aturan yang berbeda
bahwa Kohana akan memberikan secara gratis, seperti Anda dapat menambahkan aturan untuk mengatakan
itu harus setidaknya panjang ini.
Mungkin itu harus numerik. Mungkin itu harus numerik alpha.
Mungkin itu harus paling panjang ini, seterusnya dan sebagainya.
Ada banyak aturan yang berbeda yang Kohana menyediakan untuk Anda,
dan Anda dapat pergi pada website mereka, melihat dokumentasi,
dan Anda dapat melihat semua hal yang berbeda yang dapat Anda lakukan.
>> Tapi ini semua harus saya lakukan,
dan sekarang mari kita lihat apa yang terjadi
jika saya mengirimkan posting kosong.
Apa yang akan terjadi? Oh, tidak, saya mendapatkan error.
Saya mendapatkan pengecualian validasi.
Yah, itu baik.
Ini mengatakan kepada saya bahwa model saya tidak valid,
tapi saya tidak ingin menampilkan pengecualian
kepada pengguna ketika mereka mencoba untuk mengirimkan sesuatu yang tidak valid, kan?
Saya ingin memberi mereka semacam pesan kesalahan ramah
ketika sesuatu berjalan salah.
Apa yang akan kita lakukan adalah kita akan
membungkus semuanya dalam sebuah loop mencoba menangkap.
Sebenarnya, saya pikir ini adalah juga sesuatu yang Anda belum belajar belum
di CS50, karena C, bahasa pemrograman C,
tidak memiliki pengecualian, tetapi hampir setiap bahasa tunggal lainnya
memiliki pengecualian, sehingga benar-benar, benar-benar singkat,
pengecualian adalah sesuatu yang sepotong kode dapat
melempar pengecualian ketika sesuatu berjalan salah,
tapi kemudian mungkin beberapa bagian lain dari kode yang lebih tinggi
dapat menangkap pengecualian itu dan melakukan sesuatu dengan itu.
>> Misalnya, dalam kasus ini,
potongan kode yang mencoba untuk menyelamatkan model,
memvalidasi model, dan jika ia mengatakan, "Oke, model ini tidak valid,"
itu akan melemparkan sebuah pengecualian, dan ini adalah jenis setara dengan
di C Anda mungkin mengembalikan -1 atau sesuatu seperti itu.
Dan kemudian bagi saya, fungsi ini, kode saya
pada tingkat yang lebih tinggi, saya dapat mencoba dan menangkap pengecualian yang
dan pada dasarnya berkata, "Oke, kalau aku menangkap pengecualian, apa yang akan saya lakukan?"
Atau aku bisa memilih untuk tidak menangkap pengecualian itu dan membiarkan seseorang yang lebih tinggi
menangkap pengecualian, atau jika tidak ada menangkap itu,
maka seluruh program crash dan mengatakan,
"Ada yang tidak beres, dan aku tidak bisa mengatasinya."
>> Tapi apa yang kita lakukan adalah Anda membungkus sepotong kode dalam blok try,
dan kemudian Anda juga menambahkan sesuatu yang disebut blok catch,
yang merupakan semacam kode yang akan mencoba dan menangkap pengecualian yang mungkin terjadi.
Dan jadi jika saya menangkap pengecualian tertentu
atau pembatalan pengecualian, maka apa yang akan saya lakukan adalah
Aku akan mengatur kesalahan - saya pikir itulah bagaimana saya melakukannya -
dan aku akan mengatur kesalahan ke beberapa objek.
Lalu apa yang akan saya lakukan adalah jika hits pengecualian ini,
itu tidak akan untuk mengarahkan, dan jika tidak mengarahkan,
itu akan keluar dari jika blog
dan memukul blog ini / baru, yang ingin yang ingin saya lakukan.
Jika ada kesalahan, maka saya ingin kembali ke bentuk
dan menampilkan kesalahan-kesalahan.
Sekarang apa yang ingin saya lakukan adalah saya ingin lulus dalam kesalahan-kesalahan
untuk melihat.
Oke, saya pikir saya memiliki pandangan di sini,
dan pada dasarnya saya ingin menampilkan kesalahan-kesalahan jika mereka ada.
Sebelum saya menulis HTML untuk itu, aku akan benar-benar cepat
menunjukkan apa struktur kesalahan ini terlihat seperti variabel,
dan ini adalah praktik yang baik secara umum.
Banyak kali Anda mendapatkan sesuatu kembali dari beberapa metode,
beberapa fungsi dalam kerangka web,
dan Anda tidak tahu apa yang tampak seperti variabel,
sehingga Anda tidak tahu bagaimana bekerja dengan itu.
Aku akan menggunakan metode cetak r pada dasarnya mencetaknya.
>> Dan seperti yang Anda lihat, ia memberitahu saya itu sebuah array asosiasi,
dan Anda memiliki kunci, penulis, poin ke string ini,
penulis tidak boleh kosong, dan tombol lain, tubuh,
poin ke string lain, tubuh harus tidak boleh kosong.
Aku seperti, oke, keren.
Lalu aku bisa iterate melalui array dan mencetak setiap pesan.
Pada dasarnya seperti sebuah array asosiatif dengan sekelompok pesan.
Apa yang akan saya lakukan adalah "jika kesalahan,"
dan aku akan membuat daftar unordered,
dan aku akan iterate melalui semua kesalahan.
Dan ini, dan sekarang saya akan mencoba mengirimkan ini lagi,
dan mari kita lihat apa yang kita dapatkan.
Sekarang kita mendapatkan daftar ini bagus kesalahan,
dan ini masih sangat jelek, tapi ini jelas dapat diformat untuk terlihat bagus,
tetapi ide dasarnya adalah hanya dalam beberapa baris kode,
kami mampu memvalidasi model kita,
memastikan bahwa bidang-bidang tertentu yang tidak kosong,
dan jika sesuatu yang tidak beres, kemudian kembali semacam pesan error
Saya kemudian bisa hadir kembali ke pengguna.
Anda juga dapat menyesuaikan validasi Anda
sehingga Anda benar-benar dapat memiliki pesan kesalahan
yang lebih spesifik untuk aplikasi Anda atau sesuatu seperti itu.
Semua yang umumnya disesuaikan.
>> Sayangnya, kita kehabisan waktu,
jadi saya akan harus memotong sesi coding langsung di sini.
Ada banyak fitur lain yang saya ingin menunjukkan untuk Anda
dalam contoh ini.
Misalnya, Anda dapat menambahkan template ke situs Anda,
jadi mungkin ada semacam kode HTML yang ingin Anda terapkan
ke setiap halaman di situs Anda, dan bukannya paste yang
dalam setiap tampilan file tunggal yang Anda miliki, yang jelas akan menjadi praktek yang buruk,
Anda pada dasarnya dapat menentukan template ini,
dan kemudian di controller Anda berkata, "Oke, saya menggunakan template ini."
"Apakah semua pandangan saya menggunakan template ini."
Dan satu hal terakhir yang saya ingin menunjukkan kepada Anda juga
bahwa kita tidak punya waktu adalah cross-site scripting,
dan pada dasarnya saya pikir kalian mungkin telah melihat dalam CS50 -
Saya pikir David Malan mungkin berbicara tentang bagaimana Anda biasanya dapat menyuntikkan
JavaScript kode ke - Anda telah berbicara tentang hal ini?
Mungkin? Mungkin tidak?
>> Tapi banyak kali Anda dapat menyuntikkan kode JavaScript berbahaya
ke dalam database seseorang, dan jika mereka tidak melarikan diri dengan benar,
kemudian ketika mereka menyajikan data yang kembali ke pengguna,
maka mungkin menjalankan semacam kode JavaScript acak Anda tidak inginkan terjadi,
dan saya akan menunjukkan bagaimana Anda akan melakukannya dalam Kohana.
Ini sebenarnya sangat, sangat mudah.
Aku bisa melakukannya sekarang dalam 2 detik harfiah.
Yang harus Anda lakukan adalah pada dasarnya membungkus hal-hal ini
dalam hal ini disebut entitas HTML.
Dan yang secara otomatis akan lolos semua karakter dengan benar
dan pastikan Anda tidak mendapatkan masalah ini.
[Student] Anda dieja tes pertama salah.
[Brandon Liu] Oh, oops.
>> Oke, itu semua saya harus berbagi dengan Anda hari ini.
Slide ini akan diposting, tetapi ini umumnya
satu-satunya sumber daya yang Anda harus benar-benar perlu untuk memulai dengan Kohana.
Anda dapat pergi ke situs web. Mereka memiliki buku petunjuk, dan mereka juga memiliki explorer API.
Kita bisa mengeksplorasi semua fungsi yang berbeda dan fungsi pembantu mereka miliki untuk Anda.
Mereka umumnya memiliki informasi yang cukup pada website
yang dapat Anda gunakan untuk memulai dan pergi dengan Kohana.
Ada tidak banyak tutorial, saya pikir, untuk Kohana, di luar
apa yang mereka miliki di situs web di sini, jadi ini mungkin Anda terbaik.
Tetapi jika Anda ingin pergi dengan kerangka web
dan Anda tidak mau harus mengambil bahasa baru,
dan Anda menginginkan sesuatu yang relatif ringan dan memiliki kurva belajar yang mudah,
Saya pasti akan menyarankan Kohana.
Itu mungkin korban terbaik untuk itu.
Lucunya, meskipun, adalah jika kita menggunakan Ruby on Rails,
kita bisa direplikasi apa yang baru saja kita lakukan
dan mungkin lebih di bawah 3 menit.
Tidak ada lelucon, tetapi belajar Ruby on Rails dibutuhkan jauh lebih lama
daripada yang dibutuhkan untuk belajar Kohana.
Pada dasarnya pilihan Anda pada apa yang Anda ingin memilih untuk belajar,
tetapi jika Anda ingin bangun dan berjalan cepat,
Kohana jelas merupakan suatu pilihan yang sangat baik.
>> Pertanyaan terakhir sebelum kita berakhir? Ya.
[Student] Bagaimana kita mengintegrasikan bahwa
dalam kerangka CSS seperti Anda menggunakan ketika Anda memerintahkan?
Pertanyaannya adalah bagaimana kita akan mengintegrasikan bahwa dengan kerangka CSS?
Apa yang kita mungkin akan lakukan adalah kita mungkin akan mencakup
folder baru di mana kita akan membuang semua file CSS kami,
dan kemudian kami juga akan menambahkan template baru.
Dalam template kami akan menyertakan file-file CSS
untuk memastikan mereka direferensikan pada setiap halaman,
dan kemudian ketika Anda benar-benar menulis HTML,
Anda hanya menambahkan kelas yang tepat dan yang lainnya,
dan misalnya, ketika Anda menggunakan sesuatu seperti bentuk
fungsi pembantu, Anda dapat menambahkan lebih banyak parameter setelah itu
untuk menentukan kelas apa yang Anda ingin melekat pada berbagai hal
sehingga mereka bisa gaya itu dengan benar, dan itulah dasarnya bagaimana Anda akan pergi.
>> Ada pertanyaan lain?
Mengagumkan.
Terima kasih untuk waktu Anda, dan terima kasih untuk datang.
Aku tidak akan menambahkan sangat banyak yang lain,
tapi 1 hal yang sangat cepat adalah kita tidak memiliki link
ke form.
Benar-benar bodoh.
Mari menambahkan - sebenarnya dalam tampilan, blog, indeks,
mari kita benar-benar cepat menambahkan link yang masuk ke halaman baru,
halaman di mana kita dapat memasukkan posting baru.
Kita akan melakukan hal ini.
Apa yang baik adalah ada kelompok ini seluruh fungsi helper HTML
yang melakukan hal yang berbeda untuk Anda, sehingga Anda sudah melihat entitas
berfungsi di sini, tetapi mereka juga memiliki fungsi yang disebut "anchor,"
yang Anda dapat mengetikkan blog / new
dan berkata, "Pasang blog baru."
Dan itu akan membuat link untuk Anda,
dan ini tampaknya benar-benar sepele untuk dilakukan, tapi ini bagus,
karena mengira bahwa Anda pindah website Anda dari 1 domain yang lain.
Dan jika Anda hanya menulis URL sendiri,
maka Anda akan harus mengubah semua URL.
Atau mungkin Anda pindah dari 1 subfolder ke subfolder lain.
Anda akan harus mengubah semua URL tersebut sendiri,
dan itu tidak menyenangkan.
Anda dapat menggunakan jangkar ini di sini,
dan Anda dapat mengubah domain atau awalan subfolder
di file konfigurasi sekali,
dan kemudian akan menerapkan bahwa di mana-mana, dan ini, sekali lagi,
contoh yang bagus dari tidak mengulangi diri sendiri, mengeringkan kode Anda keluar.
Di mana pun Anda mengulangi diri sendiri, mencoba dan ekstrak dalam beberapa jenis file konfigurasi
atau fungsi yang berbeda dan telah menangani itu untuk Anda.
>> Dan hal terakhir yang saya ingin menunjukkan Anda adalah
misalkan kita kembali pada posting ini, dan saya telah menulis beberapa esai yang sangat panjang,
tapi aku lupa untuk menyertakan penulis saya.
Sekarang ketika saya klik "Kirim Post,"
Aku baru saja kehilangan segalanya.
Tidak! Benar-benar menyedihkan.
Jadi bagaimana Anda mengatasinya?
Ini adalah apa yang kita lakukan.
Apa yang kita lakukan di sini untuk fungsi-fungsi input dan area teks,
jika kita termasuk parameter kedua, maka nilai yang parameter kedua
akan menjadi bidang apa yang akan awalnya diisi dengan.
Apa yang bisa kami lakukan adalah di controller blog kita,
kita bisa mengikat variabel lain.
Sebut saja "nilai-nilai" mungkin.
Dan lulus di pos array, secara harfiah.
Itu berarti bahwa jika validasi gagal,
lolos ke saya array posting yang saya disampaikan dari permintaan terakhir,
dan dengan cara itu saya bisa menggunakan nilai dari penyerahan terakhir saya
untuk terisi kembali bidang.
Sekarang saya dapat melakukan sesuatu seperti nilai-nilai penulis
dan nilai-nilai tubuh, dan dengan cara itu jika saya melakukan beberapa hal acak
dan klik "Kirim Post," maka itu tetap ada.
Tapi kita akan mengalami masalah lain.
Yang bekerja, tetapi jika aku pergi ke halaman pertama kalinya,
itu akan kecelakaan, dan itu karena pertama kalinya
kami pergi ke halaman, variabel posting ini belum ditetapkan belum.
Ini null. Itu tidak ada.
>> Dan apa yang ingin kita katakan adalah jika kunci ini ada,
kemudian kembali nilai array ini,
tetapi jika kunci tidak ada, kemudian kembali string kosong.
Itulah fungsi kita inginkan di sini.
Kami ingin memeriksa apakah kunci ada sebelum mencoba untuk mengakses array,
dan cukup untungnya,
Kohana juga memberi kita fungsi pembantu untuk itu.
Mereka memiliki seluruh suite ini fungsi
dengan nama ARR, singkatan dari array,
dan mereka memiliki 1 fungsi yang disebut "mendapatkan,"
dan Anda dapat lulus dalam array,
dan Anda dapat lulus dalam nama kunci.
Lalu dasarnya apa yang akan dilakukannya adalah ia akan mencoba untuk mendapatkan kunci itu,
tetapi jika kunci yang tidak ada dalam array,
maka akan kembali kosong, atau kita juga dapat menentukan default, saya percaya,
yang bagus.
Sekarang jika kita melakukan hal yang sama lagi,
maka Anda lihat sekarang ia bekerja pertama kali sekitar,
dan lagi, jika kita mengetikkan beberapa hal acak
dan mencoba dan klik, maka itu tetap ada.
>> Dan saya kira saya juga dapat menunjukkan cara untuk menambahkan template sangat cepat.
Apa yang bisa kita lakukan pertama adalah kita dapat menambahkan tampilan baru yang disebut "template.php"
dalam folder Views,
dan apa yang akan saya lakukan adalah saya akan mencetak sesuatu yang disebut "konten,"
yang akan menjadi konten utama saya.
Dan mungkin di bagian paling bawah saya akan menambahkan, katakanlah,
hak cipta.
[Pertanyaan mahasiswa terdengar]
[Brandon Liu] Mungkin ini adalah template dasar super Saya ingin menggunakan.
Saya ingin memiliki folder dengan hak cipta saya pada setiap halaman,
dan sekarang apa yang akan saya lakukan dalam controller saya
sekarang bukannya mengatakan, "meluas Pengawas"
Aku akan mengatakan, "meluas Controller_Template,"
dan sekarang bukannya mengatakan, "respon tubuh sama dengan pandangan ini,"
Aku akan mengatakan, "isi template ini -"
dan saya pikir - saya menempatkan tanda sama?
Saya lupa. Ya, saya pikir begitu.
Dan sekarang saya menetapkan bahwa variabel konten untuk sama tampilan.
Aku bisa melakukan hal yang sama di sini.
Dan jika saya refresh, Anda dapat melihat sekarang hak cipta ini ditambahkan di sana,
dan hanya membuat beberapa posting acak,
dan kemudian, sekali lagi, Anda akan melihat bahwa hak cipta di bagian paling bawah halaman.
>> Besar. Itu saja yang saya ingin menunjukkan kalian.
[Tepuk tangan]
Ada pertanyaan?
[CS50.TV]