Rumah > pembangunan bahagian belakang > tutorial php > Routing PHP Cepat dengan PHROUTE

Routing PHP Cepat dengan PHROUTE

Lisa Kudrow
Lepaskan: 2025-02-20 12:25:16
asal
129 orang telah melayarinya

Routing PHP Cepat dengan PHROUTE

PHROUTE adalah pakej yang menarik: ia adalah penghala berasaskan ekspresi biasa yang cepat yang anda boleh dengan mudah dilaksanakan dalam projek kecil dan sederhana. Walau bagaimanapun, ia bukan hanya sangat cepat: terdapat penapis, kumpulan penapis dan laluan yang dinamakan. Anda juga boleh menggunakan sistem pengawal asas jika keadaan semakin besar.

yang mengatakan, hari ini kita akan melihat cara menggunakannya dan bagaimana untuk melaksanakan ciri -cirinya dalam projek sampel. Juga, kita akan melihat apa yang ada di bawah tudung: PHROUTE adalah hasil daripada banyak eksperimen dan ujian oleh orang yang berlainan.

mari kita mulakan dengan memasangnya!

Takeaways Key

    PHROUTE adalah pakej penghalaan berasaskan Regex yang sangat efisien untuk projek PHP kecil dan sederhana, menawarkan ciri-ciri seperti penapis, kumpulan penapis, dan sistem pengawal asas untuk aplikasi yang lebih besar.
  • Pemasangan PHROUTE adalah mudah menggunakan komposer, meningkatkan kelajuan persediaan projek dan kesederhanaan.
  • PHROUTE menyokong pelbagai kaedah HTTP dan membolehkan penghalaan dinamik dengan parameter pilihan, menjadikannya serba boleh untuk pembangunan API dan aplikasi web lain.
  • Penapis dalam PHROUTE boleh digunakan sebelum atau selepas pengendalian laluan, menyediakan alat yang berkuasa untuk kawalan akses dan pengesahan data, meningkatkan keselamatan dan integriti data.
  • Walaupun PHROUTE cemerlang dalam prestasi penghalaan, dengan ketara mengatasi beberapa router lain seperti Laravel, ia kini tidak mempunyai fungsi pengawal lanjutan dan dokumentasi komprehensif, kawasan yang dikenal pasti untuk peningkatan masa depan.
  • Pasang
  • Anda boleh menambah PHROUTE ke projek anda dengan komposer dalam beberapa saat. Cukup tambahkan baris ini ke fail komposer.json anda:

Taipkan perintah pemasangan komposer dan anda masuk. Sekarang, mari kita beralih ke projek ujian kami.

Projek Contoh dan Contoh Pertama
{ 
        "require": 
        { 
            "phroute/phroute": "1.*" 
        } 
    }
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Untuk pemahaman yang lebih baik tentang setiap konsep PHROUTE, adalah idea yang baik untuk mempunyai projek sampel untuk bekerja dengan. Hari ini kita akan membuat API asas untuk perkhidmatan pangkalan data buku.

inilah skema pangkalan data yang akan kami gunakan:

Jika anda ingin melakukan beberapa ujian, ini adalah pembuangan skema SQL yang saya gunakan (dengan beberapa data dummy tambahan).

Routing PHP Cepat dengan PHROUTE Kami tidak akan menulis sesuatu yang sangat rumit. Sebenarnya, menulis beberapa laluan untuk mencontohi permintaan API dengan cara yang sangat asas akan mencukupi. Sekiranya anda ingin menulis API dunia sebenar terdapat banyak konsep yang perlu anda ketahui, tetapi hari ini kita hanya melihat Phroute.

Sebelum kita memulakan dengan laluan tertentu, mari kita menganalisis struktur aplikasi utama. Inilah yang akan kita masukkan ke dalam fail index.php kami.

<span>CREATE TABLE IF NOT EXISTS authors (id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(250) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;
</span>
    <span>INSERT INTO authors (id, name) 
</span>    <span>VALUES 
</span>    <span>(1, 'Dan Brown'), 
</span>    <span>(2, 'Paulo Coelho');
</span>
    <span>CREATE TABLE IF NOT EXISTS categories (id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(250) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;
</span>
    <span>INSERT INTO categories (id, name) 
</span>    <span>VALUES 
</span>    <span>(1, 'Thriller'), 
</span>    <span>(2, 'Novel');
</span>
    <span>CREATE TABLE IF NOT EXISTS books (id int(10) unsigned NOT NULL AUTO_INCREMENT,   title varchar(250) NOT NULL, isbn varchar(50) NOT NULL, year int(11) NOT NULL,   pages int(11) NOT NULL, author_id int(10) unsigned NOT NULL, category_id int(10) unsigned NOT NULL, PRIMARY KEY (id), KEY author_id (author_id,category_id), KEY category_id (category_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7;
</span>
    <span>INSERT INTO books (id, title, isbn, year, pages, author_id, category_id) 
</span>    <span>VALUES 
</span>    <span>(1, 'The Zahir', '0-06-083281-9', 2005, 336, 2, 2), 
</span>    <span>(2, 'The Devil and Miss Prym', '0-00-711605-5', 2000, 205, 2, 2), 
</span>    <span>(3, 'The Alchemist', '0-06-250217-4', 1988, 163, 2, 2), 
</span>    <span>(4, 'Inferno', '978-0-385-53785-8', 2013, 480, 1, 1), 
</span>    <span>(5, 'The Da Vinci Code', '0-385-50420-9', 2003, 454, 1, 1), 
</span>    <span>(6, 'Angels & Demons', '0-671-02735-2', 2000, 616, 1, 1);</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kami mempunyai tiga kaedah utiliti: ProcessInput, ProcessOutput dan GetPDoinstance. Kami akan menggunakan dua yang pertama untuk memastikan kami mendapat input yang betul dan output yang betul. Yang ketiga akan menyediakan contoh PDO yang diperlukan.

Nota: Parameter kedua kaedah array_slice adalah "3" kerana persediaan projek khusus saya. Tukarnya apabila URL asas anda berubah.

Selepas itu, kami mengisytiharkan laluan kami menggunakan Objek $ Router, contoh kelas rutintroller. Kemudian, keajaiban berlaku dalam kaedah $ dispatcher-> Dispatch (), yang mengambil dua parameter: kaedah permintaan $ _server (get, post dan lain-lain) dan permintaan khusus URI. Dengan maklumat ini, penghantar memanggil laluan yang betul dan melaksanakan kod dalam penutupan. Nilai pulangan disimpan dalam pemboleh ubah tindak balas $, yang diberikan kepada kaedah prosesOtput () yang bergema sebagai rentetan JSON.

seperti yang anda lihat, dalam contoh khusus ini kami menyatakan satu laluan: Hello.

Nota: Jika anda mahu, bagaimanapun, anda boleh meningkatkan struktur sebenar. Buat fail baru dan panggilnya Routes.php. Kemudian, masukkannya dari fail index.php utama selepas permulaan objek $ Router: Anda akan mempunyai semua laluan anda dalam fail berasingan. Penyelesaian yang lebih elegan, pada pendapat saya.

yang mengatakan, anda sekarang tahu semua yang anda perlukan mengenai struktur asas contoh kami.

mari buat laluan pertama kami!

Laluan

Laluan mudah

OK, mari kita lihat apa yang boleh kita lakukan dengan laluan dan berapa banyak kita boleh menyesuaikannya untuk keperluan kita.

kita bermula dengan perkara yang paling mudah: senarai penulis.

{ 
        "require": 
        { 
            "phroute/phroute": "1.*" 
        } 
    }
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Di baris pertama kami mengisytiharkan nama laluan kami, penulis.

mari kita menguji laluan: ini adalah hasilnya.

<span>CREATE TABLE IF NOT EXISTS authors (id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(250) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;
</span>
    <span>INSERT INTO authors (id, name) 
</span>    <span>VALUES 
</span>    <span>(1, 'Dan Brown'), 
</span>    <span>(2, 'Paulo Coelho');
</span>
    <span>CREATE TABLE IF NOT EXISTS categories (id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(250) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;
</span>
    <span>INSERT INTO categories (id, name) 
</span>    <span>VALUES 
</span>    <span>(1, 'Thriller'), 
</span>    <span>(2, 'Novel');
</span>
    <span>CREATE TABLE IF NOT EXISTS books (id int(10) unsigned NOT NULL AUTO_INCREMENT,   title varchar(250) NOT NULL, isbn varchar(50) NOT NULL, year int(11) NOT NULL,   pages int(11) NOT NULL, author_id int(10) unsigned NOT NULL, category_id int(10) unsigned NOT NULL, PRIMARY KEY (id), KEY author_id (author_id,category_id), KEY category_id (category_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7;
</span>
    <span>INSERT INTO books (id, title, isbn, year, pages, author_id, category_id) 
</span>    <span>VALUES 
</span>    <span>(1, 'The Zahir', '0-06-083281-9', 2005, 336, 2, 2), 
</span>    <span>(2, 'The Devil and Miss Prym', '0-00-711605-5', 2000, 205, 2, 2), 
</span>    <span>(3, 'The Alchemist', '0-06-250217-4', 1988, 163, 2, 2), 
</span>    <span>(4, 'Inferno', '978-0-385-53785-8', 2013, 480, 1, 1), 
</span>    <span>(5, 'The Da Vinci Code', '0-385-50420-9', 2003, 454, 1, 1), 
</span>    <span>(6, 'Angels & Demons', '0-671-02735-2', 2000, 616, 1, 1);</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Great!

Menambah parameter

Sekarang kita boleh membuat langkah ke hadapan: bagaimana dengan menambah parameter, untuk mendapatkan butiran penulis tunggal, memandangkan id?

sesuatu seperti itu:

<span><span><?php
</span></span><span>
</span><span>    <span>require 'vendor/autoload.php';
</span></span><span>
</span><span>    <span>function processInput($uri){        
</span></span><span>        <span>$uri = implode('/', 
</span></span><span>            <span>array_slice(
</span></span><span>                <span>explode('/', $_SERVER['REQUEST_URI']), 3));         
</span></span><span>
</span><span>            <span>return $uri;    
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>function processOutput($response){
</span></span><span>        <span>echo json_encode($response);    
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>function getPDOInstance(){
</span></span><span>        <span>return new PDO('mysql:host=localhost;dbname=booksapi;charset=utf8', 'root', '');
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>$router = new Phroute<span>\RouteCollector</span>(new Phroute<span>\RouteParser</span>);
</span></span><span>
</span><span>    <span>$router->get('hello', function(){ 
</span></span><span>        <span>return 'Hello, PHRoute!';   
</span></span><span>    <span>});
</span></span><span>
</span><span>    <span>$dispatcher = new Phroute<span>\Dispatcher</span>(router);
</span></span><span>
</span><span>    <span>try {
</span></span><span>
</span><span>        <span>$response = $dispatcher->dispatch($_SERVER['REQUEST_METHOD'], processInput($_SERVER['REQUEST_URI']));
</span></span><span>
</span><span>    <span>} catch (Phroute<span>\Exception\HttpRouteNotFoundException</span> $e) {
</span></span><span>
</span><span>        <span>var_dump($e);      
</span></span><span>        <span>die();
</span></span><span>
</span><span>    <span>} catch (Phroute<span>\Exception\HttpMethodNotAllowedException</span> $e) {
</span></span><span>
</span><span>        <span>var_dump($e);       
</span></span><span>        <span>die();
</span></span><span>
</span><span>    <span>}
</span></span><span>
</span><span>    <span>processOutput($response);</span></span>
Salin selepas log masuk
Salin selepas log masuk

anda boleh lulus parameter menggunakan pemegang tempat {variable_name}, dengan nama yang sama sebagai parameter untuk penutupan. Dalam contoh ini, kita mempunyai tempat letak {id} yang sepadan dengan parameter $ ID. Anda boleh menentukan mana -mana parameter yang anda mahukan: tiada had.

Kadang -kadang parameter boleh menjadi pilihan. Mari buat contoh lain: Jika kita menggunakan URL buku, kita ingin mengambil senarai semua buku pangkalan data. Tetapi, jika kita menentukan ID seperti Buku/1 kita akan mendapatkan senarai buku kategori yang diberikan.

di sini kita pergi:

<span>$router->get('authors', function(){      
</span>        <span>$db = getPDOInstance();
</span>
        <span>$sql = 'SELECT * FROM authors;';  
</span>        <span>$st = $db->prepare($sql, array(PDO<span>::</span>ATTR_CURSOR => PDO<span>::</span>CURSOR_FWDONLY));
</span>
        <span>$st->execute();
</span>
        <span>$result = $st->fetchAll(PDO<span>::</span>FETCH_CLASS);
</span>	    
        <span>return $result;  
</span>    <span>});</span>
Salin selepas log masuk
Salin selepas log masuk

Menambah "?" Selepas pemegang tempat parameter bermakna ia akan menjadi pilihan. Sudah tentu, adalah idea yang baik untuk menentukan nilai lalai dalam perisytiharan penutupan.

Menggunakan kata kerja yang berbeza

Sehingga kini kami membuat hanya mendapatkan laluan. Bagaimana dengan kata kerja HTTP yang lain?

tidak ada masalah. Lihatlah di sini:

[{"id":"1","name":"Dan Brown"},{"id":"2","name":"Paulo Coelho"}]
Salin selepas log masuk
Salin selepas log masuk

mari kita buat contoh laluan pos. Sudah tiba masanya untuk menambah buku baru ke koleksi kami!

<span>$router->get('author/{id}', function($id){      
</span>        <span>$db = getPDOInstance(); 
</span>
        <span>$sql = 'SELECT * FROM `authors` WHERE `id` = :id';     
</span>    
        <span>$st = $db->prepare($sql, array(PDO<span>::</span>ATTR_CURSOR => PDO<span>::</span>CURSOR_FWDONLY));
</span>        <span>$st->execute(array(':id' => $id));
</span>
        <span>$result = $st->fetchAll(PDO<span>::</span>FETCH_CLASS);
</span> 
        <span>return $result;
</span>    <span>});</span>
Salin selepas log masuk

Mari kita bayangkan bahawa kita mempunyai borang untuk mengisi data buku: atribut tindakannya akan menunjuk ke laluan buku yang kita buat sekarang!

Sekarang kita akan mengambil satu lagi langkah ke hadapan: sudah tiba masanya untuk "melindungi" laluan kita!

penapis

Sebenarnya, setiap orang yang memasuki laluan pos buku boleh memasukkan buku baru dalam koleksi kami. Itu sejuk, tetapi ini tidak seperti perkara yang biasanya berlaku. Bagaimana jika kita mahu melindungi laluan kita? Penapis adalah apa yang kita perlukan.

penapis sangat serupa dengan laluan: mereka mempunyai nama dan penutupan yang berkaitan, dilaksanakan apabila penapis dipanggil di suatu tempat.

Jadi, apakah perbezaannya? Penapis boleh dipanggil dengan mudah sebelum (atau selepas) laluan.

penapis

mari kita buat contoh:

{ 
        "require": 
        { 
            "phroute/phroute": "1.*" 
        } 
    }
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Pertama sekali, kami mengisytiharkan penapis dengan kaedah penapis () objek $ penghala. Sintaks adalah sama seperti dengan laluan. Kami memberikan nama dan penutupan yang akan dilaksanakan pada masa yang tepat.

ok, tapi apakah "masa yang tepat"?

Kami memutuskan sekarang: kami hanya menambah parameter ketiga ke kaedah pos (). Parameter ketiga ini adalah array, di mana kami menentukan kunci sebelum ini dengan nama penapis (logged_in). Dari saat ini, sebelum setiap panggilan ke laluan pos buku, penapis Logged_in (dan melaksanakan kandungan penutupannya) juga akan dipanggil.

Dalam kes khusus ini, kami menyemak pembolehubah user_id sesi untuk melihat sama ada pengguna log masuk.

Terdapat juga kunci selepas yang digunakan untuk menjalankan penapis tepat selepas panggilan laluan. Berikut adalah contoh.

<span>CREATE TABLE IF NOT EXISTS authors (id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(250) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;
</span>
    <span>INSERT INTO authors (id, name) 
</span>    <span>VALUES 
</span>    <span>(1, 'Dan Brown'), 
</span>    <span>(2, 'Paulo Coelho');
</span>
    <span>CREATE TABLE IF NOT EXISTS categories (id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(250) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;
</span>
    <span>INSERT INTO categories (id, name) 
</span>    <span>VALUES 
</span>    <span>(1, 'Thriller'), 
</span>    <span>(2, 'Novel');
</span>
    <span>CREATE TABLE IF NOT EXISTS books (id int(10) unsigned NOT NULL AUTO_INCREMENT,   title varchar(250) NOT NULL, isbn varchar(50) NOT NULL, year int(11) NOT NULL,   pages int(11) NOT NULL, author_id int(10) unsigned NOT NULL, category_id int(10) unsigned NOT NULL, PRIMARY KEY (id), KEY author_id (author_id,category_id), KEY category_id (category_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7;
</span>
    <span>INSERT INTO books (id, title, isbn, year, pages, author_id, category_id) 
</span>    <span>VALUES 
</span>    <span>(1, 'The Zahir', '0-06-083281-9', 2005, 336, 2, 2), 
</span>    <span>(2, 'The Devil and Miss Prym', '0-00-711605-5', 2000, 205, 2, 2), 
</span>    <span>(3, 'The Alchemist', '0-06-250217-4', 1988, 163, 2, 2), 
</span>    <span>(4, 'Inferno', '978-0-385-53785-8', 2013, 480, 1, 1), 
</span>    <span>(5, 'The Da Vinci Code', '0-385-50420-9', 2003, 454, 1, 1), 
</span>    <span>(6, 'Angels & Demons', '0-671-02735-2', 2000, 616, 1, 1);</span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Jika anda perlukan, anda juga boleh menentukan lebih daripada satu penapis pada masa yang sama.
Yang perlu anda lakukan ialah menggunakan pelbagai rentetan dan bukannya satu rentetan.

<span><span><?php
</span></span><span>
</span><span>    <span>require 'vendor/autoload.php';
</span></span><span>
</span><span>    <span>function processInput($uri){        
</span></span><span>        <span>$uri = implode('/', 
</span></span><span>            <span>array_slice(
</span></span><span>                <span>explode('/', $_SERVER['REQUEST_URI']), 3));         
</span></span><span>
</span><span>            <span>return $uri;    
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>function processOutput($response){
</span></span><span>        <span>echo json_encode($response);    
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>function getPDOInstance(){
</span></span><span>        <span>return new PDO('mysql:host=localhost;dbname=booksapi;charset=utf8', 'root', '');
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>$router = new Phroute<span>\RouteCollector</span>(new Phroute<span>\RouteParser</span>);
</span></span><span>
</span><span>    <span>$router->get('hello', function(){ 
</span></span><span>        <span>return 'Hello, PHRoute!';   
</span></span><span>    <span>});
</span></span><span>
</span><span>    <span>$dispatcher = new Phroute<span>\Dispatcher</span>(router);
</span></span><span>
</span><span>    <span>try {
</span></span><span>
</span><span>        <span>$response = $dispatcher->dispatch($_SERVER['REQUEST_METHOD'], processInput($_SERVER['REQUEST_URI']));
</span></span><span>
</span><span>    <span>} catch (Phroute<span>\Exception\HttpRouteNotFoundException</span> $e) {
</span></span><span>
</span><span>        <span>var_dump($e);      
</span></span><span>        <span>die();
</span></span><span>
</span><span>    <span>} catch (Phroute<span>\Exception\HttpMethodNotAllowedException</span> $e) {
</span></span><span>
</span><span>        <span>var_dump($e);       
</span></span><span>        <span>die();
</span></span><span>
</span><span>    <span>}
</span></span><span>
</span><span>    <span>processOutput($response);</span></span>
Salin selepas log masuk
Salin selepas log masuk

Kumpulan penapis

Bayangkan kes dunia sebenar: katakan kita mempunyai tiga laluan pos, satu untuk setiap entiti (pengarang, buku, kategori). Ia akan membosankan untuk menambah penapis logged_in tiga kali berbeza.

Jangan bimbang: Kumpulan penapis ada di sini untuk membantu.

<span>$router->get('authors', function(){      
</span>        <span>$db = getPDOInstance();
</span>
        <span>$sql = 'SELECT * FROM authors;';  
</span>        <span>$st = $db->prepare($sql, array(PDO<span>::</span>ATTR_CURSOR => PDO<span>::</span>CURSOR_FWDONLY));
</span>
        <span>$st->execute();
</span>
        <span>$result = $st->fetchAll(PDO<span>::</span>FETCH_CLASS);
</span>	    
        <span>return $result;  
</span>    <span>});</span>
Salin selepas log masuk
Salin selepas log masuk

Dengan kumpulan tunggal ini, kami menentukan penapis yang sama untuk tiga laluan yang berbeza.

Nota: Jika anda memerlukan, anda juga boleh bersarang kumpulan dalam kumpulan lain sebanyak yang anda suka.

Projek Berkembang? Masa untuk menggunakan pengawal!

Projek kami sedang membesar dan menganjurkan pangkalan kod kami dalam satu fail yang sangat berat, dan ceroboh. Bagaimana dengan menggunakan pengawal?

Ya: PHROUTE bukan hanya mengenai laluan. Apabila keadaan menjadi liar sudah tiba masanya untuk menyusunnya.

Pertama sekali, mari kita lihat bagaimana struktur pengawal seperti. Lihat contoh ini (kita boleh memasukkannya ke dalam fail Routes.php kami):

[{"id":"1","name":"Dan Brown"},{"id":"2","name":"Paulo Coelho"}]
Salin selepas log masuk
Salin selepas log masuk

Kami mencipta kelas pengarang. Dalam kelas ini kita meletakkan dua kaedah: getIndex () dan postadd ().

Kemudian, dengan kaedah pengawal () objek $ penghala, kami menghubungkan URL pengarang ke kelas pengarang. Oleh itu, jika kita memasuki pengarang URL dalam pelayar kami, kaedah getIndex () akan dipanggil secara automatik. Sama berlaku untuk kaedah postadd (), yang akan terikat kepada pengarang/tambah (pos) url.

ciri nama auto ini agak menarik, tetapi sebenarnya tidak mencukupi.

Bahagian pengawal berada pada peringkat awal pembangunan dan memerlukan banyak penambahbaikan. Salah satunya adalah kemungkinan untuk menentukan parameter untuk kaedah pengawal. Atau, mungkin, cara mudah untuk menentukan penapis untuk beberapa kaedah pengawal (dan bukan "semua atau tidak").

Kesimpulan

Terdapat banyak kerja yang perlu dilakukan, terutamanya di sebelah pengawal. Sebagai pemaju, saya fikir ia akan menjadi baik untuk mempunyai kelas pengawal asas generik untuk mengendalikan semua kerja kotor (dengan penapis, parameter kaedah dan sebagainya). Terdapat juga kekurangan dokumentasi.

Sebaliknya, PHROUTE datang dengan penghala yang sangat cepat. Pada halaman GitHub projek, anda dapat melihat beberapa statistik mengenai perbandingan dengan penghala teras Laravel: hasilnya menakjubkan. Dalam senario kes terburuk Phroute adalah kira -kira empat puluh (ya, 40) kali lebih cepat.

Jika anda ingin mengetahui butiran khusus mengenai "enjin" di belakang penghala ini, anda boleh melawat halaman Nikic di GitHub di mana dia menjelaskan setiap orang, dengan ujian, tanda aras dan hasil yang berkaitan.

adakah anda akan mencuba Phroute? Beritahu saya apa yang anda fikirkan!

Soalan Lazim (Soalan Lazim) Mengenai Routing PHP Cepat dengan PHROUTE

Apa itu PHROUTE dan mengapa penting dalam penghalaan PHP? Adalah penting dalam penghalaan PHP kerana ia menyediakan cara yang mudah dan mudah untuk menentukan laluan dalam aplikasi PHP anda. PHROUTE membolehkan anda memetakan URL ke fungsi atau kaedah tertentu dalam aplikasi anda, menjadikannya lebih mudah untuk mengurus dan mengatur kod anda. Ia juga menyokong parameter dan penapis laluan, memberi anda lebih banyak kawalan ke atas bagaimana aplikasi anda bertindak balas terhadap URL yang berbeza. Aplikasi PHP menggunakan komposer, alat pengurusan pergantungan untuk PHP. Anda boleh memasang komposer dengan mengikuti arahan di laman web rasminya. Sebaik sahaja anda memasang komposer, anda boleh memasang PHROUTE dengan menjalankan arahan berikut di terminal anda: komposer memerlukan phroute/phroute. Ini akan memuat turun dan memasang PHROUTE dalam aplikasi anda.

Bagaimana saya menentukan laluan menggunakan PHROUTE? Anda perlu membuat contoh kelas PhouperOuteCollector. Anda kemudian boleh menggunakan kaedah laluan kelas ini untuk menentukan laluan anda. Kaedah laluan mengambil tiga parameter: Kaedah HTTP (GET, Post, dll), corak URL, dan fungsi atau kaedah pengendali. Berikut adalah contoh:

$ router = new phrouterOuteCollector ();

$ router-> route ('get', '/users/{id}', function ($ id) {

kembali "ID Pengguna: $ id";

});

Bagaimana saya mengendalikan parameter laluan dengan phroute?

Parameter laluan adalah bahagian URL yang boleh berbeza -beza. Dalam Phroute, anda boleh menentukan parameter laluan dengan memasukkannya dalam corak URL apabila menentukan laluan anda. Parameter laluan disertakan dalam pendakap keriting {}. Apabila laluan dipadankan, nilai parameter laluan disalurkan kepada fungsi atau kaedah pengendali sebagai argumen. Berikut adalah contoh:

$ router = new phrouterOuteCollector ();
$ router-> route ('get', '/users/{id}', function ($ id) {
kembali "ID Pengguna: $ id";
); PHROUTE adalah fungsi atau kaedah yang dijalankan sebelum atau selepas laluan dipadankan. Mereka boleh digunakan untuk melaksanakan tugas seperti pengesahan atau pengesahan input. Anda boleh menentukan penapis menggunakan kaedah penapis kelas PhouterOuteCollector, dan anda boleh menggunakannya ke laluan menggunakan kaedah sebelum dan selepas. Berikut adalah contoh:

$ router = new PhouterOuteCollector ();

$ router-> filter ('auth', function () { if (! Isset ($ _ session ['user'] )) { return false;

}
});
$ router-> route ('get', '/dashboard', ['DashboardController', 'Show'])-> Sebelum ('auth');

Bagaimana saya mengendalikan 404 kesilapan dengan phroute? yang berlaku apabila tiada laluan sepadan dengan URL yang diminta. Anda boleh menentukan 404 pengendali menggunakan kaedah notfound kelas phrouterOuteCollector. Pengendali 404 adalah fungsi atau kaedah yang dipanggil apabila ralat 404 berlaku. Berikut adalah contoh:

$ router = new phrouterOuteCollector ();
$ router-> notFound (function () {
return '404 - Page tidak dijumpai';

});

bagaimana saya menghantar laluan dengan phroute?

Setelah anda menentukan laluan anda, anda boleh menghantarnya menggunakan Kelas PhouterOutedispatcher. Kaedah penghantaran kelas ini mengambil kaedah HTTP dan URL sebagai parameter, dan mengembalikan hasil fungsi atau kaedah pengendali laluan yang dipadankan. Berikut adalah contoh:

$ dispatcher = new PhrouperOuteDisPatcher ($ router-> getData ());
$ response = $ dispatcher-> Dispatch ($ _ server ['request_method'], $ _server ['request_uri [' ']); Rangka Kerja?

Ya, anda boleh menggunakan PHROUTE dengan kerangka PHP yang lain. PHROUTE adalah perpustakaan mandiri, yang bermaksud ia tidak bergantung kepada rangka kerja tertentu. Anda boleh menggunakannya dalam mana -mana aplikasi PHP, tanpa mengira rangka kerja yang anda gunakan. Walau bagaimanapun, anda mungkin perlu menyesuaikan kod anda untuk berfungsi dengan sistem penghalaan rangka kerja anda.

Bagaimana saya boleh menyahpepijat laluan di PHROUTE? Kaedah ini mengembalikan pelbagai laluan yang ditetapkan, yang boleh berguna untuk tujuan debugging. Berikut adalah contoh:

$ router = new phrouterOuteCollector ();
$ router-> route ('get', '/users/{id}', function ($ id) {
kembali "ID Pengguna: $ id"; ); print_r ($ router-> debug ()); Pengecualian dalam PHROUTE?

Pengecualian dalam PHROUTE boleh dikendalikan dengan membungkus kod penghantaran anda dalam blok percubaan. Sekiranya pengecualian dilemparkan semasa proses penghantaran, anda boleh menangkapnya dan mengendalikannya dengan sewajarnya. Berikut adalah contoh:

cuba {

$ dispatcher = new phruterOutedispatcher ($ router-> getData ()); $ _Server ['request_uri']);

echo $ response;

} tangkapan (pengecualian $ e) { echo 'Ralat berlaku:'. $ e-> getMessage ();

}

Atas ialah kandungan terperinci Routing PHP Cepat dengan PHROUTE. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan