1. 程式人生 > >《TP5.0學習筆記---URL和路由篇》

《TP5.0學習筆記---URL和路由篇》

入口檔案

我們都知道thinkphp是一個單入口框架,它所有的請求都通過public/index.php進入,之後通過攜帶不同的引數,轉發到相應的控制器中來實現不同的功能。

單入口檔案:應用程式的所有http請求都由某一個檔案接受並由這個檔案轉發到功能程式碼中

單入口優勢:

       安全監測(如果是多入口我們就需要在每個入口檔案中做相應的安全監測)

       請求過濾(在我們的入口檔案中,我們可以過濾掉某些無效的請求,如果是多入口就需要重複這個功能)

現在我們看一下入口檔案:

我們開啟thinkphp/base.php,裡邊都是定義的常量

public/index.php中的那個  __DIR__常量在thinkphp/base.php可看見是指框架的根目錄,即thinkphp

在這裡我們可以改變一些系統預設的配置,也就是一些常量的配置

入口檔案繫結

當我們在當前目錄下有一個index.php,如果我們正常情況下,我們預設訪問的是index模組下的Index控制器下的index方法,如果我們現在想訪問index.php或者是我們在這個地方再新建一個其它的檔案,我們能不能將這個檔案,直接繫結到某個模組,而把我們URL上的模組名簡化更方便我們輸入呢?其實thinkphp為我們準備了入口檔案繫結的方法

當我們輸入localhost/ThinkPHP5.0/public時,預設訪問的是index模組下的Index控制器下的index方法

而當我們在入口檔案(public/index.php)中新增如下程式碼(也就是定義一個常量)

這個時候預設訪問的就是admin模組下的Index控制器下的index方法

現在,如果我們想為我們的網站提供一個介面,比如說我這個網站想開發一些資料給第三方,我可能需要給第三方提供一些介面,所以這個時候我就不需要它再訪問我的index.php檔案,我可能讓它直接進入我們的api.php(public/api.php)

如果我的網站開發給第三方,那麼我肯定不期望第三方訪問我的index模組和admin模組,這樣我們只需要在api.php中繫結api模組,這樣我們訪問api.php直接訪問api模組,別的模組訪問不了

關與這種情況,thinkphp還給我們提供了另外一種方式。在thinkphp/convention.php中有一個

我們將它拷貝到應用配置檔案中,它預設是false,我們現在給它修改成true

修改之後要想生效,我們需要建立一個與api.php檔名相同的模組

這個時候我們再建立一個api模組

這個時候我們再訪問api.php,就會發現訪問的是api/Index/index

分析一下流程:如果我們開啟了入口檔案自動繫結這個操作(即’auto_bind_module’=> true),在我們的目錄下有這個php檔案,那麼它會訪問和這個php檔名相同模組,比如說我們有api,那麼我們訪問的就是api這個模組,所以我們預設的不需要傳遞第一個模組名,也就是說不需要傳遞第一個引數,它能夠直接訪問

比如我們想訪問api/Index/demo方法,我們在瀏覽器中直接訪問localhost/Thinkphp5.0/index.php/Index/demo即可,不用加上api了

路由

它是為了美化URL,簡化使用者的訪問

下面我們直接寫程式碼來看路由是如何使用的

我們首先在index/Index控制器下新加一個一個info()方法(給該函式傳遞一個引數)

那麼我們訪問這個info方法的時候應該這樣寫

localhost/ThinkPHP5.0/public/index.php/index/Index/info/id/5

如果我們想將當期的訪問簡化,變成這樣localhost/ThinkPHP5.0/public/news/5.html

這裡我們就需要引入路由的概念。如果我們想起用路由,就需要進行配置

首先開啟thinkphp/convention.php找到url_route_on和url_route_must,將其拷貝到我們的應用配置config.php

然後我們在conf資料夾下建立一個route.php檔案,也就是路由配置,在裡邊寫一下訪問的規則

這個時候我們再去瀏覽器中訪問

如果我還用剛才的方法進行訪問

按照配置那樣訪問

這樣就對了。

使用路由還有一個好處,看下面的截圖

如果我們將這裡的index方法改成info,也就是說我們想直接使用url()這個助手函式,輸出我們當前控制器的路由,我們會看到

也就是說,它會根據我們的路由規則生成相應的url

然後我們再看一下’url_route_must’

如果現在我們要訪問index/Index/demo(),我們可以使用這樣的方式

如果這個時候我們將’url_route_must’改成true,此時再重新整理那個頁面,就會報錯了

因為改了’url_route_must’為true之後意思就是說,我們所有的url必須通過路由的方式來訪問。如果我們想要我們剛才的那個Index/demo()生效的話,就在route.php中新增一下配置就好了

如果將’url_route_must’為true,那麼thinkphp的預設路由訪問規則就會失效,所以我們一般將它設定為false

這樣我們就可以不配置路由,通過預設的方式進行訪問

其實這裡的news我們也可以改,比如說改成posts