篇文章主要是寫thinkphp3.2設置簡化URL,寫法簡單適合新手學習。以備須要之時可以查看!
在index.php的同級目錄中創建.htaccess文件
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/ [QSA,PT,L]
</IfModule>
在config.php里面設置 'URL_MODEL'=> 2
在index.php入口文件里面設置 define('BIND_MODULE', 'Home'); 這里是去除home模塊
這里的話需要開啟路由跟配置路由。具體的還是要看代碼里的URL如何去寫
在config.php里面設置(這里以首頁為例子)
'URL_ROUTER_ON'=> TRUE, //開啟路由
//定義路由規則
'URL_ROUTE_RULES'=> array(
'index'=>'Index/index'
),
接下來在視圖里面修改URL。
沒改之前的寫法:
設置之后的寫法:
悟空CRM是一款永久開源免費的CRM管理系統,悟空CRM-基于JAVA/TP5.0+vue+ElementUI的前后端分離CRM系統 ,悟空CRM是基于JAVA/PHP多語言的B/S架構的管理軟件,為企業提供行業專屬的crm客戶管理方案。 悟空CRM,CRM,免費CRM,開源HRMS,開源OA,移動辦公,辦公軟件,手機辦公,企業辦公,5KCRM,PHP開源CRM,免費開源CRM系統,好用免費,開源crm,CRM系統,CRM軟件,免費CRM軟件,下載開源CRM,免費客戶關系管理系統,中小企業首選必知,適合中小企業,教育行業CRM軟件,教育行業解決方案,醫療行業CRM軟件,醫療行業解決方案,工單系統,呼叫中心系統,呼叫中心解決方案,微信企業號.
開源地址:https://gitee.com/wukongcrm/72crm
悟空軟件長期為企業提供企業管理軟件(CRM/HRM/OA/ERP等)的研發、實施、營銷、咨詢、培訓、服務于一體的信息化服務。悟空軟件以高科技為起點,以技術為核心、以完善的售后服務為后盾,秉承穩固與發展、求實與創新的精神,已為國內外上千家企業提供服務。
悟空的發展受益于開源,也會回饋于開源。2019年,悟空CRM會繼續秉承“擁抱開放、合作共贏、創造價值”的理念,在開源的道路上繼續砥礪前行,和更多的社區開發者一起為國內外開源做出積極貢獻。
PHP前后端分離CRM系統
悟空CRM采用全新的前后端分離模式,本倉庫代碼中已集成前端vue打包后文件,可免去打包操作
如需調整前端代碼,請單獨下載前端代碼,前端代碼在根目錄的ux文件夾中
主要技術棧
后端框架:ThinkPHP 5.0.2
前端MVVM框架:Vue.JS 2.5.x
路由:Vue-Router 3.x
數據交互:Axios
UI框架:Element-UI 2.6.3
悟空crm9.0的運行環境要求PHP5.6以上
一鍵安裝
代碼中已集成前端vue打包后文件,可免去打包操作: 以本地(phpstudy集成環境)搭建舉例: 下載悟空CRM9.0開源版,在服務器根目錄(www目錄)下創建72crm文件夾,并放置代碼; 瀏覽器訪問
http://localhost/72crm/index.php/admin/install/index.html
根據安裝提示步驟,完成悟空CRM9.0 的部署安裝
開發依賴(需個性化安裝或調整前端代碼請按照以下教程,一鍵安裝用戶可忽略)
數據交互
數據交互通過axios以及RESTful架構來實現 用戶校驗通過登錄返回的auth_key放在header 值得注意的一點是:跨域的情況下,會有預請求OPTION的情況
Server搭建
服務端使用的框架為thinkphp5.0.2,搭建前請確保擁有lamp/lnmp/wamp環境。
這里所說的搭建其實就是把server框架放入WEB運行環境,并使用80端口。 導入服務端根文件夾數據庫文件public/sql/5kcrm.sql,并修改config/database.php配置文件。
配置要求
PHP >=5.6.0 (暫不支持PHP7及以上版本) 當訪問 http://localhost/, 出現“悟空軟件”即代表后端接口搭建成功。
前端部署
安裝node.js 前端部分是基于node.js上運行的,所以必須先安裝node.js,版本要求為6.0以上
使用npm安裝依賴 下載悟空CRM9.0前端代碼; 可將代碼放置在后端同級目錄frontend,執行命令安裝依賴:
npm install
修改內部配置 修改請求地址或域名:config/dev.env.js里修改BASE_API(開發環境服務端地址,默認localhost) 修改自定義端口:config/index.js里面的dev對象的port參數(默認8080,不建議修改)
運行前端
npm run dev
注意:前端服務啟動,默認會占用8080端口,所以在啟動前端服務之前,請確認8080端口沒有被占用。 程序運行之前需搭建好Server端
JAVA前后端分離CRM系統
悟空CRM采用全新的前后端分離模式,本倉庫代碼中已集成前端vue打包后文件,可免去打包操作
如需調整前端代碼,請單獨下載前端代碼,前端代碼在根目錄的ux文件夾中
主要技術棧
核心框架:jfinal3.8
緩存:redis caffeine
數據庫連接池:Druid
工具類:hutool,fastjson,poi-ooxml
定時任務:jfinal-cron
項目構建工具:maven
Web容器:tomcat,undertow(默認)
前端MVVM框架:Vue.JS 2.5.x
路由:Vue-Router 3.x
數據交互:Axios
UI框架:Element-UI 2.6.3
安裝說明
1、配置java運行環境,redis環境,mysql環境。
2、將目錄doc下的crm9.sql導入到數據庫( 初始化安裝只需要導入crm9.sql就好了,更新代碼導入對應日期的sql文件)。
3、修改resources/config/crm9-config.txt下的數據庫配置文件。 4、修改resources/config/redis.json下的redis連接文件 5、undertow啟動端口號在resources/config/undertow.txt下修改。
默認賬號 admin 默認密碼 123456
部署說明
本項目JDK要求JDK8及以上
一、Undertow(默認)
<dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal-undertow</artifactId> <version>1.6</version> </dependency>
取消以上代碼的注釋,將tomcat的pom依賴javax.servlet.javax.servlet-api注釋掉,打包方式改為jar 運行maven package,打包完成后
將上述打包命令生成的 crm9-release.zip 文件上傳到服務器并解壓,運行對應的72crm.sh/72crm.bat即可
二、Tomcat部署
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency>
取消以上代碼的注釋,將undertow的pom依賴com.jfinal.jfinal-undertow注釋掉,并將com.kakarote.crm9.Application的main方法注釋掉,打包方式改為war,
運行maven package命令,將war包放在tomcat/webapps目錄下
項目默認是ROOT.war,若需要攜帶項目名,需要修改 ux/config/prod.env.js的BASE_API為'"/項目名/"',改動完成后需要重新打包替換到webapp下
項目webapp下自帶打包后的前端代碼,如果不需要對前端代碼更改,直接訪問即可
如果更改了前端代碼,需要將打包后的dist下static文件夾和index.html替換到webapp下
ps:可以使用nginx代理靜態文件,后臺只做接口響應,項目本身設計是前后端完全分離的
前端部署
安裝node.js 前端部分是基于node.js上運行的,所以必須先安裝node.js,版本要求為6.0以上
使用npm安裝依賴 下載悟空CRM9.0前端代碼; 可將代碼放置在后端同級目錄ux,執行命令安裝依賴:
npm install
修改內部配置 修改請求地址或域名:config/dev.env.js里修改BASE_API(開發環境服務端地址,默認localhost) 修改自定義端口:config/index.js里面的dev對象的port參數(默認8090,不建議修改)
運行前端
npm run dev
注意:前端服務啟動,默認會占用8090端口,所以在啟動前端服務之前,請確認8090端口沒有被占用。 程序運行之前需搭建好Server端
hinkPHP 5.0的安裝
方式一:官網下載
官網地址:http://thinkphp.cn
方式二:git安裝
應用項目:https://github.com/top-think/think
核心框架:https://github.com/top-think/framework
首先Clone項目倉庫:
git clone https://github.com/top-think/think project_name
然后再切換到項目文件夾(/project_name),安裝核心框架
git clone https://github.com/top-think/framework thinkphp
后續需要更新框架時,只要切換到thinkphp文件夾并執行
git pull https://github.com/top-think/framework
運行ThinkPHP項目
在本地環境運行ThinkPHP項目有兩種方式:
在計算機上搭建Apache服務器,將項目文件夾放到Apache中運行
在安裝php環境的機器上執行路由命令,自建服務器環境
在此使用第一種方法,第二中方法占不討論。
在瀏覽器上訪問入口文件,訪問項目:
http://localhost/project_name/public/index.php
配置數據庫
項目文件夾下有很多子文件夾,其中application文件夾存放的就是我們的業務代碼,所以在入門的時候幾乎只涉及到這個文件夾的內容。https://github.com/top-think/framework
在開始制作項目前我們先配置數據庫,用編輯器打開 database.php,修改數據庫名稱、用戶名和密碼就可以了。
'hostname'=> 'localhost', 'database'=> 'test', 'username'=> 'root', 'password'=> '123456',
了解目錄的結構
application文件夾的目錄結構是這樣的
+ index //Index模塊 + controller //控制器 + model //模型 + view //視圖 - .htaccess - command.php //命令行工具配置 - common.php //應用公共函數 - config.php //應用公共配置 - database.php //數據庫配置 - route.php //路由配置 - tags.php //應用行為擴展定義
Index是系統為我們已經創建好的默認模塊,我們還能為應用創建不同的模塊,比如說后臺Admin模塊。
從模塊文件夾的結構我們明顯地看出一個MVC的架構,而接下來我們要做的就是創建第一個控制器,模型和視圖。
創建第一個控制器
打開controller文件夾我們可以發現系統已經為我們創建了Index控制器,這也是我們為什么在項目創建完成后就可以通過瀏覽器訪問的原因,在這里,我們創建一個新的控制器——Test控制器,我們在controller文件夾新建一個test.php文件。
test.php 代碼如下
namespace app\index\controller;class Test { public function index(){ return 'Hello World!'; } }
namespace為這段代碼劃定了命名空間,避免了模塊間和類庫間的命名沖突。
index()是Test控制器的一個方法,當我們在通過URL訪問時沒有指定訪問控制器的哪一個方法,就會默認訪問index方法。
當然也可以為控制器添加初始化方法 _initialize(),它會在控制器調用方法時前被調用。
控制器一般不需要任何輸出,直接return數據就可以了。
現在我們訪問
http://localhost/project_name/public/index.php/Index/Test/index
可以發現頁面上輸出了 Hello World!
這里你應該就發現了URL的規律了,在index.php后面加上/模塊名/控制器名/方法名就可以調用相應的方法了。
創建第一個視圖
在服務器上展示一個網頁
在傳統的PHP中,我們很容易就習慣把html和標簽和php語句混到一起。而在MVC結構中,我們要把展現在瀏覽器上的部分和業務邏輯隔離開來,使得項目的可維護性更高。
ThinkPHP 5.0沒有為我們建立視圖文件夾,我們在index模塊文件夾下建立一個view文件夾,然后在view文件夾下建立一個與控制器同名的Test文件夾,當控制器Test需要調用模板時,會在/index/view/Test中尋找。
這里我們在Test下創建一個index.html文件:
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <h1>Hello World!</h1></body></html>
然后我們修改控制器的代碼,引入think\View命名空間,并創建一個View的實例。
namespace app\index\controller;use think\View;class Test { public function index(){ $view=new View(); return $view->fetch('index'); } }
View類中的fetch方法會找到此模塊中view文件夾下同名的Test文件夾,并根據參數找到index.html文件,將它渲染出來,這時訪問
http://localhost/project_name/public/index.php/Index/Test/index
可以看到網頁已經顯示出來了。
當然,如果方法和模板同名的話,就可以省略掉這個參數了,所以在這里
return $view->fetch('index');
可以寫成
return $view->fetch();
將變量輸出到模板
我們需要把控制器中處理后的數據輸出到模板上,這時只要把變量綁定到$view對象成為它的屬性,就可以在模板中用花括號中將它輸出了。
/index/controller/Test.php
<?phpnamespace app\index\controller;use think\View;class Test { public function index(){ $view=new View(); $view->name='I love ThinkPHP'; return $view->fetch(); } }
/index/view/Test/index.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <h1>{$name}</h1></body></html>
刷新頁面,即可看到效果。
在視圖中,可以用點運算符(.)來訪問數組的元素。
/index/controller/Test.php
<?phpnamespace app\index\controller;use think\View;class Test { public function index(){ $view=new View(); $view->person=array("name"=>"Tom","age"=>"23"); return $view->fetch(); } }
/index/view/Test/index.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <h1>{$person.name}</h1> <h1>{$person.age}</h1></body></html>
當然也可以使用
{$person["name"]}
和
{$person["age"]}
訪問數據庫
在之前,我們已經配置好了數據庫,假定我們現在有一張student表(id為主鍵)
| id | name | age |
| -- | ----- | --- |
| 1 | Tom | 23 |
| 2 | Alice | 22 |
現在,在index文件夾下創建model文件夾,創建Student.php文件
<?php namespace app\index\Model; use think\Model;class Student extends Model{ protected $table="student"; }
這里注意Student模型類要繼承think\Model類,我們可以事先通過
use think\Model;
來引入這個類。在Student類中,我們需要定義 $table 屬性告訴 ThinkPHP 這個模型匹配的是 student 表。在這里你也許會想到要為 Student 類定義 id, name, age 這些屬性,不過在這里并不需要,等你調用這個模型的時候,ThinkPHP 會根據數據表的字段為 Student 的實例來添加這些屬性。接下來,我們只要在控制器中引入Student類,就可以訪問數據了。
<?phpnamespace app\index\controller;use app\index\model\Student;use think\View;class Test { public function index(){ $view=new View(); $student=Student::get(1); $view->student=$student; return $view->fetch(); } }
首先別忘了引入Student類
use app\index\model\Student;
在 index 方法中,我們通過 Student::get(1) 靜態獲取了 Student表中主鍵為1的數據,并將它綁定在視圖上,我們嘗試在視圖輸出 student 的數據。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <h1>{$student.name}</h1> <h1>{$student.age}</h1></body></html>
大功告成,除了這種靜態調用的方式,還可以動態建立Student實例,這樣就可以進行更加豐富的查詢操作,這里就不詳細撰述了,有興趣的同學可以去翻看ThinkPHP 5.0文檔中關于模型和數據庫的部分。
成為一名ThinkPHP開發者
在這里,你已經創建了一個ThinkPHP應用,建立了第一個控制器,通過關聯模型訪問了數據庫的數據,并將它們輸出到HTML模板上。你已經完成了開發ThinkPHP的第一步,當然,這些知識對于你而言還是遠遠不夠的,接下來你需要通過更多的資料來熟悉這個框架,并通過不斷地翻看文檔,來了解ThinkPHP的各種方法和強大特性,最后附上ThinkPHP 5.0的文檔地址,加油啦。
http://www.kancloud.cn/manual/thinkphp5
*請認真填寫需求信息,我們會在24小時內與您取得聯系。