Rangka Kerja Lithium: Titik Utama
Lithium menggunakan seni bina model-view-controller (MVC), yang akan dibincangkan dalam artikel ini. Saya akan menunjukkan kepada anda bagaimana ia berfungsi dan bagaimana untuk menentukan beberapa logik perniagaan dan perwakilan untuk aplikasi anda menggunakan rangka kerja ini. Kami akan melakukan langkah -langkah berikut:
kami akan menyediakan pengawal ke permintaan URL laluan. Pengawal ini akan menggunakan model data untuk mendapatkan dan memproses beberapa maklumat dari pangkalan data. Maklumat ini kemudiannya akan dipaparkan dalam penyemak imbas menggunakan paparan. Semua ini adalah proses MVC standard, tetapi ia adalah keseronokan untuk dilaksanakan dalam litium.
Saya menganggap anda mempunyai rangka kerja yang ditetapkan pada pelayan, sekurang -kurangnya anda dapat melihat halaman pelancaran aplikasi lalai apabila anda menavigasi ke URL. Di samping itu, anda memerlukan pangkalan data dengan beberapa maklumat. Saya akan menggunakan MySQL, tetapi Lithium menyokong banyak sistem storan lain seperti MongoDB atau CouchDB.
Jika anda ingin terus belajar, saya telah menyediakan repositori Git dan anda boleh mengkloninya. Cawangan induk mengandungi kerangka litium biasa, manakala cawangan MVC mengandungi kod untuk artikel ini. Jangan lupa untuk memulakan dan mengemas kini submodule lithium. Untuk menyambung ke pangkalan data anda, salin fail Connections_Default.php yang terletak di folder App/Config/Bootstrap dan namakan semula ke Connections.php. Kemudian tambahkan kelayakan anda ke fail.
mari kita mulakan.
data
Sebelum memasukkan kandungan MVC yang menarik, mari tambahkan jadual dalam pangkalan data dengan beberapa maklumat. Saya akan menggunakan data halaman maya, jadi jadual saya (halaman bernama) akan mengandungi lajur ID (int, auto-increment dan kunci utama), lajur tajuk (varchar 255), lajur kandungan (teks) dan lajur yang dibuat ( Int). Dalam jadual ini, saya mempunyai dua baris data sampel. Sekiranya anda ingin mengikuti langkah -langkah yang tepat, berikut adalah pernyataan penciptaan jadual:CREATE TABLE `pages` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, `content` text, `created` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
Berikut adalah baris data maya saya:
INSERT INTO `pages` (`id`, `title`, `content`, `created`) VALUES (1, 'My awesome page title', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397158745), (2, 'Some other page title', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397158768);
Sudah tentu, anda boleh menggunakan data lain.
c bermaksud pengawal
Pengawal mungkin merupakan bahagian paling penting dari mana -mana rangka kerja MVC. Tujuan mereka adalah untuk mengendalikan permintaan yang diarahkan oleh sistem penghalaan aplikasi.
Jika anda melihat aplikasi/ pengawal/ folder aplikasinya, anda akan mendapati bahawa ini adalah di mana kita perlu meletakkan pengawal. Mari buat fail baru di sana yang dipanggil siteController.php (setiap kelas pengawal berada dalam failnya sendiri) dan tampal perisytiharan kelas berikut untuk memulakan:
<?php namespace app\controllers; class SiteController extends \lithium\action\Controller { }
Seperti yang anda lihat, kami melanjutkan kelas pengawal asas lithium ke kelas kami sendiri yang dipanggil SiteController. Dalam kelas ini, anda boleh membuat kaedah yang melaksanakan logik yang diperlukan apabila meminta dari URL. Kami akan melihat bagaimana ia sebenarnya berlaku kemudian, tetapi pertama, mari kita faham bagaimana routing berfungsi.
Secara lalai, apabila membina URL, kami menggunakan parameter yang memetakan ke nama kelas pengawal (dalam tapak kes ini), kaedah, dan parameter. Jika nama kaedah tidak diluluskan, litium akan menganggap kaedah yang dinamakan indeks () sendiri. Jadi jika anda menavigasi ke http://example.com/site/, litium akan mencari kaedah ini dan memanggilnya. Sekarang katakan kita mempunyai kaedah yang dipanggil View () yang mengambil parameter ($ id). URL yang memanggil kaedah pengawal adalah http://example.com/site/view/1, di mana pandangan adalah nama kaedah dan 1 adalah parameter yang diserahkan kepada fungsi. Jika kaedah mendapat lebih banyak parameter, anda hanya memisahkannya dengan slashes (/) dalam URL.
Sekarang mari kita teruskan dan buat kaedah () kaedah yang akan bertanggungjawab untuk memaparkan halaman individu dari pangkalan data maya saya:
public function page() { // 模拟页面信息。 $title = 'My awesome page title'; $content = 'My awesome page content. Yes indeed.'; $created = '10 April 2014'; // 准备页面信息以传递给视图。 $data = array( 'title' => $title, 'content' => $content, 'created' => $created, ); // 将数据传递给视图。 $this->set($data); }
(kandungan berikut adalah serupa dengan teks asal, tetapi pernyataan telah diselaraskan dan ditulis semula, mengekalkan niat asal, dan mengelakkan blok kod pendua)
V bermaksud Lihat
Lihat adalah lapisan persembahan rangka kerja MVC. Mereka digunakan untuk memisahkan logik perniagaan aplikasi dari perwakilan dan membolehkan tematik kandungan yang mudah dipaparkan dalam penyemak imbas.Mari buat pandangan untuk memaparkan maklumat halaman kami. Dalam apl/ paparan/ folder, anda perlu membuat folder lain yang dinamakan selepas kelas pengawal yang menggunakannya (dalam tapak kes ini). Dalam folder ini, anda perlu membuat fail yang dinamakan selepas kaedah itu sendiri, dengan sambungan .html.php dilampirkan. Ini adalah pandangan lithium konvensyen, yang membolehkan kita dengan mudah menyambungkannya ke pengawal.
Jadi untuk contoh halaman kami, fail baru akan terletak di apl/paparan/tapak/page.html.php.
Dalam fail ini, tampal yang berikut:
CREATE TABLE `pages` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, `content` text, `created` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
Seperti yang anda mungkin dapati, berikut adalah beberapa tag asas di mana kami akan mencetak pembolehubah yang dinamakan untuk lulus kekunci array dari pengawal. Lithium menggunakan sintaks ini untuk mencetak pembolehubah, kerana ia juga menjalankannya melalui fungsi $ H (), yang bertanggungjawab untuk membersihkan HTML. Tetapi ini hanya terpakai untuk mencetak pembolehubah, bukan sifat $ objek ini.
Untuk menguji apa yang telah kami lakukan setakat ini, navigasi ke http://example.com/site/page dan anda harus melihat halaman yang bagus yang menunjukkan maklumat simulasi. Anda juga akan melihat bahawa pandangan mudah kami diberikan dalam susun atur yang lebih kompleks (susun atur lalai yang disertakan dengan rangka kerja).
Layouts dalam litium digunakan untuk membungkus kandungan menggunakan tag yang biasa digunakan seperti tajuk dan footer. Mereka terletak di folder App/Layouts di mana mereka memberikan pandangan menggunakan $ this- & gt; kandungan (). Pandangan kami diberikan secara lalai dalam susun atur lalai.html.php, tetapi anda boleh menentukan susun atur lain yang anda mahukan. Anda boleh melakukan ini dari pengawal yang menjadikan pandangan, sama ada sebagai atribut kelas yang digunakan untuk semua kaedah pengawal itu, atau dalam kaedah itu sendiri, seperti:
INSERT INTO `pages` (`id`, `title`, `content`, `created`) VALUES (1, 'My awesome page title', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397158745), (2, 'Some other page title', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397158768);
Kami akan berpegang pada susun atur lalai kerana ia kelihatan baik untuk tujuan demo kami.
M bermaksud Model
Sekarang bahawa logik permintaan dan perwakilan telah diproses, sudah tiba masanya untuk menggantikan data halaman simulasi dengan kandungan pangkalan data maya kami. Kami akan menggunakan model untuk abstrak dan mudah mengakses maklumat ini.
Kelas model adalah bahagian yang sangat penting dari rangka kerja MVC kerana mereka menentukan dan memproses kandungan dalam pangkalan data. Mereka juga membolehkan aplikasi dengan mudah melaksanakan operasi CRUD (membuat, membaca, mengemas kini, memadam) pada data ini. Mari lihat bagaimana mereka bekerja di litium.
Perkara pertama yang perlu anda lakukan ialah membuat fail kelas yang dipanggil Pages.php dalam folder App/Model dan tampal yang berikut:
<?php namespace app\controllers; class SiteController extends \lithium\action\Controller { }
kami hanya memperluaskan kelas model asas dan menggunakan semua kaedahnya. Nama kelas model kami mesti sepadan dengan jadual pangkalan data yang mengandungi rekod yang berkaitan. Jadi jika anda bukan halaman, pastikan anda menyesuaikan dengan sewajarnya, kerana litium secara automatik akan mendapat penamaan ini untuk mempermudahkan kerja kami.
Seterusnya, kita perlu memasukkan fail ini dalam fail kelas pengawal kami, jadi sila tampal berikut di bawah perisytiharan ruang nama:
CREATE TABLE `pages` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, `content` text, `created` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
yang seterusnya adalah untuk memadam kandungan mock dalam kaedah () dan pastikan fungsi ini melepasi parameter $ ID supaya kita tahu halaman mana yang perlu kita ambil. Tugas mudah kami yang tersisa adalah untuk menanyakan rekod halaman dan lulus hasilnya ke paparan. Oleh itu, kaedah halaman yang diubahsuai () akan kelihatan seperti ini:
INSERT INTO `pages` (`id`, `title`, `content`, `created`) VALUES (1, 'My awesome page title', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397158745), (2, 'Some other page title', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397158768);
Kami menggunakan kaedah pertama () kelas induk model untuk bertanya menggunakan syarat. Hasilnya adalah objek yang kami gunakan kaedah () kaedah untuk mendapatkan data rekod. Data ini mengambil array dengan nama lajur jadual sebagai kunci. Selebihnya adalah sama seperti sebelum ini, kecuali bahawa kita memformat medan yang dicipta menggunakan fungsi tarikh PHP () kerana apa yang kita dapat dari pangkalan data adalah timestamp Unix. Itu sahaja.
Jika kita menavigasi ke http: contoh.com/site/page/1, kita harus melihat halaman dengan ID 1. Jika kita menukar parameter URL terakhir kepada 2, halaman harus memuat rekod kedua. Rapi.
Kesimpulan
Dalam tutorial ini, kita melihat betapa mudahnya untuk memahami dan menggunakan rangka kerja litium MVC. Kami belajar bagaimana untuk menentukan pengawal, pandangan, dan model, dan cara menggunakannya bersama -sama untuk membuat aliran aplikasi yang kemas dan berasingan. Kami juga melihat betapa bergunanya perjanjian lithium bagi kami untuk memulakan. Walaupun kami tidak menyedarinya, kami abstrak kandungan pangkalan data kami dan mendedahkannya untuk akses mudah.
Saya harap anda telah belajar sesuatu dan ingin tahu tentang menyelidiki lebih mendalam ke dalam ciri -ciri berkuasa lain yang ditawarkan litium. Apakah beberapa kaedah CRUD terbina dalam? Bagaimana untuk mengembangkannya? Bagaimana untuk menentukan laluan tersuai anda sendiri? Bagaimana cara menggunakan pelbagai susun atur untuk menjadikan unsur -unsur yang lebih kecil walaupun dilihat? Ini adalah ciri -ciri yang kuat Lithium yang ditawarkan untuk aplikasi web kami dan patut dicuba.
Adakah saya membangkitkan rasa ingin tahu anda? Ingin mengetahui lebih lanjut mengenai rangka kerja yang sangat baik ini?
(bahagian FAQ adalah sama dengan teks asal, tiada pengubahsuaian diperlukan)
Atas ialah kandungan terperinci Rangka Kerja Lithium: Bermula. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!