热门标签 | 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;



推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • python限制递归次数(python最大公约数递归)
    本文目录一览:1、python为什么要进行递归限制 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
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社区 版权所有