適用於 PHP 的路由器

前言廢話

在早期的時候,我曾經寫過一篇文章,是關於 Nginx 如何隱藏副檔名,其實一部分就是希望類似做到路由器的作用。

但隨著需求越來越高,偶然在網路上看到這個適用於 PHP 使用的路由器,這篇就來介紹他吧!

關於 PHP Router

我主要是在這個 Github 上看到的,https://github.com/phprouter/main

它的組成不複雜,基本上只要將 router.phproutes.php 放入目錄內即可。而關於網站的內容,建議可以置放於 views 裡(雖然沒有硬性規定)。

置放完後,編輯 routes.php 後,並將 Apache 用的 .htaccess 同樣置於目錄即可。若你是使用 Nginx 也沒關係,下方會給 config,繼續看下去就對了!

編輯 routes.php

其實 routes.php 檔案裡有非常詳細的解說,所以我這裡就將大部分會用到的帶過就好。

在網站的世界裡,通常會使用 GETPOSTPUTPATCHDELETE 幾種方式來要求資料,而這個 PHP Router 可以在 routes.php 限制頁面的要求方式。

最基礎的要求方式如下:

get('/', 'views/index.php');

這行 Code 就是指:當有人使用 GET 方式訪問 / 目錄時,就要使用 views/index.php 的這個檔案。

因此,你可以將 get() 改成 post()put()patch()delete() 等方法。

若你的檔案同時接受很多種要求方式,你也可以使用 any() 來接受任何要求。

Nginx 設定方式

對於 Apache 使用者而言,在他的 Github 有 .htaccess 檔案,放到目錄裡即可。

但像是我,是使用 Nginx 派的,官方並沒有提供相關設定檔。因此,我整理出了一份,請將 /etc/nginx/sites-enabled/ 裡的內容更新即可。

server {
    listen 80;
    root /var/www/html;
    index routes.php;
    charset utf-8;
    server_name test.example.com;

    location / {
        try_files $uri $uri/ /routes.php?$query_string;
    }

    error_page 404 /routes.php;

    location routes.php {

    }

    location ~ \.php {
        return 404;
    }

    location ~ (\.png|\.jpg|\.gif|\.jpeg|\.zip|\.css|\.svg|\.js)$ {}

    location = /routes.php {
            try_files $uri /routes.php?$query_string;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
            fastcgi_index routes.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

結語

這篇 Github 又拯救了我的一天。(#