cari
Rumahpembangunan bahagian belakangtutorial phpRouting PHP Cepat dengan PHROUTE

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.*" 
        } 
    }

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>

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.*" 
        } 
    }

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>

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></span>

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>

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"}]

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>

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.*" 
        } 
    }

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>

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></span>

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>

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"}]

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
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
Bagaimanakah PHP mengenal pasti sesi pengguna?Bagaimanakah PHP mengenal pasti sesi pengguna?May 01, 2025 am 12:23 AM

Phpidentifierauser'sSessionusingSessionCookiesandSessionIds.1) whensession_start () ISCALLED, phpGeneratesAuniquesessionIdstoredinacookienamedPhpsessidontheUserer'sBrowser.2) ThisIdallowsPhptoretRievesSessionDataFromtheserver.

Apakah beberapa amalan terbaik untuk mendapatkan sesi PHP?Apakah beberapa amalan terbaik untuk mendapatkan sesi PHP?May 01, 2025 am 12:22 AM

Keselamatan sesi PHP boleh dicapai melalui langkah -langkah berikut: 1. Gunakan session_regenerate_id () untuk menjana semula ID sesi apabila pengguna log masuk atau merupakan operasi penting. 2. Sulitkan ID sesi penghantaran melalui protokol HTTPS. 3. Gunakan session_save_path () untuk menentukan direktori selamat untuk menyimpan data sesi dan menetapkan kebenaran dengan betul.

Di manakah fail sesi php disimpan secara lalai?Di manakah fail sesi php disimpan secara lalai?May 01, 2025 am 12:15 AM

PhpsessionFileSarestoredIntHedirectorySpecifiedBySession.save_path, biasanya/tmponunix-likesystemsorc: \ windows \ temponwindows.tocustomethis: 1) usession_save_path ()

Bagaimana anda mengambil data dari sesi PHP?Bagaimana anda mengambil data dari sesi PHP?May 01, 2025 am 12:11 AM

ToretrievedataFromaphpsession, startTheSessionWithSsion_start () andaccessVariablesInthe $ _SessionArray.Forexample: 1) startTheSession: session_start ()

Bagaimana anda boleh menggunakan sesi untuk melaksanakan keranjang belanja?Bagaimana anda boleh menggunakan sesi untuk melaksanakan keranjang belanja?May 01, 2025 am 12:10 AM

Langkah -langkah untuk membina sistem keranjang belanja yang cekap menggunakan sesi termasuk: 1) Memahami definisi dan fungsi sesi. Sesi ini adalah mekanisme penyimpanan sisi pelayan yang digunakan untuk mengekalkan status pengguna merentasi permintaan; 2) melaksanakan pengurusan sesi asas, seperti menambah produk ke keranjang belanja; 3) memperluas penggunaan lanjutan, menyokong pengurusan kuantiti produk dan penghapusan; 4) Mengoptimumkan prestasi dan keselamatan, dengan berterusan data sesi dan menggunakan pengecam sesi yang selamat.

Bagaimana anda membuat dan menggunakan antara muka dalam PHP?Bagaimana anda membuat dan menggunakan antara muka dalam PHP?Apr 30, 2025 pm 03:40 PM

Artikel ini menerangkan cara membuat, melaksanakan, dan menggunakan antara muka dalam PHP, memberi tumpuan kepada manfaat mereka untuk organisasi kod dan penyelenggaraan.

Apakah perbezaan antara crypt () dan password_hash ()?Apakah perbezaan antara crypt () dan password_hash ()?Apr 30, 2025 pm 03:39 PM

Artikel ini membincangkan perbezaan antara crypt () dan password_hash () dalam php untuk hashing kata laluan, memberi tumpuan kepada pelaksanaan, keselamatan, dan kesesuaian untuk aplikasi web moden.

Bagaimanakah anda dapat mencegah skrip lintas tapak (XSS) dalam PHP?Bagaimanakah anda dapat mencegah skrip lintas tapak (XSS) dalam PHP?Apr 30, 2025 pm 03:38 PM

Artikel membincangkan mencegah skrip lintas tapak (XSS) dalam PHP melalui pengesahan input, pengekodan output, dan menggunakan alat seperti OWASP ESAPI dan pembersih HTML.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual