动态网站的简单搭建(基于ThinkPHP5)
静态部分
新建项目文件夹
找到wampserver的www网站运行的根目录
新建项目文件夹,命名为Myproject(起一个自己喜欢的名字,纯英文或拼音)
打开PHPStorm
找到刚刚创建的文件夹并打开
引入ThinkPHP开发框架
ThinkPHP5开源框架
配置Apache目录映射文件
找到"httpd-vhosts.conf"文件
配置一个虚拟主机
复制代码到文件末尾
MyProject -> 自己的项目文件名称
<VirtualHost *:80>
ServerName localhost
ServerAlias localhost
DocumentRoot "C:/wamp64/www/MyProject/public"
<Directory "C:/wamp64/www/MyProject/public/>
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require local
</Directory>
</VirtualHost>
重启wampserver
等待重启
打开浏览器,输入localhost
项目初始化
打开PHPstorm,打开目录:MyProject->application->index
创建view(视图)文件夹 MyProject->application->index->New->Directory->view
创建model(模型)文件夹 MyProject->application->index->New->Directory->model
创建视图模板(html)文件主目录 MyProject->application->index->view->New->Directory->index
创建视图模板(html)主页文件 MyProject->application->index->view->index->New->HTML File
创建完成(index.html)
创建项目静态资源文件夹 MyProject->public->static
创建样式表(CSS)文件夹 MyProject->public->static->New->Directory->CSS
创建图片(Images)文件夹 MyProject->public->static->New->Directory->Images
创建JS(JavaScript)文件夹 MyProject->public->static->New->Directory->JavaScript
添加静态资源文件
新建CSS文件(style.css) MyProject->public->static->CSS->New->Stylesheet->style.css
新建js文件(index.js) MyProject->public->static->JavaScript->New->JavaScript File->index.js
添加一张图片
编写index.html文件 MyProject->application->index->view->index->index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="./static/css/style.css">
<title>主页</title>
</head>
<body>
<div class="main">
<h1>MyProject</h1>
</div>
</body>
<script src="./static/JavaScript/index.js"></script>
</html>
编写style.css文件 MyProject->public->static->CSS->style.css
body{
background-image: repeating-linear-gradient(100deg, #afe191, #ed8e89);
}
.main{
width: 80%;
height: 3rem;
margin-left: 10%;
margin-top: 10%;
border-radius: 10px;
box-shadow: 1px 1px 20px #000000;
text-align: center;
}
h1{
color: #FFFFFF;
font-size: 30px;
}
编写index.js文件 MyProject->public->static->JavaScript->index.js
alert("项目初始化成功!");
编写主控制器文件(index.php) MyProject->application->index->controller->index.php
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
return $this->fetch('index/index');
}
}
准备完毕,打开浏览器输入localhost进入到主界面
至此,静态部分网站已全部完成
动态部分
调整ThinkPHP框架的配置信息 MyProject->application->config.php
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
return [
// +----------------------------------------------------------------------
// | 应用设置
// +----------------------------------------------------------------------
// 应用调试模式
'app_debug' => true,
// 应用Trace
'app_trace' => false,
// 应用模式状态
'app_status' => '',
// 是否支持多模块
'app_multi_module' => true,
// 入口自动绑定模块
'auto_bind_module' => false,
// 注册的根命名空间
'root_namespace' => [],
// 扩展函数文件
'extra_file_list' => [THINK_PATH . 'helper' . EXT],
// 默认输出类型
'default_return_type' => 'html',
// 默认AJAX 数据返回格式,可选json xml ...
'default_ajax_return' => 'json',
// 默认JSONP格式返回的处理方法
'default_jsonp_handler' => 'jsonpReturn',
// 默认JSONP处理方法
'var_jsonp_handler' => 'callback',
// 默认时区
'default_timezone' => 'PRC',
// 是否开启多语言
'lang_switch_on' => false,
// 默认全局过滤方法 用逗号分隔多个
'default_filter' => '',
// 默认语言
'default_lang' => 'zh-cn',
// 应用类库后缀
'class_suffix' => false,
// 控制器类后缀
'controller_suffix' => false,
// +----------------------------------------------------------------------
// | 模块设置
// +----------------------------------------------------------------------
// 默认模块名
'default_module' => 'index',
// 禁止访问模块
'deny_module_list' => ['common'],
// 默认控制器名
'default_controller' => 'Index',
// 默认操作名
'default_action' => 'index',
// 默认验证器
'default_validate' => '',
// 默认的空控制器名
'empty_controller' => 'Error',
// 操作方法后缀
'action_suffix' => '',
// 自动搜索控制器
'controller_auto_search' => false,
// +----------------------------------------------------------------------
// | URL设置
// +----------------------------------------------------------------------
// PATHINFO变量名 用于兼容模式
'var_pathinfo' => 's',
// 兼容PATH_INFO获取
'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'],
// pathinfo分隔符
'pathinfo_depr' => '/',
// URL伪静态后缀
'url_html_suffix' => 'html',
// URL普通方式参数 用于自动生成
'url_common_param' => false,
// URL参数方式 0 按名称成对解析 1 按顺序解析
'url_param_type' => 0,
// 是否开启路由
'url_route_on' => true,
// 路由使用完整匹配
'route_complete_match' => false,
// 路由配置文件(支持配置多个)
'route_config_file' => ['route'],
// 是否开启路由解析缓存
'route_check_cache' => false,
// 是否强制使用路由
'url_route_must' => false,
// 域名部署
'url_domain_deploy' => false,
// 域名根,如thinkphp.cn
'url_domain_root' => '',
// 是否自动转换URL中的控制器和操作名
'url_convert' => true,
// 默认的访问控制器层
'url_controller_layer' => 'controller',
// 表单请求类型伪装变量
'var_method' => '_method',
// 表单ajax伪装变量
'var_ajax' => '_ajax',
// 表单pjax伪装变量
'var_pjax' => '_pjax',
// 是否开启请求缓存 true自动缓存 支持设置请求缓存规则
'request_cache' => false,
// 请求缓存有效期
'request_cache_expire' => null,
// 全局请求缓存排除规则
'request_cache_except' => [],
// +----------------------------------------------------------------------
// | 模板设置
// +----------------------------------------------------------------------
'template' => [
// 模板引擎类型 支持 php think 支持扩展
'type' => 'Think',
// 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写
'auto_rule' => 1,
// 模板路径
'view_path' => '',
// 模板后缀
'view_suffix' => 'html',
// 模板文件名分隔符
'view_depr' => DS,
// 模板引擎普通标签开始标记
'tpl_begin' => '{',
// 模板引擎普通标签结束标记
'tpl_end' => '}',
// 标签库标签开始标记
'taglib_begin' => '{',
// 标签库标签结束标记
'taglib_end' => '}',
],
// 视图输出字符串内容替换
'view_replace_str' => [],
// 默认跳转页面对应的模板文件
'dispatch_success_tmpl' => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl',
'dispatch_error_tmpl' => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl',
// +----------------------------------------------------------------------
// | 异常及错误设置
// +----------------------------------------------------------------------
// 异常页面的模板文件
'exception_tmpl' => THINK_PATH . 'tpl' . DS . 'think_exception.tpl',
// 错误显示信息,非调试模式有效
'error_message' => '页面错误!请稍后再试~',
// 显示错误信息
'show_error_msg' => false,
// 异常处理handle类 留空使用 \think\exception\Handle
'exception_handle' => '',
// +----------------------------------------------------------------------
// | 日志设置
// +----------------------------------------------------------------------
'log' => [
// 日志记录方式,内置 file socket 支持扩展
'type' => 'File',
// 日志保存目录
'path' => LOG_PATH,
// 日志记录级别
'level' => [],
],
// +----------------------------------------------------------------------
// | Trace设置 开启 app_trace 后 有效
// +----------------------------------------------------------------------
'trace' => [
// 内置Html Console 支持扩展
'type' => 'Html',
],
// +----------------------------------------------------------------------
// | 缓存设置
// +----------------------------------------------------------------------
'cache' => [
// 驱动方式
'type' => 'File',
// 缓存保存目录
'path' => CACHE_PATH,
// 缓存前缀
'prefix' => '',
// 缓存有效期 0表示永久缓存
'expire' => 0,
],
// +----------------------------------------------------------------------
// | 会话设置
// +----------------------------------------------------------------------
'session' => [
'id' => '',
// SESSION_ID的提交变量,解决flash上传跨域
'var_session_id' => '',
// SESSION 前缀
'prefix' => 'think',
// 驱动方式 支持redis memcache memcached
'type' => '',
// 是否自动开启 SESSION
'auto_start' => true,
],
// +----------------------------------------------------------------------
// | Cookie设置
// +----------------------------------------------------------------------
'cookie' => [
// cookie 名称前缀
'prefix' => '',
// cookie 保存时间
'expire' => 0,
// cookie 保存路径
'path' => '/',
// cookie 有效域名
'domain' => '',
// cookie 启用安全传输
'secure' => false,
// httponly设置
'httponly' => '',
// 是否使用 setcookie
'setcookie' => true,
],
//分页配置
'paginate' => [
'type' => 'bootstrap',
'var_page' => 'page',
'list_rows' => 15,
],
];
利用PHPMyAdmin新建数据库
初始账号为:root
初始密码为:空
新建MyProject数据库 (测试用表,可自行更改)
新建shop表 (测试用表,可自行更改)
向shop表中添加部分数据
调整数据库配置信息 MyProject->application->database.php
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'MyProject',
// 用户名
'username' => 'root',
// 密码
'password' => '',
// 端口
'hostport' => '3308',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'MyProject_',
// 数据库调试模式
'debug' => true,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 自动读取主库数据
'read_master' => false,
// 是否严格检查字段是否存在
'fields_strict' => true,
// 数据集返回类型
'resultset_type' => 'array',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 是否需要进行SQL性能分析
'sql_explain' => true,
];
添加数据模型 MyProject->application->index->model->New->PHP Class->Shop
使数据模型继承Model
<?php
namespace app\index\model;
use think\Model;
class Shop extends Model
{
}
重构项目
引入前端框架LayUI
LayUi v2.5.6
官网
导入到目录 MyProject->public->static
重写主页模板文件 MyProject->application->index->view->index->index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="./static/layui/css/layui.css">
<link rel="stylesheet" href="./static/css/style.css">
<title>主页</title>
</head>
<body>
<div class="main">
<h1>MyProject</h1>
</div>
<div class="crud">
<div id="add" class="crud-main">
添加
</div>
<div id="del" class="crud-main">
删除
</div>
<div id="alter" class="crud-main">
修改
</div>
</div>
<div class="list">
<div class="head"> 商品列表 </div>
<div class="list-body">
<table>
<tr class="tol">
<td>ID</td>
<td>名称</td>
<td>价格</td>
<td>日期</td>
</tr>
{foreach $data as $item}
<tr>
<td>{$item['id']}</td>
<td>{$item['name']}</td>
<td>${$item['price']}</td>
<td>{$item['time']}</td>
</tr>
{/foreach}
</table>
</div>
</div>
</body>
<script src="./static/layui/layui.js"></script>
<script src="./static/JavaScript/index.js"></script>
</html>
重写CSS静态资源文件 MyProject->public->static->CSS->style.css
body{
background-image: repeating-linear-gradient(100deg, #afe191, #ed8e89);
}
.main{
width: 80%;
height: 3rem;
margin-left: 10%;
margin-top: 8%;
border-radius: 10px;
background-color: #1a1e33;
line-height: 3rem;
box-shadow: 1px 1px 20px #000000;
text-align: center;
}
.crud{
width: 35%;
height: 25rem;
background-color: #00000005;
margin-left: 10%;
margin-top: 2rem;
box-shadow: 1px 1px 10px #00000010;
padding: 2rem 2rem;
}
.crud-main{
transition: all 0.2s linear;
width: 8rem;
height: 8rem;
border-radius: 5px;
box-shadow: 1px 1px 10px #000000;
text-align: center;
font-size: 30px;
font-weight: bolder;
line-height: 7rem;
}
.crud-main:hover{
transition: all 0.3s linear;
box-shadow: 1px 1px 20px #000000;
cursor: pointer;
}
.list{
width: 35%;
height: 25rem;
background-color: #00000005;
margin-left: 51%;
margin-top: -29rem;
position: relative;
box-shadow: 1px 1px 10px #00000010;
padding: 2rem 2rem;
}
.list .head{
width: 80%;
height: 2rem;
position: relative;
left: 10%;
background-color: #00000090;
font-weight: bolder;
color: #FFFFFF;
font-size: 20px;
text-align: center;
box-shadow: 1px 1px 5px #000000;
line-height: 2rem;
}
.list .list-body{
width: 100%;
height: 90%;
position: relative;
top: 1.5rem;
}
.list-body table{
width: 100%;
}
table td{
height: 2rem;
text-align: center;
background-color: rgba(255, 255, 255, 0.19);
font-size: 15px;
font-weight: bolder;
color: #000000;
}
.tol td{
background-color: rgba(101, 15, 19, 0.56);
font-size: 18px;
font-weight: bolder;
color: #ffffff;
}
#add{
background-color: #8aebb6;
color: #000000;
}
#del{
background-color: #000000;
color: #ffffff;
margin-left: 11rem;
}
#alter{
background-color: #ff8053;
color: #ffffff;
margin-left: 22rem;
}
h1{
color: #FFFFFF;
font-size: 30px;
}
重写JavaScript文件 MyProject->public->JavaScript->index.js
仅演示 增加 删、改、查只需类比即可
layui.use(['jquery','layer'],function () {
$ = layui.jquery;
layer = layui.layer;
// 添加
$("#add").on("click",function () {
var name='';
var price=0;
layer.prompt({
title:'请输入商品名称',
formType: 2,
},function (n) {
name = n;
layer.prompt({
title:'请输入商品价格',
formType: 3,
},function (p) {
price = p;
var datas = {
'n':name,
'p':price
};
layer.closeAll();
$.post({
url:'/add',
data:datas,
success:function () {
layer.alert("OK!",function () {
location.href = '/';
});
}
});
});
});
});
// 删除
$("#del").on("click",function () {
});
// 修改
$("#alter").on("click",function () {
});
});
重写主控制器 MyProject->application->index->controller->index.php
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller
{
public function index()
{
$data = Db::name('shop')
->select();
$this->assign('data',$data);
return $this->fetch('index/index');
}
}
配置数据路由 MyProject->application->route.php
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
use think\Route;
Route::post('add/','index/Index/add');
return [
'__pattern__' => [
'name' => '\w+',
],
'[hello]' => [
':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
':name' => ['index/hello', ['method' => 'post']],
],
];
重构后主页效果
添加
添加成功
至此动态部分结束
简单那动态网站的搭建全部结束,如需拓展记得BaiDu~