YAMF(另一個MVC框架)是一個小的PHP MVC框架,旨在讓您在沒有大量設置工作的情況下快速使用MVC範式。您所需要的只是一個接受.htaccess文件的Web服務器,您幾乎可以使用!
最低要求:PHP 7.0+。
Use this template按鈕,克隆存儲庫和/或將此項目用作您自己項目的模板。config.php 。調整您想要的任何參數,或在$app中添加新參數,例如會話邏輯。默認情況下,您無需調整任何內容即可使您的網站啟動並運行。config-private.sample.php等config-private.php例如,您可以將$app->db設置為本地數據庫的PDO實例。請注意, config-private.php將在config.php中的任何內容之前加載。use Yamf/XYZ ,您需要使用Composer。使用作曲家非常容易:只需轉到下載頁面並在頂部運行腳本即可。 (注意:如果您在Windows上,則需要在介紹頁面上按照說明。)composer install (如果您的目錄中有一個composer.phar文件,請運行php composer.phar install install )。它會坐下來思考一分鐘。他們不在這裡,也不是故意的! YAMF被故意編寫為不使用作曲家自動加載器以外的任何外部依賴項來降低進入PHP中MVC範式的進入障礙。如果您想要任何這些東西,只需將它們與您喜歡的依賴經理(例如作曲家)一起吸入。由於作曲家已經為PSR-4自動加載而運行該項目是必要的,因此我們建議使用Composer。 vendor/autoload.php已在init.php中為您包含在內。
有關查看模板的註釋,請參見有關子類的部分。
如果您在YAMF上閱讀以下文檔,那麼您可能會比只是跳入並嘗試自己閱讀代碼的情況要好得多。 :)只需要幾分鐘,這是值得的!
為了促進配置參數的簡單傳遞,例如數據庫設置等,YAMF將類YamfAppConfig的$app變量傳遞給每個控制器函數。您可以設置此變量以存儲數據庫PDO對象,更改視圖擴展名或文件夾位置以及許多其他設置。如果要將自己的值添加到$app中,則可以創建一個從YamfAppConfig派生的類,並在config.php中更改appConfigClass設置,以指向您的自定義類。請注意,您的自定義類必須來自YamfAppConfig !請參閱config.php查看YAMF通過$app傳遞的所有設置和值。值得注意的是,您可以:
viewsFolderName )viewExtension )defaultHeaderName / defaultFooterName )config-private.php中設置) $app自動為您提供。
您可能想做的第一件事就是添加一條新路線。為此,請執行以下步驟:
app/Controllers文件夾中添加一個。子文件夾還可以。控制器實際上不必具有名稱中的Controller ,但請確保類名稱與文件名匹配。public功能: $app和$request (按照該順序)。routes.php ,並確保您了解路線工作方式的文檔和示例。routes數組中。POST 。Parent-Folder/Controller-Name格式。yamf/Responses/Response ,這可以是從View到JSON響應的任何一種,無論您想要什麼。有關更多信息,請參見下一節。yamf/Responses/View 。在views文件夾中創建一個PHP文件(視圖) - 同樣,子文件夾還可以 - 並且,在您的控制器方法中, return new View('name/of/view'); 。簡而言之:
app/Controllers文件夾routes.phpviews文件夾中創建視圖return new View('name/of/view');由於路線而被稱為所有控制器方法,應返回yamf/Responses/Response或所述類的子類。以下是有關如何使用每個的描述。大多數可以僅與構造函數一起在一行中使用。
Response - 路線響應的基類。new Response($statusCode = 200)yamf/Responses/Response項目子類子類,因此,如果需要,它們都可以返回自定義的HTTP狀態代碼!ErrorMessage圍繞視圖的簡單包裝器以發送400個狀態代碼和error.php視圖。new ErrorMessage($msg = '', $name = 'error', $title = '', $headerName = '', $footerName = '') 。 $name是視圖的名稱。$error 。如果不進行子類別,您將無法更改此操作。views/header.php和views/footer.php 。JsonResponse有關如何從控制器中發送JSON響應的示例new JsonResponse($data, $jsonEncodeOptions = 0)echo json_encode($this->data, $this->jsonEncodeOptions);輸出$data ;NotFound - 用於返回404的未找到消息回到客戶端。new NotFound($name = '404', $data = [], $title = '', $headerName = '', $footerName = '') 。 $name是視圖的名稱。views/header.php和views/footer.php 。Response 。Redirect - 允許302重定向到其他頁面或路線new Redirect($redirectPath, $isInternalRedirect = true)$isInternalRedirect用於重定向到當前網站/ routes.php數據中的路由。如果要重定向到內部路線,請使用這樣的Redirect : new Redirect('/route/name); (請注意開始/ )。如果不是這樣,請使用這樣的Redirect : new Redirect('https://example.com', false); 。View - 用於返回一些基於PHP的HTML視圖。new View($name, $data = [], $title = '', $headerName = '', $footerName = '') 。 $name是視圖的名稱。compact功能。請參閱樣本的BlogController 。views/header.php和views/footer.php 。如果您對YAMF中應包含的更多Response類型有想法,請打開功能請求(通過“問題”選項卡)或打開“拉”請求!
兩個主要變量從路由中發送到您的控制器方法: $app和$request 。請注意,所有View輸出都將具有$app和$request變量可供使用。您無需將它們作為$data參數發送。
AppConfig $app $app主要是您在config.php中設置的配置變量。檢查該文件以快速瀏覽可用的內容。一些更重要的項目是:
$app->db用於數據庫連接null ,以避免使用它們。除此之外, init.php中還設置了兩個可用的變量:
$app->isLocalHost是否在本地主機上運行該應用程序( 127.0.0.1或::1 )$app->basePath當前Web應用程序的基本目錄。這可用於允許Web服務器上的嵌套Web應用程序。我強烈建議您在執行本地網站鏈接時在views中使用此變量,以便您將文件移動或以後將其移動到子文件夾中,一切都不會破裂。要鏈接到您網站上的另一個頁面,只需使用$app->yurl(string) (yamf url)函數: <?= $app->yurl('/path/to/page') ?> 。 $request $request將擁有有關您的路線的所有數據以及您請求隨附的不同參數。它是類型yamf/Request 。它有這些公共成員可用:
$request->route - 此請求的原始路由字符串$request->controller - 控制器的字符串名稱$request->function - 呼叫控制器功能的字符串名稱名稱$request->routeParams路由中的任何參數,例如{id}。格式:['id'=>值]$request->get在URL中找到的任何獲取參數 - 與$ _GET相同的格式(未執行的額外處理)$request->post任何帖子參數 - 與$ _post相同的格式(未執行額外的處理)$request->anchor - 如果使用,則URL的#部分(無#)。路由器足夠聰明,無法在/blah/#/foo等網址上匹配。擴展此框架的最簡單方法是源自Response (或其他Response子類)和/或為某些控制器創建父類。例如,通過從View派生,您可以更改視圖輸出以使用Twig模板引擎,而不僅僅是簡單的PHP輸出。通過為您的控制器創建父類,您可以添加驗證或其他API路由的數據的其他額外處理,例如驗證用戶名/密碼或令牌。這些選擇是無窮無盡的,潛力很大!
有一個示例是在樹枝分支上使用樹枝而不是原始PHP!
YAMF支持的一個漂亮功能是不需要route或controller靜態網頁。如果您只想/about成為一個簡單的頁面,請在views/static/文件夾和-BAM中扔一個about.php 。 - /about您網站上的作品。喜歡/blog/post-name子文件夾呢?那也有效!添加views/static/blog/post-name.php文件,它只是可行(TM)!您可以使用它在網站上仍然具有漂亮的URL,而無需添加路線和控制器。
您可以在config.php中配置靜態視圖位置。
請注意,路由器在檢查靜態頁面之前試圖匹配router.php路由。
路由器支持未立即啟用的功能是URL縮短 - 例如https://example.com/short-url 。它需要一個數據庫連接,但是如果添加數據庫連接並具有適當的數據庫表(架構在config.sample.php中),則可以在需要的情況下使用URL縮短。您不需要啟用此功能。
我在config.sample.php中包括了一些默認的會話邏輯。隨時使用它,修改它或扔掉。如果您有有關如何改善此功能的建議,請打開拉動請求或問題以產生進一步的討論。
很高興你問!在開源項目中,總有一些事情可以完成:修復錯誤,新功能等等!查看此存儲庫的“問題”選項卡,並查看已報告了哪些錯誤以及已要求的功能。關於貢獻文檔中有貢獻的更多信息。
麻省理工學院許可證。在網站上使用該框架時,請確保在此框架上包括此框架的許可證(如果您覺得很慷慨!)。謝謝你! :)
特別感謝BootSwatch的樣品中使用的引導紙主題。