热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ThinkPHP5模型绑定-08

范例1:路由规则和分组支持绑定模型数据,例如:usethink\Route;Route::rule(hello:id,indexindexhello,GET,[ext

范例1:

路由规则和分组支持绑定模型数据,例如:


use think\Route;

Route::rule('hello/:id','index/index/hello','GET',[
    'ext' => 'html',
    'bind_model' => [
        'user' => '\app\index\model\User',
    ],

]);

会自动给当前路由绑定 id 为 当前路由变量值的User 模型数据(需要手动建立/var/www/think/apps/index/model/User.php和/var/www/think/apps/index/controller/Index.php)。


// 我们为think_user 表定义一个User 模型(位于apps/index/model/User.php )如下:
namespace app\index\model;

use think\Model;

class User extends Model
{
 
}
//大多情况下,我们无需为模型定义任何的属性和方法即可完成基础的操作。


namespace app\index\controller;
use think\Controller;

class Index extends Controller
{
    public function hello($id)
    {        
        $user = $this->request->user;
        return $user;
    }
}

// hello GET http://contoso.org/hello/3.html
/*

 {"id":3,"nickname":"李四","name":"Python","birthday":226338100,"email":"lisi@163.com","password":"123456","create_time":"2017-07-30 10:45:19","update_time":"2017-07-30 10:45:19","status":1}
 
 */


范例2:

use think\Route;

//可以定义模型数据的查询条件,例如:
Route::rule('hello/:name/:status','index/index/hello','GET',[
    'ext' => 'html',
    'bind_model' => [
        'user' => ['\app\index\model\User','status&name']
    ],
]);
//表示查询id 和name 的值等于当前路由变量的模型数据。


// 我们为think_user 表定义一个User 模型(位于apps/index/model/User.php )如下:
namespace app\index\model;

use think\Model;

class User extends Model
{
 
}
//大多情况下,我们无需为模型定义任何的属性和方法即可完成基础的操作。


namespace app\index\controller;
use think\Controller;

class Index extends Controller
{
    public function hello()
    {        
        $user = $this->request->user;
        return $user;
    }
}

// hello GET http://contoso.org/hello/Go/2.html   

请求实际提交的SQL语句:

SELECT * FROM `think_user` WHERE `status` = 2 AND `name` = 'Go' LIMIT 1   // 实际上数据库表里还有一条记录满足查询条件的数据:

{"id":6,"nickname":"孙七","name":"Go","birthday":226336400,"email":"sunqi@163.com","password":"123456","create_time":"2017-07-30 10:45:19","update_time":"2017-07-30 10:45:19","status":2}

/*

 {"id":5,"nickname":"赵六","name":"Go","birthday":226359300,"email":"zhaoliu@126.com","password":"123456","create_time":"2017-07-30 10:45:19","update_time":"2017-07-30 10:45:19","status":2}
 
 */


范例3:


use think\Route;

//也可以使用闭包来返回模型对象数据
Route::rule('hello/:name/:status','index/index/hello','GET',[
    'ext' => 'html',
    'bind_model' => [
        'user' => function($param){
            $model = new \app\index\model\User;
            return $model->where($param)->select();
        }
     ],
]);
//闭包函数的参数就是当前请求的URL变量信息。


namespace app\index\controller;
use think\Controller;

class Index extends Controller
{
    public function hello()
    {        
        $user = $this->request->user;
        return $user;
    }
}

// hello GET http://contoso.org/hello/Go/2.html
/*

[{"id":5,"nickname":"赵六","name":"Go","birthday":226359300,"email":"zhaoliu@126.com","password":"123456","create_time":"2017-07-30 10:45:19","update_time":"2017-07-30 10:45:19","status":2},{"id":6,"nickname":"孙七","name":"Go","birthday":226336400,"email":"sunqi@163.com","password":"123456","create_time":"2017-07-30 10:45:19","update_time":"2017-07-30 10:45:19","status":2}]
 
 */

如果范例3执行出现如下错误:


解决办法1:

return $user;  将数组类型的返回值转换成json类型的返回值,此行代码换成 return json($user); 即可解决;

解决办法2:

在config.php配置文件中修改默认的数据输出类型

     // 默认输出类型改成下面返回类型即可解决
    'default_return_type'    => 'json',


// 默认输出类型不出错的搭配方案如下:
搭配方案1    'default_return_type'    => 'html',   控制器方法内返回值必须是 return json($user);
搭配方案2    'default_return_type'    => 'json',   控制器方法内返回值必须是 return $user;



推荐阅读
  • 深入理解ThinkPHP5.1自定义标签的应用与实现
    本文详细探讨了ThinkPHP5.1框架中自定义标签的创建与使用方法,包括标签库的建立、模板配置以及在实际项目中的应用技巧。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • iOS 开发技巧:TabBarController 自定义与本地通知设置
    本文介绍了如何在 iOS 中自定义 TabBarController 的背景颜色和选中项的颜色,以及如何使用本地通知设置应用程序图标上的提醒个数。通过这些技巧,可以提升应用的用户体验。 ... [详细]
  • 致信息安全爱好者的成长指南
    本文旨在为信息安全爱好者提供一份详尽的成长指南,涵盖从学习心态调整到具体技能提升的各个方面。 ... [详细]
  • 本文探讨了PHP中使用命名空间和自动加载机制的重要性,特别是在大型项目中,如何有效管理和加载文件,避免代码冗余,提高开发效率。 ... [详细]
  • 本文将详细探讨PHP中C的作用,并对比其他编程语言如Java和C的特点及其适用场景。 ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了thinkphpurl生成相关的知识,希望对你有一定的参考价值。为了配合所使用的URL模式,我们需要能够动态的根据当前 ... [详细]
  • 本文将指导如何在JFinal框架中快速搭建一个简易的登录系统,包括环境配置、数据库设计、项目结构规划及核心代码实现等环节。 ... [详细]
  • VMware Horizon View 5.0桌面虚拟化部署实践与心得
    在近期的研究中,我花费了大约两天时间成功部署了桌面虚拟化环境,并在此过程中积累了一些宝贵的经验。本文将分享这些经验和部署细节,希望能对同样关注桌面虚拟化的同行有所帮助。 ... [详细]
  • 本文介绍如何使用 PHP 实现对特定 IP 地址或域名的访问控制,包括单个 IP、多个 IP、通配符及 IP 段的支持,并提供详细的代码示例。 ... [详细]
  • ThinkPHP RBAC 实战:登录验证详解
    本文将详细介绍 ThinkPHP 框架中的 RBAC(角色基础访问控制)系统,特别是登录验证部分。我们将通过实际代码示例,展示如何实现用户登录验证、验证码生成及验证、以及登录后的权限管理。 ... [详细]
author-avatar
手机用户2702932521
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有