业务逻辑 php,添加业务逻辑 · ThinkPHP5+数据库和模型 · 看云

本文通过示例介绍了如何在ThinkPHP框架中使用模型(Model)类来封装用户注册、登录、获取信息及角色等业务逻辑,并展示了在控制器(Controller)中如何调用这些模型方法。强调了将业务逻辑封装到模型中的重要性,以及模型方法的差异性和错误处理方式。
摘要由CSDN通过智能技术生成

模型的优势不是用来做基础的CURD操作的,虽然CURD操作也是一种最常见的业务逻辑,只是这些基本逻辑无需再定义额外的方法了,系统已经内置实现了。但实际的应用中,一般都需要根据业务需求来增加额外的业务逻辑方法。

以User模型为例,假设我们需要实现下列功能:

1. 用户注册;

2. 用户登陆;

3. 获取用户信息;

4. 获取用户的身份角色;

...更多业务逻辑

可以在User模型添加下面的逻辑方法:

~~~

namespace app\index\model;

use think\Model;

class User extends Model

{

/**

* 注册一个新用户

* @param array $data 用户注册信息

* @return integer|bool 注册成功返回主键,注册失败-返回false

*/

public function register($data = [])

{

$result = $this->validate(true)->allowField(true)->save($data);

if ($result) {

return $this->getData('id');

} else {

return false;

}

}

/**

* 用户登录认证

* @param string $username 用户名

* @param string $password 用户密码

* @return integer 登录成功-用户ID,登录失败-返回0或-1

*/

public function login($username, $password)

{

$where['username'] = $username;

$where['status'] = 1;

/* 获取用户数据 */

$user = $this->where($where)->find();

if ($user) {

if (md5($password) != $user->password) {

$this->error = '密码错误';

return 0;

} else {

return $user->id;

}

} else {

$this->error = '用户不存在或被禁用';

return -1;

}

}

/**

* 获取用户信息

* @param integer $uid 用户主键

* @return array|integer 成功返回数组,失败-返回-1

*/

public function info($uid)

{

$user = $this->where('id', $uid)->field('id,username,email,mobile,status')->find();

if ($user && 1 == $user->status) {

// 返回用户数据

return $user->hidden('status')->toArray();

} else {

$this->error = '用户不存在或被禁用';

return -1;

}

}

/**

* 获取用户角色

* @return integer 返回角色信息或者返回-1

*/

public function role()

{

$uid = $this->getData('id');

if ($uid) {

$role = $this->getUserRole($uid);

if ($role) {

return $role;

} else {

$this->error = '用户未授权';

return 0;

}

} else {

$this->error = '请先登录';

return -1;

}

}

protected function getUserRole($uid)

{

return $this->table('role')->where('uid', $uid)->find();

}

}

~~~

我们先不要在意方法的实现细节(这些实现代码并非完美,只是简单的说明问题),里面的很多调用方法后面都会一一提及,这里只是告诉你如何在模型类里面添加自己的业务逻辑,下面同时给出在控制器中的调用参考。

先不要在意方法的实现细节(这些实现代码并非完美,只是简单的说明问题),里面的很多调用方法后面都会一一提及,这里只是告诉你如何在模型类里面添加自己的业务逻辑,下面同时给出在控制器中的调用参考。

~~~

namespace app\index\controller;

use app\index\model\User;

use think\Controller;

use think\Session;

class Index extends Controller

{

public function login()

{

return $this->fetch();

}

public function doLogin(User $user, $username, $password)

{

$uid = $user->login($username, $password);

if ($uid) {

Session::set('user_id', $uid);

$this->success('登录成功');

} else {

$this->error('登录失败');

}

}

public function register()

{

return $this->fetch();

}

public function doRegister(User $user)

{

$data = $this->request->param();

$result = $user->register($data);

if ($result) {

$this->success('用户注册成功');

} else {

$this->error($user->getError());

}

}

public function getUserInfo(User $user, $uid)

{

$info = $user->info($uid);

if ($info) {

$this->assign('user', $info);

return $this->fetch();

} else {

return '用户不存在';

}

}

protected function getUserRole()

{

$uid = Session::get('user_id');

$user = User::get($uid);

return $user->role();

}

}

~~~

控制器的详细用法不属于本书的讨论范畴,如果有必要可以参考官方快速入门系列第三部:《控制器从入门到精通》。

从上面的用法中我们可以注意几点:

1. 业务逻辑应当封装到具体模型中,并由控制器来调用;

2. register和login方法获取用户主键的方法区别;

3. 可以设置模型的错误信息,并且用getError方法获取;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值