篇文章主要是写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小时内与您取得联系。