來自 http://segmentfault.com/a/1190000002599259
寫的真好
需知
因為Yaf的默認Module是Index,瀏覽器訪問http://127.0.0.1/passport/login
,其實就是請求了Index模塊
下的Passport控制器
下的loginAction方法
。
至於原因,如下:
默認情況下,我們的路由器是
Yaf_Router
, 而默認使用的路由協議是Yaf_Route_Static
。
默認的路由協議
Yaf_Route_Static
, 就是分析請求中的request_uri, 在去除掉base_uri以后, 獲取到真正的負載路由信息的request_uri片段, 具體的策略是, 根據"/"對request_uri分段, 依次得到Module,Controller,Action, 在得到Module以后, 還需要根據Yaf_Application::$modules來判斷Module是否是合法的Module, 如果不是, 則認為Module並沒有體現在request_uri中, 而把原Module當做Controller, 原Controller當做Action。
在目錄application\controllers\
下定義的控制器,都屬於Index模塊下的。
安裝
新建模塊
在目錄application\
下新建目錄modules
。除了默認模塊,其他模塊都放在application\modules\
下。
新建一個模塊,模塊名自定義。假設我的新模塊叫Api
吧。
創建目錄application\modules\Api
。
修改項目配置文件conf\application.ini
:
; 多個模塊,使用逗號分隔 application.modules = "Index,Api"
在新模塊下創建控制器
在目錄application\modules\Api\
下創建控制器目錄controllers
,用於存放模塊Api
下的控制器文件。
新建文件application\modules\Api\controllers\Passport.php
:
<?php class PassportController extends Yaf_Controller_Abstract { public function loginAction() { echo '我是登錄接口'; return false; } }
效果
瀏覽器訪問:http://127.0.0.1/api/passport/login
輸出:我是登錄接口