# 如何新增一個模塊
---
1、fid
`fid`是功能id的縮寫。一個`fid`只要做到全局唯一即可,但是最好參考PSI現在的默認命名慣例。
`fid`的定義在:[/web/Application/Home/Common/FIdConst.class.php](https://gitee.com/crm8000/PSI/blob/master/web/Application/Home/Common/FIdConst.class.php)
2、主菜單
用戶進入一個業務模塊的操作入口是主菜單。
PSI的主菜單定義在數據庫的表 `t_menu_item` 中,表結構的具體含義請參考 `/doc/02 表結構/表結構說明.xlsx`。
`t_menu_item`中的一條記錄就對應一個菜單項,所以新加一個模塊,就需要向`t_menu_item`中添加一條新記錄。
3、權限
給表 `t_permission` 中新增一條記錄,對應于通過菜單進入業務模塊的權限。
如果頁面里面的按鈕也需要權限控制,有幾個權限項就再定義幾個fid,并向表 `t_permission` 里面新增對應的記錄。
4、編寫業務模塊Controller
Controller需要從PSIBaseController繼承。
業務模塊的入口頁面通常的action就用index()。
下圖是PermissionController的index()的方法。

>關鍵技術點:
>
>1. 用UserService的方法hasPermission來判斷是否有權限
>
>2. 如果沒有權限用$this->gotoLoginPage來跳轉頁面
>
>3. 用$this->initVar()初始化默認變量值
>
>
這是標準的ThinkPHP 3.2的Controller開發內容,請參考[`ThinkPHP 3.2開發文檔`](http://www.hmoore.net/manual/thinkphp/1712)。
5、編寫業務模塊View
業務模塊的入口頁面通常的action就用index(),對應的View就是index.html
這是標準的ThinkPHP 3.2的View開發內容,請參考[`ThinkPHP 3.2開發文檔`](http://www.hmoore.net/manual/thinkphp/1785)。
6、修改MainMenuController的代碼
MainMenuController 位于 [`/web/Application/Home/Controller/MainMenuController.class.php`](https://gitee.com/crm8000/PSI/blob/master/web/Application/Home/Controller/MainMenuController.class.php)
在MainMenuController的方法 `navigateTo` 中增加相應的跳轉代碼。