ThinkPHP的基本使用方法(一)
程序员文章站
2022-03-16 16:44:17
...
路由
路由配置文件以及基本的配置
//基本的使用
Route::rule('/', 'index/index/index', 'get');
//路由路径中带参数id
Route::rule('article-<id>', 'index/article/info', 'get');
Route::rule('register', 'index/index/register', 'get|post');
//带参数路由配置
Route::rule('cate/:id', 'index/index/index', 'get');
//路由组的使用
Route::rule('admin',function(){
Route::rule('cateedit/[:id]', 'admin/cate/edit', 'get|post');
Route::rule('catedel', 'admin/cate/del', 'post');
Route::rule('articlelist/[:id]', 'admin/article/list', 'get');
})
路由的使用,路由的配置的参数(路径,控制器,访问方式);
控制器中的接受参数
//第一种接受数据的方式,需要几个接受几个
$data = [
'username' => input(post.username),
'password' => input(post.password)
]
//采用post的方式全部接受
$data = input(post)
验证器
验证器中数据的验证方式包括基本的规则验证和场景验证
基本验证规则:
class Admin extends Validate {
protected $rule = [
'username|管理员账户' => 'require',
'password|密码' => 'require',
//验证数据的相同
'conpass|确认密码' => 'require|confirm:password',
'oldpass|原密码' => 'require',
'newpass|新密码' => 'require',
'nickname|昵称' => 'require',
//验证昵称的唯一性以及邮箱的唯一性
'email|邮箱' => 'require|email|unique:admin',
'code|验证码' => 'require'
];
场景验证:
场景验证是基于基本验证规则的数据验证
/*
1:函数的命名规则:Scence+''
2:可以追加规则也可以排除验证规则
*/
//登录验证场景
public function sceneLogin()
{
return $this->only(['username', 'password']);
}
//注册场景验证
public function sceneRegister()
{
return $this->only(['password', 'conpass', 'nickname', 'email'])
->append('username', 'unique:admin')
->remove('username', 'unique');
}
验证规则的使用
//new
$validate = new \app\common\validate\Admin();
//如果有错利用的tp的getError()方法返回错误的信息
if (!$validate->scene('login')->check($data)) {
return $validate->getError();
}
简单登录的mdel
public function login($data)
{
$validate = new \app\common\validate\Admin();
if (!$validate->scene('login')->check($data)) {
return $validate->getError();
}
$result = $this->where($data)->find();
if ($result) {
//判断用户是否可用
if ($result['status'] != 1) {
return '此账户被禁用!';
}
//1表示有这个用户,也就是用户名和密码正确了
$sessionData = [
'id' => $result['id'],
'nickname' => $result['nickname'],
'is_super' => $result['is_super']
];
session('admin', $sessionData);
return 1;
}else {
return '用户名或者密码错误!';
}
}
数据的CRUD
数据的查询
this->where($data)->find();
this->where(‘email’, $data[‘email’])->find();
数据的更新
一般数据的更新和软删除先进行数据的查询再进行数据的更新和删除的额操作
//数据的查询,返回查询的结果
$cates = model('Cate')->select();
$adminInfo = $this->find($data['id']);
//查询数据并以排序的方式进行数据的输出,paginate(number: Number): 在数据查询输
出的时候进行数据的分页
$cates = model('Cate')->order('sort', 'asc')->paginate(10);
//获取查询到的某个字段的值
$catename = model('Cate')->where('id', input('id'))->value('catename');
//多字段排序查询
$articles = model('Article')->where($where)->with('cate')->order(['is_top' => 'asc',
'create_time' => 'desc'])->paginate(10);
//查询的模糊匹配
//模糊匹配的条件写为数组的格式
$where[] = ['title', 'like', '%' . input('keyword') . '%'];
//将数组格式的查询的条件直接传入where();
$articles = model('Article')->where($where)->order('create_time', 'desc')->paginate(5);
//数据的操作
$adminInfo->password = $data['newpass'];
$adminInfo->nickname = $data['nickname'];
//数据的save的操作,返回true或者是false
$result = $adminInfo->save();
数据的添加操作
//allowField(true)只添加在数据库中存在的字段,返回true或者是false
- $result = $this->allowField(true)->save($data);
数据的软删除
//将关模型中的数据一并删除
$result = $cateInfo->together('article')->delete();
控制器接受数据验证的一般处理
$result = model('Admin')->login($data);
if ($result == 1) {
$this->success('登录成功!', 'admin/home/index');
}else {
$this->error($result);
}
模板中采用助手函数的方式进行herf的控制器跳转
链接跳转并携带参数
<a href="{:url('admin/cate/list'),['id' => id]}">
在控制器中进行数据的模板变量的渲染
//定义一个数组格式的模板变量
$viewData = [
'cates' => $cates
];
//通过tp框架的assion方法进行数据在模板中的渲染
$this->assign($viewData);
//返回视图
return view();
在模板中采用tp框架的分页的默认设置
<div class="widget-buttons">
{$cates->render()|raw|}
</div>
在模板中循环列表
{volist name="cates" id="vo"}
.......
</volist>
关联模型(数据库)
public function article()
{
//关联数据库模型hasMany(需要关联的模型, 关联外键,关联模型的主键)
return $this->hasMany('Article', 'cate_id', 'id');
}
//关联栏目表
public function cate()
{
return $this->belongsTo('Cate', 'cate_id', 'id');
}
模板继承
通过配置基本公共额页面的代码,在通过在控制器和view中继承公共的页面来解决在刷新时的浪费网络资源的问题,
代码目录:
//view 层的代码的目录
view>public>base.html
//控制器代码的目录
controller>Base.php
//模型代码的目录
//model
模板继承的基本的写法
html:再base的HTML中的进行公共的数据的绑定
//在子页面中需要替换的部分用{block name='name'}{/block},例如
<div class="container">
{block name="content"}
{/block}
</div>
{block name="footer"}
<div class="footer">
<p>Copyright 2018 <a href="#">{$webInfo.copyright}</a> All Rights Reserved</p>
</div>
{/block}
controller: 在Base控制器中进行基本的数据的查询
class Base extends Controller{
//使用共享视图
public function initialize()
{
$cates = model('Cate')->order('sort', 'asc')->select();
$webInfo = model('System')->find();
$topArticles = model('Article')->where(['is_top' => 1, 'status' => 1])
->order('create_time', 'desc')->limit(10)->select();
$viewData = [
'cates' => $cates,
'webInfo' => $webInfo,
'topArticles' => $topArticles
];
//公共视图的模板的渲染利用框架封装额view->share($Data)
$this->view->share($viewData);
}
}
children-view:在被继承的的HTML中通过extend方法继承Base
{extend name="public/base" /}
{block name="title"}
{$catename|default="残月公子"}--{$webInfo.webname}
{/block}
{block name="content"}
<div class="row">
//子页面自己的内容
{/block}
上一篇: 如何使企业安全意识培训更有成效?
下一篇: css3新增属性动画animation