项目论坛项目前准备工作 1.需求分析 参考discuz开源产品 discuz产品安装后 下一步...需要将数据库用户名密码输入正确 添加一个管理员账号 记住用来登录网站后台的 之后完成 问题: 访问首页没有样式 地址栏输入admin.php 进入后台 工具选项 更新缓存 报错 缺少参数 按报错找到文件指定行将参数加进去 true 再更新缓存 重新访问即可
BUG 用户管理 详情有问题
2.需求分析表 按需求分析表 给大家演示对应模块 需要大家明确需求
3.按需求表进行数据库设计 参考数据字典
4.开始项目 项目使用框架 先将结构搭建出来
5.TP中使用命令行生成目录 需要将php.exe加入到环境变量中
6.开发时编辑器 建议使用sublime 将整个项目放进去 方便查找 也可以使用快捷方式ctrl+p找到指定文件进行编辑
7.解压tp5.1压缩包 到根目录TP5.1的入口文件为:D:\xampp\htdocs\mydiscuz\public\index.php
进行虚拟主机配置(linux位置讲)
apache配置文件中 D:\xampp\apache\conf
确认下面的是打开的
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
按包含地址找到文件使用编辑器打开进行如下配置
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "D:\xampp\htdocs\mydiscuz\public"
ServerName www.mydiscuz.com
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "D:\xampp\htdocs"
ServerName localhost
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>
将DNS域名解析中 先找本机hosts文件 所以在hosts中进行配置
C:\Windows\System32\drivers\etc\hosts
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 localhost
127.0.0.1 www.mydiscuz.com
完成后 重启apache服务
在浏览器中输入localhost和www.mydiscuz.com进行测试
8.访问项目
将配置文件中 应用配置文件中 调试模式打开
\config\app.php
// 应用调试模式
'app_debug' => true
// 是否强制使用路由
'url_route_must' => true
路由是用于规划(一般同时也会进行简化)请求的访问地址,在访问地址和实际操作方法之间建立一个路由规则 => 路由地址的映射关系。
ThinkPHP并非强制使用路由,如果没有定义路由,则可以直接使用“模块/控制器/操作”的方式访问,如果定义了路由,则该路由对应的路由地址就被不能直接访问了。一旦开启强制路由参数,则必须为每个请求定义路由(包括首页)。
9.项目从后台管理开始入手 准备后台模板 将后台模板放入到项目中
创建后台应用目录 使用命令
>php think build --module admin
在application下生成admin目录
config---配置
controller---控制器
model---模型
view---视图 html
*路由到模板(V5.1.3)
Route::view('/admin','admin@common/default');
加载模板 admin/view/common/default.html
default.html后台模板首页
通过url地址 /admin 访问 没有样式
后台静态资源资源放置到 public/static
手动创建admin目录 代表后台模板资源目录
public/static/admin
将后台首页中 css js等资源加载路径调整为
/static/admin/css/common.css
访问后台测试
/admin
10.后台用户管理模块
根据数据库设计 注意编码问题
创建数据库 discuz
选择数据库
创建用户表 bbs_user
MariaDB [(none)]> create database discuz default charset=utf8;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use discuz;
Database changed
MariaDB [discuz]> create table bbs_user(
-> id int unsigned primary key auto_increment,
-> username varchar(32),
-> password char(32),
-> qx tinyint unsigned not null default 2,
-> pic varchar(255),
-> sex enum('w','m') not null default 'w',
-> tel char(11),
-> rtime int unsigned,
-> rip int
-> )engine=myisam default charset=utf8;
Query OK, 0 rows affected (0.33 sec)
今天内容 2018-04-27第一节
1.连接数据库
数据库配置文件进行设置 config/database.php
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => '',
// 用户名
'username' => 'root',
// 密码
'password' => '',
将数据库名加上 discuz
2.生成数据模型 m
命令行 创建类库文件
>php think make:model User
application/common/model/User.php
<?php
namespace app\common\model;
use think\Model;
class User extends Model
{
//
}
模型 -- 定义中
5.1中模型不会自动获取主键名称,必须设置pk属性
<?php
namespace app\common\model;
use think\Model;
class User extends Model
{
//5.1中模型不会自动获取主键名称,必须设置pk属性
protected $pk = 'id';
//设置当前模型对应的完整数据表名称
protected $table = 'think_user';
}
M 数据表 类文件 V 页面 C 控制器 类文件
11.创建控制器
>php think make:controller admin/UserController
生成application/admin/controller/UserController
<?php
namespace app\admin\controller;
use think\Controller;
use think\Request;
class UserController extends Controller
{
/**
* 显示资源列表
*
* @return \think\Response
*/
public function index()
{
//
}
/**
* 显示创建资源表单页.
*
* @return \think\Response
*/
public function create()
{
//
}
/**
* 保存新建的资源
*
* @param \think\Request $request
* @return \think\Response
*/
public function save(Request $request)
{
//
}
/**
* 显示指定的资源
*
* @param int $id
* @return \think\Response
*/
public function read($id)
{
//
}
/**
* 显示编辑资源表单页.
*
* @param int $id
* @return \think\Response
*/
public function edit($id)
{
//
}
/**
* 保存更新的资源
*
* @param \think\Request $request
* @param int $id
* @return \think\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* 删除指定资源
*
* @param int $id
* @return \think\Response
*/
public function delete($id)
{
//
}
}
index() 浏览用户
用户添加
create() 显示用户表单
save(Request $request) 执行添加
read($id)
用户编辑
edit($id)
update(Request $request, $id)
删除用户
delete($id)
添加用户功能
a.加载表单页面显示
1.先定义路由规则
地址 模块/控制器/方法
Route::rule('/user/create', 'admin/UserController/create');
2.使用url访问到此方法
public function create()
{
//显示添加用户表单
return view('user/create');
}
3.admin/view/创建user/create.html 继承 common中的default
首先在default中将要继承的部分定义出来
{block name="main"}
default被重写的部分
{/block}
{extend name="common/default"}
{block name="main"}
后台添加模板加入这里
{/block}
4.将添加模板页表单进行修改
Action=”/user/save”
Method=”post”
表单项名称与数据表字段名称对应
上面第一节
第二节
5.设置保存路由
Route::rule(‘/user/save’, ‘admin/UserController/save’);
6.接收数据 进行验证 进行存储 TP中 打印dump();
注意使用User类中的方法 当前空间中没有需要加上
Use app\common\model\User;
public function save(Request $request)
{
//获取表单数据
$form_data = $request -> post();
//dump($form_data);
//判断密码是否为空
if (empty($form_data['password'])) {
return $this -> error('密码不能为空', '/user/create');
}
//判断两次密码是否一致
//加密密码
$form_data['password'] = md5($form_data['password']);
$form_data['rtime'] = time();
$form_data['rip'] = ip2long($_SERVER['REMOTE_ADDR']);
//dump($form_data);
try {
//执行用户添加 true代表过滤表单中不在数据表中的字段
User::create($form_data, true);
} catch(\Exception $e) {
return $this -> error('添加用户失败', '/user/create');
}
return $this -> success('添加用户成功', '/user/create');
}
二、浏览用户 index()
设置路由
Route::rule(‘/user/index’, ‘admin/UserController/index’);
获取数据 显示到模板
public function index()
{
//获取用户表中所有数据
$users = User::select();
dump($users);
//显示渲染模板
return view('user/index');
}
创建模板 view/user/index.html
{extend name=”common/default”}
{block name=”main”}
后台模板design.html中的main主体部分放到这里
{/block}
修改模板
将数据显示到模板中
//显示渲染模板 将数据分配到模板中第二个参数
return view('user/index', ['users' => $users]);
在模板中使用模板操作方式 遍历数据
{foreach $users as $k => $v}
{$v.id}
{/foreach}
模板中判断语法
{switch 变量 }
{case value1 }输出内容1{/case}
{case value2}输出内容2{/case}
{default /}默认情况
{/switch}
{if 表达式}value1
{elseif 表达式 /}value2
{else /}value3
{/if}
使用函数
{$data.name|md5}
第三节 用户删除
三、删除用户 Delete();
模板
<a class="link-del" href="/user/delete/{$v.id}">删除</a>
路由传值
Route::rule('/user/delete/:id', 'admin/UserController/delete');
/**
* 删除指定资源
*
* @param int $id
* @return \think\Response
*/
public function delete($id)
{
//参数$id与路由中传的参数名称对应
//dump($id);
//返回受影响行数
$row = User::destroy($id);
if ($row) {
return $this -> success('删除成功', '/user/index');
} else {
return $this -> error('删除失败', '/user/index');
}
}
第三节结束
四、修改用户
1.模板文件
<a class="link-update" href="/user/edit/{$v.id}">修改</a>
2.路由传值
Route::rule('/user/edit/:id', 'admin/UserController/edit');
3.控制器 edit($id)
获取值id 根据id获取数据 分配到模板显示
//通过id获取数据
$user = User::get($id);
//将数据显示到表单中
return view('/user/edit', [‘user’ => $user]);
4.创建edit模板 表单可以使用create时的表单
{$user.id}
点击表单提交进行修改
5.路由设置
Route::rule('/user/update/:uid', 'admin/UserController/update');
6.控制器
update(Request $request, $uid)
Request 获取post方式提交的数据
$uid 与路由传过来的参数名称对应
public function update(Request $request, $uid)
{
//获取要修改的数据Id
//dump($id);
$form_data = $request -> post();
try {
User::update($form_data, ['id' => $uid], true);
} catch(\Exception $e){
return $this -> error('修改失败', '/user/edit/'.$uid);
}
return $this -> success("修改成功", "/user/index");
}
五、多条件搜索
用户浏览页面 /user/index
页面修改搜索表单
提交地址:/user/index
提交方式:get
public function index(Request $request)
//dump($request -> get('sex'));
//定义空数组 存放查询条件
$condition = [];
//判断用户是否按性别查询
if ($sex = $request -> get('sex')) {
$condition[] = ['sex', '=', $sex];
}
//判断用户是否按用户名查询
if ($username = $request -> get('username')) {
$condition[] = ['username', 'like', "%{$username}%"];
}
//获取用户表中所有数据
$users = User::where($condition) -> select();
六、分页
$users = User::where($condition) -> paginate(3);
//dump($users);
//获取分页字符串
$page_string = $users -> render();
//dump($page_string);
//显示渲染模板 将数据分配到模板中
return view('user/index', ['users' => $users, 'page_string' => $page_string]);
{$page_string|raw} 默认转义使用raw不转义
七、搜索和分页关联
$users = User::where($condition) -> paginate(3) -> appends($request->get());
友情链接图片
1. 接收上传文件
$file = $request -> file(‘pic’);
$finfo = $file -> move( config(‘app.save_path’) );
$filename = $finfo->getSaveName();
$form_data[‘pic’] = $filename;