簡體   English   中英

像Slim Framework這樣的路由類

[英]Routing Class like Slim Framework

我使用Slim Framework for Routing編寫了一個CMS。 現在,我想將所有代碼放在類中的Routes中,並由我自己連接網址(沒有Slim)

我有一個包含如下路由的數據庫表:

url: /app/user/list
URI: index.php?com=user&fnc=list

但我也想擁有這樣的路由以便動態管理路由:

url: /app/user/:id/profile
URI: index.php?com=user&func=profile&uid={id}

Slim框架使用正則表達式處理這些路由。 這也是我也要處理的方式。 但是我對正則表達式不太滿意。

我的想法是,我構建一個小的Router類,將當前的URL連接起來並在數據庫表中搜索以獲得uri,以便我可以使用其函數(fnc)調用該類(com)。 例如,配置文件函數獲取uid。

不幸的是,我無法排除苗條框架中使用的功能。 我什至不想使用其他框架。

所以我的問題是: 有沒有人建立過我解釋過的課程?是否有任何起點可以擴展? 一些代碼也很好:D

(我使用Smarty Template Engine渲染特定的tpl)

這是一項訓練活動,例如向自己證明自己可以做到嗎?

您可以(不使用正則表達式)用/字符分割請求uri,然后依次遍歷數組,並使用與ActiveRecord相同的機制(據我所知),即

  1. 讀取split函數返回的數組項
  2. 如果參數與預定義的控制器(在您的情況下為類)匹配,則在不返回錯誤或退回默認控制器的情況下使用該類
  3. 如果參數與在2中選擇的控制器的方法匹配,則在不返回錯誤或返回默認行為的情況下使用該方法
  4. 如果數組的其余部分不為空,則將其余項用作在3中選擇的方法的參數
  5. 使用參數調用方法並將結果返回給用戶。

優點之一是您可以使用反射動態方法(ahem函數)調用 ...

這樣,您甚至不需要擁有所有可能的uri的數據庫(除了白名單),您只需要檢查類(通過自動加載或使用Java方式通過文件系統):一個類=一個文件或方法是否存在(通過method_exists )來滿足請求。

我曾經將這種技術用於基於Flex的客戶端的Web服務原型:構建Flex客戶端的那個家伙事先不知道他需要的表,而且我不可用(讀為“ assigned”)為他可能調用的每個電話做包裝因此,我最終編寫了一些代碼,這些代碼使用oracle元數據來檢查模式中是否存在表,然后在PHP中動態圍繞它構建CRUD(粗略,我知道)包裝器:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM