Ditulis oleh Rahul Chhodde✏️
Rangka kerja bahagian hadapan moden berpasangan dengan baik dengan rangka kerja tindanan penuh khusus mereka — seperti React with Next.js, Vue dengan Nuxt.js dan Svelte dengan SvelteKit. Tetapi kemudahan penggunaan yang sama dan sokongan luar biasa nampaknya mustahil apabila memasangkan penyelesaian bahagian hadapan moden seperti React dengan rangka kerja bahagian belakang tradisional atau bahagian pelayan seperti Laravel.
Jurang kebolehsuaian antara penyelesaian bahagian hadapan JavaScript dan rangka kerja hujung belakang tradisional ini diisi oleh Inertia.js. Dalam panduan penggunaan ini, kita akan mempelajari cara menggunakan Inertia untuk membina apl satu halaman (SPA) dengan rangka kerja hujung belakang tradisional dan bahagian hadapan JavaScript moden sambil mengekalkan penghalaan sebelah pelayan.
Inertia.js ialah alat yang membolehkan pembangun membina SPA moden dengan rangka kerja bahagian hadapan dan belakang yang popular tanpa memerlukan API di antaranya. Dicipta pada 2019 oleh Jonathan Reinink, idea utama di sebalik Inertia adalah untuk memudahkan proses membina SPA moden sambil memanfaatkan rangka kerja sisi pelayan sedia ada.
Dalam perkataan yang lebih mudah, Inertia berfungsi sebagai gam yang menyatukan rangka kerja bahagian pelayan dan bahagian pelanggan anda, memastikan komunikasi yang cekap antara bahagian belakang dan bahagian hadapan. Dengan Inersia, daripada mengekalkan dua pangkalan kod berbeza untuk bahagian hadapan dan bahagian belakang atau bahagian pelayan, anda membangunkan keseluruhan apl dalam satu pangkalan kod seperti monolit.
Pada mulanya, Inertia hanya menyokong Vue dan Laravel. Dengan keluarannya yang kemudian, ia berkembang dan melanjutkan sokongannya untuk lebih banyak rangka kerja.
Monolit Inersia moden menyediakan ciri penting seperti pemaparan sisi pelayan (SSR), versi aset automatik, pemuatan malas untuk komponen halaman, sokongan TypeScript dan banyak lagi. Kami akan meneroka sokongan rangka kerjanya kemudian sambil membincangkan penyepaduan rangka kerja.
Inersia berfungsi seperti penyesuai antara bahagian hadapan dan hujung belakang. Ia berbeza daripada SPA biasa dalam aspek berikut:
Apabila permintaan dibuat daripada penyemak imbas menggunakan apl berkuasa Inertia, permintaan itu sampai ke hujung belakang dahulu. Akibatnya, respons Inertia dibuat, mengembalikan dokumen HTML penuh terlebih dahulu dengan perpustakaan JavaScript Inertia kepada penyemak imbas melalui klien Inertia.
Untuk navigasi seterusnya, klien Inertia membuat permintaan pengambilan dan menerima data JSON sebagai balasan daripada pelayan. Menggunakan data yang diterima ini, pelanggan kemudian mengemas kini bahagian hadapan dan perubahan ditunjukkan pada apl tanpa muat semula halaman penuh.
Berikut ialah carta alir yang menerangkan keseluruhan proses itu dalam cara visual:
Jika anda berada dalam situasi di mana anda mesti menggunakan rangka kerja hujung belakang tradisional untuk SPA anda, tetapi mempunyai kebebasan untuk mengendalikan bahagian hadapan mengikut kemahuan anda, anda harus mempertimbangkan untuk menggunakan Inertia atau alat yang serupa.
Inertia dibuat khusus untuk Laravel dan memberikan kestabilan yang lebih besar dalam projek Laravel. Jika anda seorang pembangun Laravel dan ingin melakukan lebih daripada apa yang ditawarkan oleh templat Blade secara lalai, Inertia ialah sesuatu yang anda mungkin mahu cuba.
Anda boleh meneroka beberapa lagi kes penggunaan di mana Inertia boleh menjadi rakan anda. Dua bahagian seterusnya merangkumi beberapa kebaikan dan keburukan menggunakan Inertia, yang akan membantu anda membuat keputusan termaklum tentang memilihnya untuk pembangunan apl anda.
Terdapat beberapa kelemahan SPA yang diketahui secara umum yang tidak akan kami bincangkan di sini. Sebaliknya, kami akan menyentuh tentang kelemahan Inersia sebagai utiliti pembangunan.
Dengan Inersia, anda mengekalkan bahagian hadapan dan hujung belakang apl anda dalam satu pangkalan kod. Gandingan yang ketat ini menjadikan Inertia tidak sesuai untuk projek yang menuntut pengekalan bahagian hadapan dan belakang secara berasingan untuk kebolehselenggaraan yang lebih baik, pengasingan kebimbangan, kebolehskalaan, pembangunan bebas, fleksibiliti tindanan teknologi dan sebab-sebab lain.
Menggunakan alat seperti Inertia menambah satu lagi utiliti pada timbunan anda untuk meneroka dan belajar. Memahami corak dan konvensyen khusus Inersia mempunyai keluk pembelajaran yang sederhana, yang boleh menjadi sedikit menjengkelkan dan memakan masa.
Memandangkan menyesuaikan diri dengan alatan seperti Inertia untuk bahagian hadapan dan bahagian belakang belum lagi menjadi arus perdana, tiada cara standard untuk melakukan sesuatu dengannya. Oleh itu, beralih daripada Inersia akan memerlukan pemfaktoran semula yang ketara, terutamanya pada bahagian hadapan.
Selain itu, kerumitan ujian, terutamanya untuk ujian API dan unit, pasti akan meningkat kerana sempadan antara bahagian hadapan dan bahagian belakang bertepatan dalam monolit.
Inertia mempunyai lebih 6,000 bintang di GitHub dan lebih 85 penyumbang. Penyesuai Laravelnya mempunyai lebih 2,000 bintang. Semua statistik ini digabungkan jauh lebih rendah daripada alatan dalam kategori yang sama yang tidak menawarkan banyak ciri dan sokongan rangka kerja seperti Inertia.
Jadi mungkin terdapat keadaan apabila anda ingin membina sesuatu yang khusus dengannya dan tidak dapat mencari rujukan serta panduan yang mencukupi untuk diikuti.
Lihat jadual di bawah untuk perbandingan langsung antara Inertia.js dan beberapa pesaingnya seperti Livewire.
Membuat apl anda di luar talian dahulu boleh menjadi rumit dengan Inersia, kerana mewujudkan strategi caching yang wajar tidak mudah dengan alat ini. Anda juga harus ingat bahawa Inertia, secara lalai, menghantar komponen halaman penuh pada setiap permintaan, meningkatkan saiz muatan, yang boleh diselesaikan dengan muat semula separa.
Inersia mempunyai beberapa kelebihan umum berbanding SPA tradisional yang diberikan oleh pihak pelanggan. Mari kita bincangkan beberapa kekuatan utamanya satu demi satu.
Inertia disepadukan dengan sempurna dengan rangka kerja bahagian hadapan dan belakang yang popular, serta menyediakan sokongan tangan pertama untuk Vue dalam binaan demonya. Rangka kerja dan perpustakaan yang disokong, kedua-dua bahagian hadapan dan bahagian belakang digabungkan, termasuk Laravel, Rails, Phoenix, Django, React, Vue dan Svelte.
Laravel membolehkan anda membina aset anda dengan Vite, memberikan anda pengalaman pembangunan yang lebih pantas dan lebih produktif daripada Laravel Mix berasaskan Webpack. Himpunan aset berasaskan Vite sesuai dengan bil dengan sempurna jika matlamat anda adalah untuk melaksanakan bahagian hadapan berasaskan JavaScript.
Walaupun pengalaman pembangun yang sedikit lemah seperti yang diterangkan di atas, Inertia menawarkan penyepaduan yang dipermudahkan, menghapuskan keperluan untuk API yang berasingan agar bahagian hadapan dan bahagian belakang berfungsi bersama. Inersia membolehkan anda menggunakan kit pemula dan menyediakan panduan pemasangan manual untuk menyediakan kedua-dua sisi klien dan persekitaran sisi pelayan untuk pembangunan.
Daripada menghantar HTML yang diberikan pelayan sepenuhnya dengan himpunan JavaScript yang besar kepada pelanggan, apl Inertia menerima cangkerang HTML minimum dengan data JSON awal yang menghasilkan secara perbandingan lebih pantas pada klien.
Ini menjadikan apl berasaskan Inertia lebih baik sedikit dalam prestasi awal tanpa kerumitan tambahan daripada SPA yang diberikan oleh pihak pelanggan biasa. Ia juga menambah UX kualiti yang lebih baik secara keseluruhan dan menambah baik Cat Kandungan Pertama, metrik Teras Web Vital yang penting.
Apl berasaskan inersia menggunakan penghalaan sisi pelayan, yang menghasilkan URL yang lebih kemas dan mudah dirangkak. Ini menjadikan pengendalian metadata untuk setiap halaman cukup mudah. Selain itu, seperti yang dibincangkan dalam perkara terakhir, apl ini berkemungkinan mempunyai skor FCP yang lebih baik disebabkan oleh jumlah kecil data awal yang dihantar kepada pelanggan.
Kedua-dua ciri ini digabungkan menghasilkan SEO yang lebih baik dan memberikan apl Inertia.js kelebihan berbanding SPA tradisional.
Petua: Jika pemaparan sisi klien (CSR) memberi kesan negatif terhadap metrik FCP, anda boleh memilih apl yang diberikan pelayan sepenuhnya dengan pemalam SSR Inertia.js untuk meningkatkan skor.
Memandangkan Inertia.js bertindak sebagai penyesuai antara bahagian hadapan dan bahagian belakang, ia sangat padat (seperti yang sepatutnya), dengan berat hanya kira-kira 15kB dikecilkan dan dizipkan.
Dokumentasi inersia membolehkan anda bermula dengan segera, terutamanya apabila menggunakan Laravel sebagai rangka kerja bahagian belakang anda. Ia juga mempunyai panduan naik taraf untuk versi dan sampul lama daripada konsep umum kepada lanjutan semuanya di satu tempat.
Mari kita pelajari cara menyediakan Inertia dengan dua penyelesaian bahagian hadapan dan bahagian belakang yang paling popular: hujung belakang berasaskan Laravel dengan bahagian hadapan berkuasa React. Anda mungkin mendapati semua kod yang diliputi dalam tutorial ini dalam repositori GitHub ini.
Perhatikan bahawa persediaan ini tidak melibatkan penggunaan TypeScript demi kesederhanaan.
Dengan mengandaikan anda telah memasang Laravel pada mesin anda, mari buat projek Laravel baharu dengan menggunakan arahan pemasang Laravel:
laravel new
Anda sepatutnya melihat sesuatu seperti di bawah dalam terminal pembangun anda:
Selepas melaksanakan arahan itu dalam terminal dan memberikan nama untuk projek anda, pemasang akan meminta anda memilih kit permulaan dan rangka kerja ujian, memulakan repo Git dan melalui logistik persediaan lain.
Kit permulaan seperti Breeze atau Jetstream menyediakan beberapa perancah berasaskan Inertia.js siap pakai dengan apl tunjuk cara, tetapi kami tidak mahu perkara itu. Kami akan menetapkan perkara dari awal.
Menjelang akhir langkah pemasangan, anda akan digesa untuk memilih pangkalan data. Saya telah memilih pgsql kerana saya menggunakan PostgreSQL untuk menerangkan artikel ini. Pilih milik anda mengikut keutamaan pangkalan data anda.
Seterusnya, kita harus memasang integrasi Inertia.js untuk Laravel dengan menjalankan arahan komposer berikut dalam terminal:
composer require inertiajs/inertia-laravel
Arahan di atas akan memasang penyesuai Laravel untuk Inertia dan kebergantungannya. Ia juga akan menetapkan asas untuk Laravel dan Inertia untuk bekerjasama.
Selepas itu, mari tambahkan perisian tengah Inertia untuk mengendalikan permintaan Inersia dalam Laravel. Gunakan perintah artisan berikut untuk melakukannya:
laravel new
Daripada templat Blade lalai Laravel, kami akan menggunakan React untuk mengendalikan halaman dan komponen kami. Mari cd ke dalam folder projek kami dan pasang React and React DOM menggunakan arahan berikut. Gunakan pengurus pakej Node pilihan anda untuk melakukannya:
composer require inertiajs/inertia-laravel
Mari pasang pemalam Vite's React sebagai pergantungan pembangunan, kerana kami akan menggunakan Vite sebagai pengurus aset kami sepanjang projek:
php artisan inertia:middleware
Akhir sekali, tambahkan sokongan Inersia untuk React menggunakan arahan di bawah:
pnpm add react react-dom
Saya juga menggunakan CSS Tailwind dengan persediaan ini, yang sepenuhnya pilihan. Jika anda juga ingin memasang Tailwind CSS, ia melibatkan langkah yang sama yang anda ikuti semasa memasang Tailwind CSS dengan apl React atau Vue.
Pertama sekali, cari fail app.js dalam direktori resources/js, namakan semula kepada app.jsx dan gantikan kandungannya dengan yang berikut:
pnpm add --save-dev @vitejs/plugin-react
Perubahan di atas akan membantu Inertia mengenal pasti halaman kami dan memautkannya ke laluan yang betul.
Seterusnya, mari namakan semula fail welcome.blade.php dalam direktori resources/view kepada app.blade.php dan gantikan kandungannya dengan yang berikut:
pnpm add @inertiajs/react
Perhatikan bahawa dalam struktur HTML asas untuk halaman web, fail ini mengandungi beberapa arahan Inertia dan Vite yang diperlukan untuk menyuntik skrip tertentu untuk menjalankan muat semula, menambah skrip dan banyak lagi.
Seterusnya, tambahkan middleware yang diperlukan dalam fail bootstrap/app.php untuk mengendalikan permintaan khusus Inersia:
import { createInertiaApp } from "@inertiajs/react"; import { createRoot } from "react-dom/client"; import "../css/app.css"; createInertiaApp({ resolve: (name) => { const pages = import.meta.glob("./Pages/**/*.jsx", { eager: true }); return pages[`./Pages/${name}.jsx`]; }, setup({ el, App, props }) { createRoot(el).render(<App {...props} />); }, });
Mari kita konfigurasikan pemalam React untuk berfungsi dengan Vite untuk menikmati faedah yang diberikannya:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> @viteReactRefresh @vite('resources/js/app.jsx') @inertiaHead </head> <body> @inertia <div id="app"></div> </body> </html>
Akhir sekali, mari jalankan Laravel dan React kedua-duanya menggunakan arahan berikut:
<?php use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; use App\Http\Middleware\HandleInertiaRequests; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { $middleware->web(append: [ HandleInertiaRequests::class, ]); }) ->withExceptions(function (Exceptions $exceptions) { // })->create();
Kita boleh menulis skrip Shell untuk menjalankan arahan ini bersama-sama dalam tetingkap terminal tunggal, tetapi untuk memastikan perkara itu mudah dan mudah, mari jalankan arahan ini dalam dua terminal berasingan buat masa ini.
Selepas arahan ini berjaya dilaksanakan, anda boleh melihat dua URL tempatan. Jalankan Laravel untuk melihat rupa apl Laravel anda. Dan dengan itu, anda telah berjaya menyediakan apl asas dengan Inertia!
Anda boleh melakukan banyak perkara dengan apl Inersia anda. Mari lihat beberapa ciri menonjol yang perlu anda ketahui.
Untuk mengatur reka letak dan halaman yang berbeza dengan lebih baik, buat dua subdirektori dalam direktori sumber/js. Anda juga boleh mengurus komponen anda dalam direktori berasingan di sini dan menggunakannya dalam halaman anda sesuka hati.
Berikut ialah contoh ringkas reka letak utama kami:
import { defineConfig } from "vite"; import laravel from "laravel-vite-plugin"; import react from "@vitejs/plugin-react"; export default defineConfig({ plugins: [ laravel({ input: "resources/js/app.jsx", refresh: true, }), react(), ], resolve: { alias: { "@": "/resources/js", }, }, });
Ini pada asasnya adalah komponen yang berfungsi sebagai susun atur asas dan oleh itu diletakkan dalam folder susun atur khusus. MainLayout kini boleh digunakan sebagai komponen dalam halaman kami seperti yang ditunjukkan dalam kod berikut:
laravel new
Berikut ialah gambaran bagaimana MainLayout.jsx dan About.jsx boleh bersama-sama membentuk halaman kerja dengan gaya yang disediakan oleh Tailwind CSS:
Dengan penghalaan Laravel tradisional, mudah untuk mencipta laluan baharu dan menyambung ke halaman yang kami pelajari dalam segmen terakhir. Walaupun ia bukan berasaskan fail, penghalaan agak mudah untuk diuruskan. Jika anda telah bekerja dengan rangka kerja belakang berasaskan JavaScript seperti Express dan Fastify, anda sudah biasa dengan cara penghalaan berfungsi dalam Laravel.
Navigasi ke fail route/web.php, tambah laluan baharu dan paparkan halaman berkaitan menggunakan kaedah render Inertia seperti yang ditunjukkan dalam kod di bawah:
composer require inertiajs/inertia-laravel
Pautan dinamik dalam Inersia adalah serupa dengan React dan Next, dan boleh dilakukan menggunakan komponen Pautan Inertia seperti yang ditunjukkan di bawah:
php artisan inertia:middleware
Tangkapan skrin di bawah menunjukkan tingkah laku dinamik seperti SPA bagi navigasi yang baru kami pelajari mencipta dalam blok kod di atas:
Inersia menyediakan cangkuk useForm untuk berfungsi dengan permintaan GET dan POST untuk mengendalikan keadaan dan penyerahan borang. Ia juga menyediakan cangkuk usePage, yang membolehkan anda mengakses data kongsi yang dihantar daripada pelayan kepada pelanggan, seperti mesej kejayaan atau kegagalan.
Berikut ialah contoh mudah yang membuat permintaan GET dan POST untuk memuatkan dan menghantar data pengguna. Ambil perhatian bahawa permintaan GET dikendalikan secara tersirat oleh Inertia, sementara kami membuat permintaan POST dengan kaedah siaran daripada cangkuk useForm untuk menghantar data ke pelayan:
pnpm add react react-dom
Menggunakan pendekatan ini, kita boleh menyusun halaman untuk mendapatkan senarai data daripada pangkalan data, menunjukkannya dalam jadual HTML dan juga menambah lebih banyak data ini pada pangkalan data menggunakan borang seperti yang ditunjukkan di bawah:
Inertia.js menyediakan petunjuk kemajuan berasaskan NProgress. Anda boleh mendayakan ini semasa menubuhkan fail App.jsx dan menyediakan tetapan konfigurasi di sana untuk penunjuk kemajuan:
pnpm add --save-dev @vitejs/plugin-react
Jika anda tidak biasa dengan rupa animasi pemuatan NProgress, berikut adalah sedikit pandangan mengenainya:
Jika anda bekerja dengan Laravel dengan kerap, anda tidak memerlukan banyak masa untuk menyepadukan dan menggunakan pangkalan data ke dalam persediaan Inersia anda. Cuma tambah bukti kelayakan pangkalan data yang diperlukan dalam fail .env, pastikan anda menggunakan pemacu pangkalan data yang betul, semak fail config/database.php dan anda boleh pergi.
Dengan pangkalan data sedia ada, anda boleh menggunakan sistem migrasi Laravel untuk menentukan skema pangkalan data yang diperlukan. Saya tidak mempunyai pangkalan data, jadi saya mencipta satu dan mengisinya dengan beberapa data pengguna palsu menggunakan mekanisme Laravel Seeder untuk dipaparkan pada bahagian hadapan. Berikut adalah beberapa langkah yang saya ikuti selepas itu:
Bagi seseorang yang baharu dalam ekosistem Laravel atau yang tidak kerap menggunakan pangkalan data dengan Laravel, ini mungkin mengambil masa lebih sedikit daripada itu apabila memindahkan dan mengisi pangkalan data. Dalam kes sedemikian, mengosongkan cache konfigurasi mungkin sangat membantu untuk menyingkirkan ralat yang disebabkan oleh pilihan konfigurasi cache.
Aplikasi berpotensi untuk Inersia adalah banyak dan pelbagai. Memadankan Laravel dengan bahagian hadapan JavaScript moden menggunakan Inertia memudahkan pembangunan tindanan penuh untuk apl monolitik dengan ciri bahagian belakang yang mantap.
Walaupun ia tidak sesuai untuk setiap pasukan atau situasi, berikut ialah beberapa kes penggunaan di mana anda mungkin mendapati Inertia sebagai pilihan yang baik:
Inersia bukan satu-satunya penyelesaian untuk merapatkan rangka kerja dan perpustakaan bahagian pelayan dan pihak pelanggan. Livewire dan Hybridly ialah dua alat popular lain dengan set faedah dan kelemahan mereka sendiri. Apabila membandingkan pilihan anda, anda mungkin ingin mempertimbangkan:
Jadual ini menyediakan gambaran berguna tentang perbandingan ketiga-tiga ini untuk memaklumkan keputusan anda dengan lebih lanjut:
Feature | Inertia.js | Livewire | Hybridly |
---|---|---|---|
Server-side framework | Laravel, Rails | Laravel only | Laravel only |
Client-side framework | Vue.js, React, Svelte | None (PHP-based) | Vue.js |
SPA-like experience | Yes | Yes | Yes |
Server-side rendering (SSR) | Optional | Yes | Yes |
Real-time updates | No (needs additional setup) | Yes | Yes |
Full-page reloads | No | No | No |
Learning curve | Moderate | Low | Moderate |
Component-based architecture | Yes | Yes | Yes |
State management | Client-side | Server-side | Both |
SEO-friendly | Good | Excellent | Excellent |
Backend-driven UI | Partial | Full | Full |
Progressive enhancement | Limited | Yes | Yes |
File uploads | Supported | Native support | Supported |
Pagination | Supported | Native support | Supported |
Form handling | Client-side | Server-side | Both |
Authentication | Supported | Native support | Supported |
Authorization | Supported | Native support | Supported |
Testing | Both client & server | Server | Both client and server |
Ecosystem/Community | Small | Large | Small (newer) |
Performance | Very good | Good | Very good |
Bundle size | Larger (due to JS framework) | Smaller | Moderate |
Offline support | Possible | Limited | Possible |
Mobile app development | Possible | Not ideal | Possible |
Dalam panduan penggunaan ini, kami mempelajari apa itu Inertia.js dan cara ia digunakan untuk mencipta aplikasi hibrid menggunakan rangka kerja hujung belakang tradisional seperti Laravel dan perpustakaan bahagian hadapan moden seperti React.
Kami belajar tentang kebaikan dan keburukan menggunakan Inertia, beberapa aplikasi praktikalnya dan contoh untuk menyediakannya dengan Laravel. Jika anda terperangkap semasa mengikuti panduan, pertimbangkan untuk mengkloning repositori GitHub ini untuk projek yang kami bincangkan, atau berikan ulasan dan saya berbesar hati untuk membantu anda.
Tidak syak lagi bahawa bahagian hadapan semakin kompleks. Semasa anda menambahkan perpustakaan JavaScript baharu dan kebergantungan lain pada apl anda, anda memerlukan lebih keterlihatan untuk memastikan pengguna anda tidak menghadapi isu yang tidak diketahui.
LogRocket ialah penyelesaian pemantauan aplikasi bahagian hadapan yang membolehkan anda memainkan semula ralat JavaScript seolah-olah ia berlaku dalam penyemak imbas anda sendiri supaya anda boleh bertindak balas terhadap pepijat dengan lebih berkesan.
LogRocket berfungsi dengan sempurna dengan mana-mana apl, tanpa mengira rangka kerja dan mempunyai pemalam untuk log konteks tambahan daripada Redux, Vuex dan @ngrx/store. Daripada meneka mengapa masalah berlaku, anda boleh mengagregat dan melaporkan tentang keadaan permohonan anda semasa isu berlaku. LogRocket juga memantau prestasi apl anda, melaporkan metrik seperti beban CPU pelanggan, penggunaan memori pelanggan dan banyak lagi.
Bina dengan yakin — mulakan pemantauan secara percuma.
Atas ialah kandungan terperinci Panduan penggunaan Inertia.js: Gambaran keseluruhan, contoh dan alternatif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!