站三界导航
首页 文章资讯
  • 女婴心脏竟然扎进一根4厘米绣花针
    女婴心脏竟然扎进一根4厘米绣花针

    8月1日,陕西西安发生了一起令人担忧的事件。一名5个月大的女婴因为抽搐和意识障碍被紧急送往西安市儿童医院。经过详细检查,医生惊讶地发现在女婴的心脏附近有一根4厘米长的绣花针。家长对于绣花针是如何进入女婴体内毫无所知。医生提出了两种可能性,一种是女婴误吞绣花针后穿过胃壁刺入左心室,另一种是在体外不小心刺入体内。医生立即进行了手术,并顺利地取出了绣花针。目前,女婴正在儿科重症监护室接受康复治疗。根据医生的推测,孩子体内的绣花针可能有两种可能的来源。第一种可能性是误吞。孩子可能在进食过程中不小心将绣花针误吞下去。这种情况下,绣花针可能通过胃壁穿过,刺入左心室,导致孩子出现抽搐和意识障碍等症状。第二种可能性是体外扎入。在这种情况下,孩子身体外部可能被绣花针扎伤,并进入体内。这可能是一种意外,例如孩子玩耍时触及了绣花针。无论绣花针是通过何种方式进入孩子体内,医生都会通过手术来取出它,以确保孩子的安全和健康。这个过程需要医生对孩子进行细致的检查和治疗,以最大程度地减少并发症风险并促进孩子的康复。这个事件提醒家长们要时刻保持对幼儿的安全意识。在孩子周围的环境中,尤其是在让孩子接触到可能有潜在危险的物品时,要保持足够的警惕性,并尽可能预防类似的事件发生。如果孩子不慎吞食了异物或出现异常症状,家长应该立即寻求医疗帮助。

    • 社会热点
    • 131阅读
    • 2023-08-02

  • 海底捞向未成年人售卖3瓶啤酒,被严厉处罚5000元
    海底捞向未成年人售卖3瓶啤酒,被严厉处罚5000元

    近日,上海捞派餐饮管理有限公司申长路分公司因向未成年人售卖啤酒,违反了未成年人保护法,受到上海市闵行区市场监督管理局的严厉处罚。根据天眼查App的数据,该公司被罚款5000元,并被要求归还非法所得39元据处罚事由显示,事件发生在2022年9月,当时该分公司在经营场所接待了一些穿着校服的顾客。经过经营者辨认,确认其中一位顾客未满法定成年年龄。随后,这位未成年消费者向服务员要求增加了一份啤酒订单。餐桌上的消费者选择了共餐方式就餐,而其中包括了未成年人,因此被认定为向未成年人售卖了3瓶啤酒。这起事件引发了市场监管部门的严肃态度,他们坚决维护未成年人的合法权益,不容忽视对法律的违背。根据相关法规,向未成年人售卖酒类饮品是严重违规行为,会对青少年的身心健康产生不良影响,因此市场监管部门对此类违规行为采取了严厉的处理措施。海底捞一直以来以其卓越的服务和品质在餐饮行业赢得了广泛的声誉,然而这次事件让人感到震惊。作为一家知名的餐饮企业,海底捞应该对消费者的年龄加以严格核实,并切实履行社会责任,保护未成年人的健康成长。这起违规行为不仅给公司声誉带来了负面影响,也损害了消费者对海底捞的信任。此次事件的惩罚金额与没收违法所得对于海底捞这样的大型企业来说可能并不算什么,但对于善意维护市场秩序和保护未成年人权益的当地市场监管局来说,罚款数额的判定代表了对违规行为的严厉态度。这起事件不仅仅是对海底捞的一次警示,也是对整个餐饮行业的一次警示,提醒企业要加强内部管理,合规经营。为了避免类似事件再次发生,餐饮业应该引起重视,加强对未成年人的身份核实和年龄识别。训练员工注意这类情况,并建立健全的内部制度以确保合规运营,防止不法行为的发生。此外,还应加强对未成年人的教育和引导,提高他们对酒精、酒类产品的认知,并增强他们对健康生活的意识。海底捞向未成年人售卖啤酒的事件引发了社会对于未成年人保护的关注。这次事件不仅对海底捞造成了负面影响,也提醒了整个餐饮行业要加强自律和管理,切实保护未成年人的权益和健康成长。

    • 社会热点
    • 156阅读
    • 2023-08-02

  • 千万不要犯罪因为浏览记录会让人社死
    千万不要犯罪因为浏览记录会让人社死

    你是否曾想过,当你在网上浏览各种网站时,你的浏览记录可能已经被不知名的收集者悄悄地记录下来?近日,一位网友在整理卷宗时惊讶地发现,被告的1624条浏览记录竟然被完整地记录下来,这令他非常震惊。这些记录包括了各种网站,从普通的搜索引擎到社交媒体,甚至还包括了一些色情网站。可以看出,这个人在网络上的活动非常广泛。更令人震惊的是,这些记录的时间跨度很长,可见这个人的习惯并不是一天两天形成的。这位网友的发现引起了广泛的关注和讨论。有些人认为这是一个侵犯隐私的行为,而另一些人则认为这是个人信息公开的一个例子。无论如何,这个事件都引起了人们对于个人信息安全的关注。在这个数字化的时代,我们的个人信息随处可见,从我们的社交媒体活动到我们的搜索历史,所有的一切都被记录在案。虽然这些信息对于营销人员和广告商来说非常有用,但对于个人来说,这些信息的公开可能会导致一系列问题,比如身份盗窃和网络欺诈等。因此,我们需要更加关注我们的个人信息安全。这包括不仅仅是我们的社交媒体和搜索历史,还包括我们的姓名、地址、电话号码以及其他敏感信息。为了保护我们的个人信息,我们需要采取一系列措施,比如使用安全密码、定期更换密码、不泄露个人信息等。总之,在数字化的时代,我们需要更加关注我们的个人信息安全。只有这样,我们才能更好地保护自己的隐私和安全。这个发现引发了网友们的热议,他们在感叹的同时也提醒我们,犯罪行为的远比我们想象的要容易暴露。让我们共同呼吁,每个人都应该遵守法律法规,规范自己的行为。同时,也希望相关部门能够加强对个人隐私的保护,确保我们的信息安全。让我们共同保护我们的网络环境,远离犯罪行为的。

    • 社会热点
    • 128阅读
    • 2023-08-02

  • “大黄鱼抱枕”被炒到666元,引爆社交网络!
    “大黄鱼抱枕”被炒到666元,引爆社交网络!

    8月1日报道,最近在上海举办的ChinaJoy游戏展上,一款名为“大黄鱼”的抱枕以其独特的造型和超大的尺寸,迅速成为社交网络上的流行物品。这款抱枕一亮相便引起了展会参展人员的争相购买,成为了“显眼包”。许多人为了购买这款抱枕甚至需要排队一个小时。  据报道,社交平台上有多个卖家挂出了大黄鱼抱枕的转卖链接,最高售价一度达到了666元。这一高价甚至引起了一些网友的不满和争议。  对此,7月31日上午,盒马官方回应称现场的热情超乎预期,但不慎遗失了几条鱼,并呼吁大家理性地参与活动。盒马表示,目前这款抱枕没有官方的销售渠道,只能赠送给特定的用户。  大黄鱼抱枕以其鲜明的黄色和夸张的表情,成为了展会现场的一大亮点。不少参展人员表示,这款抱枕的独特性和巨大的尺寸给他们带来了欢乐和乐趣。而社交网络上的热炒更是为大黄鱼抱枕的热度助了一臂之力。  然而,高转售价也引起了一些争议。一些消费者表示,这种抱枕本身并没有什么特别之处,高价转售只是利用了人们对于潮流商品的追捧心理。他们呼吁大家理性对待,不要盲目追逐潮流。  目前,大黄鱼抱枕在ChinaJoy展会上的销售情况仍然火爆,但官方表示,由于产量有限,无法满足所有人的需求。官方承诺将会进行后续补货,并会通过特定渠道向用户赠送。  ChinaJoy作为中国最大的游戏展会之一,每年吸引了大量的游戏爱好者和游戏厂商。游戏厂商通过展会来展示他们最新的游戏作品,同时也会有各种周边产品和限量版商品出售。大黄鱼抱枕的火爆销售也再次证明了潮流文化对于游戏产业的巨大影响力。

    • 社会热点
    • 134阅读
    • 2023-08-02

  • ThinkTP5框架获取客户端IP地址
    ThinkTP5框架获取客户端IP地址

    第一步:控制器引入tp框架内置得文件usethink\Request;创建个函数,并返回值publicfunctiongetHostIp(){//tp内置函数获取客户端ip$IP=request()->ip();return$IP;}第三步:调用函数测试

    • TP代码
    • 179阅读
    • 2023-08-02

  • 法国网红爬香港68楼天台后坠亡
    法国网红爬香港68楼天台后坠亡

    据英国报姐报道,2023年7月27日晚上7点半左右,在中国香港一座高层住宅楼地利根德阁的顶层公寓里,一场悲剧发生了。这个令人震惊的事件牵动着众多人的心。事件现场,一名女佣目睹了一个身影攀爬在窗外的场景,她不禁感到恐惧与无助。地利根德阁位于第68层,距离地面高达220米,十分危险。这名外国男子年轻而神秘,不知为何会冒险攀爬到如此高处,并疯狂地敲打着窗户,彷佛在求救。女佣被吓坏了,立刻拨打了紧急电话报警。警方接到报警后迅速行动,但当他们赶到现场时,情况已经无法挽回。这名男子从摩天大楼的顶部失足坠落,当场不幸丧生。警方立即展开了详细调查,试图了解这位法国网红进入该住宅楼的动机和来历。调查结果显示,他的进入方式异常不寻常。事发当天下午6点左右,该男子抵达地利根德阁,并向楼下的保安声称要拜访40层的一位朋友。保安不禁对此进行核实,却发现他所提及的住户并不认识这位男子。在保安忙着核实信息期间,这名男子趁机悄然溜进了大楼内部,躲过监控的注意。他乘坐电梯一路上升,直到达到49层,然后通过楼梯来到了整座大楼最高的68层。目前警方还在进一步深入调查中,试图搞清楚该男子是如何绕过大楼的安全措施和进入限制,以及他为何做出如此冒险的行为。这场悲剧引发了公众对于极限挑战和危险行为的思考。这位法国网红以极限攀爬而闻名,曾在社交媒体上分享自己的刺激经历。然而,这次事件再次提醒人们,追求极限刺激时必须谨慎行事,且要牢记生命的宝贵。对于地利根德阁的管理方面,该事件也引发了人们对于安全措施的关注。建筑物的出入管理和摄像监控等方面是否存在漏洞成了人们关注的焦点。这起悲剧不仅给受害者家人带来了无尽的痛苦,也让公众对于极限挑战和冒险行为的大背后思考更加深刻。我们应该足够理智,珍爱生命,对于刺激之外的选择要有清晰的认知,并警惕那些可能将生命置于危险中的活动。只有以合理、安全和负责任的方式追求刺激,我们才能保护并珍视生命的真正意义。

    • 社会热点
    • 140阅读
    • 2023-08-02

  • Thinkphp5框架实现分页(模型和Db分页,多种方法)
    Thinkphp5框架实现分页(模型和Db分页,多种方法)

    现在很多网站的数据量的很多,如果全部在一页里显示效果不好,数据量太大,那怎么办?这时我们就需要分页,而分页的好处就是分段显示数据,这样页面就不用加载很多数据,需要时才加载,下面我教大家实现ThinkPHP5分页。在分页之前我们要先引入bootstrap的css。第一种:使用limit实现分页(不建议使用)limit方法也是模型类的连贯操作方法之一,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多。ThinkPHP的limit方法可以兼容所有的数据库驱动类的。代码示例:Db::table('think_article')->limit('10,25')->select();从第10行开始的25条数据;使用limit很麻烦,不推荐大家使用,我就不详细讲了第二种:使用page实现分页page方法也是模型的连贯操作方法之一,是完全为分页查询而诞生的一个人性化操作方法。后台代码:$page=empty($params['page'])?1:$params['page'];//获取当前页数$Products=Db::table('Products')->alias('a')->join('ProductsBrandb','a.BrandId=b.BrandId')->where($wheres)->page($page,12)->select();$count=Db::table('Products')->count();//有多少条数据$sum=$count/12;//要分多少页$this->assign("Products",$Products);$this->assign("sum",$sum);$this->assign("page",$page);第三种:使用paginate实现分页(推荐)在tp5中使用bootstrap分页样式,其实根本不用那么麻烦,只需要引入bootstrap的css文件就可以了。原因是tp5在组装分页链接的时候,默认是组装bootstrap的分页样式链接,就是说,会自动加上class的属性。ThinkPHP5.0内置了分页实现,要给数据添加分页输出功能在5.0变得非常简单,可以直接在Db类查询的时候调用paginate方法。组装链接的函数在think5\thinkphp\library\think\paginator\driver\Bootstrap.php后台代码://每页显示12条数据$Products=Db::table('Products')->paginate(12);前台代码:<divclass="f_page">{$Products->render();}</div>第四种:模型分页新闻栏目(Newsfl)<?phpnamespaceapp\index\model;usethink\Model;classNewsflextendsModel//新闻栏目分类{publicfunctioncomm(){return$this->hasMany('News','newsfl_id','id');}}新闻(News)<?phpnamespaceapp\index\model;usethink\Model;classNewsextendsModel//新闻{}开发手册里的分页是如下形式:$list=Db::name('news')->where('status',1)->paginate(10);或者$list=News::where('status',1)->paginate(10);如果想在关联中实现分页,如下:$news=Newsfl::get($id)->comm()->paginate(3);注:comm()是关联方法HTML+CSS分页的样式<divclass="f_page">{$news->render()}</div>CSS/*分页样式*/.f_page{margin-top:10px;display:flex;}.f_page.pagination{position:relative;margin:auto;height:50px;}.f_page.pagination>li>a,.f_page.pagination>li>span{font-size:14px;padding:10px20px;margin:02px;color:#000;}.f_page.pagination>.active>span{background:#00ae66;color:#fff;}.f_page.pagination>.active>span:hover{background:#00ae66;}.f_page.pagination>.active>span,.f_page.pagination>.active>span:hover{border-color:#00ae66;}.f_pageullia:hover{background:#00ae66;text-decoration:none;color:#fff;}

    • TP代码
    • 219阅读
    • 2023-08-02

  • ThinkPHP5框架route(路由)的详解
    ThinkPHP5框架route(路由)的详解

    路由在框架中的作用打个比方的话,路由好比是WEB应用的总调度室,对于访问的URL地址,路由可以拒绝或者接受某个URL请求,并进行分发调度,而且还有一个副作用是因为路由规则可以随意定义,因此可以让你的URL请求地址更优雅,因为不会暴露实际的URL地址,也就意味着更安全,5.0的路由不仅仅只是支持路由到控制器的操作方法,甚至可以路由到任何的类或者闭包。1、路由模式路由可以理解为一种寻径功能模块,比如URL地址里面的index模块怎么才能省略呢,默认的URL地址显得有点长,下面就来说说如何通过路由简化URL访问。ThinkPHP5.0的路由比较灵活,并且不需要强制定义,可以总结归纳为如下三种方式:1.1、普通模式关闭路由,完全使用默认的PATH_INFO方式URL:'url_route_on'=>false,路由关闭后,不会解析任何路由规则,采用默认的PATH_INFO模式访问URL:http://zhansanjie/index.php/module/controller/action/param/value/...但仍然可以通过操作方法的参数绑定、空控制器和空操作等特性实现URL地址的简化。可以设置url_param_type配置参数来改变pathinfo模式下面的参数获取方式,默认是按名称成对解析,支持按照顺序解析变量,只需要更改为://按照顺序解析变量'url_param_type'=>1,1.2、混合模式开启路由,并使用路由定义+默认PATH_INFO方式的混合:'url_route_on'=>true,'url_route_must'=>false,该方式下面,只需要对需要定义路由规则的访问地址定义路由规则,其它的仍然按照第一种普通模式的PATH_INFO模式访问URL。1.3、强制模式开启路由,并设置必须定义路由才能访问:'url_route_on'=>true,'url_route_must'=>true,这种方式下面必须严格给每一个访问地址定义路由规则(包括首页),否则将抛出异常。首页的路由规则采用/定义即可,例如下面把网站首页路由输出Hello,world!Route::get('/',function(){return'Hello,world!';});2、路由配置2.1、URL请求的执行流程:用户请求->路由解析->调度请求->执行操作->响应输出2.2、路由规则写在哪里:*路由规则写在与应用配置统计的route.php文件中*路由规则主要使用路由类Route::rule()方法注册2.3、设置路由配置文件列表:'route_config_file'=>['home','admin'],application/home.php配置home模块的路由规则,application/admin.php则配置admin模块的路由规则。虽然运行的时候依然会同时加载并注册,但定义的时候是明确分开了,便于协作。3、路由注册路由注册可以采用方法动态单个和批量注册,也可以直接定义路由定义文件的方式进行集中注册。3.1、动态注册和静态路由现在给该URL地址定义一个新的路由规则如下:Route::rule('hello/:name','index/Index/hello');现在我们来分析下rule方法的参数,第一个参数称为路由规则(通过路由访问的地址),第二个参数为该规则对应的路由地址(也就是原来定义路由之前访问的URL地址)。路由规则通常可以包含变量(例如其中的:name就是一个路由变量),路由规则中包含变量(包括可选变量)的就称该条路由规则为动态路由,没有包含任何变量的路由我们称之为静态路由,例如://静态路由规则Route::rule('hello','index/Index/hello');//动态路由规则Route::rule('hello/:name','index/Index/hello');注:ThinkPHP5.0的路由规则定义是从根目录开始,而不是基于模块名的。并且原来的访问地址会自动失效。3.2、URL请求类型我们知道一个URL请求类型有很多,常用的包括GET/POST/PUT/DELETE等,我们使用rule方法注册的路由,默认是支持任意请求类型访问的,不过你可以通过第三个参数来限定请求类型:Route::rule('hello/:name','index/index/hello','GET');注:只有通过GET请求的访问,该路由才会生效。不指定的话默认为任何请求类型如果你希望路由可以支持所有的请求类型,也可以使用:Route::any('hello/:name','index/index/hello');注:any方法其实和rule方法是一样的,区别在于不用写第三个参数。系统提供了为不同的请求类型定义路由规则的简化方法,例如:Route::get('new/:id','News/read');//定义GET请求路由规则Route::post('new/:id','News/update');//定义POST请求路由规则Route::put('new/:id','News/update');//定义PUT请求路由规则Route::delete('new/:id','News/delete');//定义DELETE请求路由规则Route::any('new/:id','News/read');//所有请求都支持的路由规则我们也可以批量注册路由规则,例如:Route::rule(['new/:id'=>'News/read','blog/:name'=>'Blog/detail']);Route::get(['new/:id'=>'News/read','blog/:name'=>'Blog/detail']);Route::post(['new/:id'=>'News/update','blog/:name'=>'Blog/detail']);4、路由表达式路由表达式统一使字符串定义,采用规则定义的方式。4.1、规则表达式规则表达式通常包含静态地址和动态地址,或者两种地址的结合,例如下面都属于有效的规则表达式:'/'=>'index',//首页访问路由'my'=>'Member/myinfo',//静态地址路由'blog/:id'=>'Blog/read',//静态地址和动态地址结合'new/:year/:month/:day'=>'News/read',//静态地址和动态地址结合':user/:blog_id'=>'Blog/read',//全动态地址每个参数中以“:”开头的参数都表示动态变量,并且会自动绑定到操作方法的对应参数。4.2、路由变量支持对路由参数的可选定义,例如:'blog/:year/[:month]'=>'Blog/archive',[:month]变量用[]包含起来后就表示该变量是路由匹配的可选变量。4.3、变量解析方式路由规则之外的变量解析方式一般是key1/value1/key2/value2解析为key1=value1,key2=value2,也就是说http://tp5.com/hello/thinkphp/city/shanghai除了会解析路由变量name之外,还会解析另外一个city变量,分别是:'name'=>'thinkphp','city'=>'shanghai'当然我们可以设置按顺序解析:'url_param_type'=>1这个时候如果访问http://tp5.com/hello/thinkphp/city/shanghai,得到的变量结果就完全不同了:'name'=>'thinkphp',0=>'city',1=>'shanghai',4.4、定制分隔符我们在定义路由规则的时候,都是统一使用/作为URL分隔符,但并不是表示URL访问的时候只能使用/作为分隔符,例如我们可以设置参数:'pathinfo_depr'=>'-',那么URL访问地址就会变成http://tp5.com/hello-thinkphphttp://tp5.com/hello-thinkphp-beijing如果你希望某个路由地址使用不同的URL分隔符,有两种方法:方法一:param_depr先介绍第一种比较简单的,定义路由规则的时候,添加param_depr参数(要求V5.0.2+),例如:Route::get('hello/:name/[:city]','index/index/hello',['param_depr'=>'-'],['name'=>'\w+','city'=>'[A-Za-z]+']);表示只有在该路由规则访问的时候,才使用-作为url分隔符。方法二:组合变量在一些复杂的路由规则定义中,我们可以使用组合变量定义方式,组合变量的优势是变量分隔符可以随意定义,例如://正确路径:http://www.mtp5.com/test/1;注:‘?《name?》’表示可选的,['index/index2/test',[]]里面的‘[]’是必须的'test/<id?>-?<name?>'=>['index/index2/test',[]]//正确路径:http://www.mtp5.com/test-1'test-<id>-?<name?>'=>['index/index2/test',[]]//正确路径:http://www.mtp5.com/test-1-'test-<id>-<name?>'=>['index/index2/test',[]]//正确路径:http://www.mtp5.com/test/1-'test/<id>-<name?>'=>['index/index2/test',[]]//正确路径:http://www.mtp5.com/test1'test?<id?>-?<name?>'=>['index/index2/test',[]]//正确路径:http://www.mtp5.com/test'test-?<id?>-?<name?>'=>['index/index2/test',[]]错误的写法://错误写法'test/?<id?>-?<name?>'=>['index/index2/test',[]]'test/[:id]-?<name?>'=>['index/index2/test',[]]注:<name?>表示可选变量,'?<name?>'表示前面的分隔符和这个变量都是可选的通过本篇内容的学习,你已经掌握了路由变量的使用,下面是路由变量的对比变量定义必须变量可选变量变量分隔符普通变量:name[:name]/组合变量<name><name?>实际URL分隔符4.5、完整匹配规则匹配检测的时候只是对URL从头开始匹配,只要URL地址包含了定义的路由规则就会匹配成功,如果希望完全匹配,可以在路由表达式最后使用$符号,例如://正确的写法'new/:cate$'=>'News/category',//路径:http://serverName/index.php/new/info'hello/[:name]$'=>'index/hello',//错误的写法'url/[:id]/[:name$]'=>'index/index2/url',

    • TP代码
    • 182阅读
    • 2023-08-01

  • ThinkPHP5框架模型(model)的使用
    ThinkPHP5框架模型(model)的使用

    在使用ThinkPHP5的过程中,我经常使用db进行数据库操作的,后来接触到了模型(model),刚使用时感觉跟db没啥区别,后来查官网知道模型基类中还提供了较多的其他的方法可以方便使用例如获取器、修改器、数据完成等等功能。因此模型的功能更为强大,tp5官网推荐使用model。就数据格式而言,在DB中是采用的数组格式使用。而在模型中统一使用对象。其中数据库交互后涉及到格式转换。因此在同等情况下db的数据略快与模型方式。因此对于ThinkPHP5使用DB与model的方式具体在编程中选择哪一个按照个人的观点并无强制要求。有时候为了项目中的封装采用模型方式可能更为合适一些1、模型定义在model定义一个Blog模型类:<?phpnamespaceapp\demo\model;usethink\Model;classBlogextendsModel{//默认主键为自动识别,如果需要指定,可以设置属性://protected$pk='uid';}模型会自动对应数据表,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,例如:模型名约定对应数据表(假设数据库的前缀定义是think_)Userthink_userUserTypethink_user_type假设我这个类名和表名不相干的,但我这个类想操作这个表,tp5还有另一种方法:<?phpnamespaceapp\demo\model;usethink\Model;classTestextendsModel{//设置数据表(不含前缀)protected$name='blog';//设置完整的数据表//protected$table='tp_codes';}2、模型调用模型类可以使用静态调用或者实例化调用两种方式,例如://静态调用$blog=Blog::get(1);//以id为1作为条件(自动根据主键来查)//实例化模型$blog=newBlog();//使用Loader类实例化(单例)$blog=Loader::model('Blog');//或者使用助手函数`model`$blog=model('Blog');3、使用模型增删查改(1)模型查询操作//查询$blog=Blog::get(2);//以id为1作为条件(自动根据主键来查)echo$blog->title;//输出:php实战$user=newUser();//查询单个数据$user->where('name','thinkphp')->find();//多条件查询,可以传入数组作为查询条件$bolg=Blog::get(['title'=>'模型1','content'=>'模型内容2']);$bolg=Blog::where(['title'=>'模型1','content'=>'模型内容2'])->find();echo$bolg->id;//查询全部$bolg=Blog::all();foreach($bolgas$key=>$v){echo$v->title."<br>";}    $user=newUser();    //查询数据集    $user->where('name','thinkphp')    ->limit(10)    ->order('id','desc')    ->select();动态查询:通过getByxxx()进行条件查询,后面的xxx是字段名称(按驼峰命名)//根据某个条件查询数据getByxxx()方法$bolg=Blog::getByTitle('模型1');echo$bolg->content;(2)模型添加操作$blog=newBlog()//添加单条$blog->title='模型';$blog->author='lhs';$blog->publish_time='11';$blog->content='模型内容';$blog->save();//批量新增$list=[['title'=>'模型1','author'=>'lhs','publish_time'=>'12','content'=>'模型内容2'],['title'=>'模型2','author'=>'lhs','publish_time'=>'13','content'=>'模型内容3']];if($blog->saveAll($list)){echo'用户添加成功!';}或者使用isUpdate进行添加操作//用这个方法添加数据$blog=Blog::get(1);$blog->title='get添加模型';$blog->author='lhs';$blog->publish_time='1568908800';$blog->content='模型内容';$blog->id=null;if($blog->isUpdate(false)->save()){echo"添加成功!";}注:要把id设置为空,不然报主键重复的错误(3)模型更新操作//更新$blog=newBlog();$blog->id=24;$blog->title='更新模型';$blog->author='lhs';$blog->publish_time='1572919302';$blog->content='模型内容';$blog->isUpdate()->save();//调用这个方法,isUpdate改true(即默认是更新操作)$blog=Blog::get(1);$blog->title='更新模型';$blog->author='lhs';$blog->publish_time='1553011200';$blog->content='模型内容';if($blog->save()){echo"更新成功!";}(4)模型删除操作$bolg=Blog::get(25);$bolg->delete();Blog::destroy(26);4、读取器和修改器读取器的作用是在获取数据的字段值后自动进行处理,修改器的作用是可以在数据赋值的时候自动进行转换处理,例如:<?phpnamespaceapp\demo\model;usethink\Model;classCodesextendsModel{//读取器publicfunctiongetPublishTimeAttr($value){returndate("Y-m-dH:i",$value);}//$data为获取整个对象publicfunctiongetNameAttr($value,$data){return'书名:'.$data['name'].',价格:'.$data['price'];}//修改器publicfunctionsetPublishTimeAttr($value){returnstrtotime($value);}}使用读取器和修改器publicfunctionread(){//读取器的方法命名规范:get+属性名(驼峰命名法)+Attr/*$code=Codes::get(1);echo$code->publish_time;//如果自定义了getXXXAttr就调用,没有自定义就原样输出echo$code->name;*///添加$code=newCodes();$code->name='支付宝基金';$code->category='经济';$code->price='161';$code->publish_time='2019-9-27';//调用setPublishTimeAttr方法,在添加是自动转为时间戳$code->save();}5、类型转换integer:设置为integer(整型)后,该字段写入和输出的时候都会自动转换为整型。float:该字段的值写入和输出的时候自动转换为浮点型。boolean:该字段的值写入和输出的时候自动转换为布尔型。array:如果设置为强制转换为array类型,系统会自动把数组编码为json格式字符串写入数据库,取出来的时候会自动解码。object:该字段的值在写入的时候会自动编码为json字符串,输出的时候会自动转换为stdclass对象。serialize:指定为序列化类型的话,数据会自动序列化写入,并且在读取的时候自动反序列化。json:指定为json类型的话,数据会自动json_encode写入,并且在读取的时候自动json_decode处理。timestamp:指定为时间戳字段类型的话,该字段的值在写入时候会自动使用strtotime生成对应的时间戳,输出的时候会自动转换为dateFormat属性定义的时间字符串格式,默认的格式为Y-m-dH:i:s例子://类型转换protected$type=['publish_time'=>'timestamp:Y-m-d','name'=>'serialize'//序列化];在修改数据时自动转换类型//自动转换,修改$code=newCodes();$code->name=['中国的经济','金融危机','美国的经济霸权'];$code->category='经济';$code->price='132161';$code->publish_time='2019-12-27';//调用setPublishTimeAttr方法,在添加是自动转为时间戳$code->save();6、自动完成数据自动完成指在不需要手动赋值的情况下对字段的值进行处理后写入数据库。系统支持auto、insert和update三个属性,可以分别在写入、新增和更新的时候进行字段的自动完成机制,auto属性自动完成包含新增和更新操作,例如://自动完成,更新protected$update=['category'=>'经济'];//自动完成,新增protected$insert=['category'=>'经济'];自动完成对category更新和添加//自动完成,更新$code=Codes::get(4);$code->name='支付宝的霸权';$code->save();//自动完成,新增$code=newCodes();$code->name='中国经济霸权';$code->price='270000';$code->publish_time='2019-12-27';$code->save();以上的自动完成都是对category固定赋值,如果想动态自动完成就结合修改器//自动完成protected$update=[//'category'=>'经济''category'];publicfunctionsetNameAttr($value,$data){return$data['category']=='经济'?'国家经济':'其他';}//自动完成配合修改器,更新$code=Codes::get(4);$code->name='美国';$code->publish_time='2019-12-2';$code->save();结果如下:7、查询范围可以对模型的查询和写入操作进行封装,例如://查询范围protectedfunctionscopeName($query,$a){$query->where("name",$a);}protectedfunctionscopeCategory($query,$a){$query->where('category',$a);}//全局查询范围,就算不调用也会自动加上protectedstaticfunctionbase($query){$query->where('id',2);}就可以进行下面的条件查询://查询范围$code=Codes::scope('name','php实战')->scope('category','PHP')->scope(function($query){$query->order('id','desc');})->all();运行结果:

    • TP代码
    • 209阅读
    • 2023-08-01

  • ThinkPHP5引入公共部分head和foot(多种方法)
    ThinkPHP5引入公共部分head和foot(多种方法)

    在项目中,header和footer重复使用的次数高,于是我们把header和footer作为公共部分,其他模板需要的话就引用。下面我教大家引用公共模板1、使用include 首先在view下面新建一个文件夹(common),用来存放公共模板,然后使用include在需要的地方引用该板块:{includefile="common/head"/}可以一次包含多个模版,例如:{includefile="public/header,public/menu"/}无论你使用什么方式包含外部模板,Include标签支持在包含文件的同时传入参数,例如,下面的例子我们在包含header模板的时候传入了title和keywords参数:{includefile="Public/header"title="$title"keywords="站三界导航"/}就可以在包含的header.html文件里面使用title和keywords变量,如下:<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>[title]</title><metaname="keywords"content="[keywords]"/></head>2、模板布局ThinkPHP的模板引擎内置了布局模板功能支持,可以方便的实现模板布局以及布局嵌套功能。有三种布局模板的支持方式。第一种方式:全局配置方式这种方式仅需在项目配置文件中添加相关的布局模板配置,就可以简单实现模板布局功能,比较适用于全站使用相同布局的情况,需要配置开启layout_on参数(默认不开启),并且设置布局入口文件名layout_name(默认为layout)。'template'=>['layout_on'=>true,'layout_name'=>'layout',]注:layout_on设置false则关闭公开模板,如果想测试它是否关闭了,需要把runtime里面的文件删除,这样缓存就清空就不会影响它的效果在不开启layout_on布局模板之前,会直接渲染application/index/view/jade/index.html(我的模板文件),开启之后,首先会渲染application/index/view/layout.html模板,布局模板的写法和其他模板的写法类似,本身也可以支持所有的模板标签以及包含文件,区别在于有一个特定的输出替换变量{__CONTENT__},例如,下面是一个典型的layout.html模板的写法:{includefile="common/head"/}{__CONTENT__}{includefile="common/foot"/}读取layout模板之后,会再解析user/add.html模板文件,并把解析后的内容替换到layout布局模板文件的{CONTENT}特定字符串。当然可以通过设置来改变这个特定的替换字符串,例如:'template'=>['layout_on'=>true,'layout_name'=>'layout','layout_item'=>'{__REPLACE__}']注:一个布局模板同时只能有一个特定替换字符串。如果jade.html不需要使用公共模板,在里面加上{__NOLAYOUT__}就不会引入公共模块第二种方式:模板标签方式这种布局模板不需要在配置文件中设置任何参数,也不需要开启layout_on,直接在模板文件中指定布局模板即可,相关的布局模板调整也在模板中进行。以前面的输出模板为例,这种方式的入口还是在user/add.html模板,但是我们可以修改下add模板文件的内容,在头部增加下面的布局标签(记得首先关闭前面的layout_on设置,否则可能出现布局循环):{layoutname="layout"/}表示当前模板文件需要使用layout.html布局模板文件,而布局模板文件的写法和上面第一种方式是一样的。当渲染user/add.html模板文件的时候,如果读取到layout标签,则会把当前模板的解析内容替换到layout布局模板的{CONTENT}特定字符串。一个模板文件中只能使用一个布局模板,如果模板文件中没有使用任何layout标签则表示当前模板不使用任何布局。如果需要使用其他的布局模板,可以改变layout的name属性,例如:{layoutname="newlayout"/}还可以在layout标签里面指定要替换的特定字符串:{layoutname="Layout/newlayout"replace="[__REPLACE__]"/}第三种方式:使用layout控制模板布局使用内置的layout方法可以更灵活的在程序中控制模板输出的布局功能,尤其适用于局部需要布局或者关闭布局的情况,这种方式也不需要在配置文件中开启layout_on。例如:<?phpnamespaceapp\index\controller;usethink\Controller;usethink\Request;usethink\Db;classJadeextendsController{publicfunctionindex(){$this->view->engine->layout(true);return$this->view->fetch();}}表示当前的模板输出启用了布局模板,并且采用默认的layout布局模板。如果当前输出需要使用不同的布局模板,可以动态的指定布局模板名称,例如:<?phpnamespaceapp\index\controller;usethink\Controller;usethink\Request;usethink\Db;classJadeextendsController{publicfunctionindex(){$this->view->engine->layout('Layout/newlayout');return$this->view->fetch();}}或者使用layout方法动态关闭当前模板的布局功能,这种用法可以配合第一种布局方式,例如全局配置已经开启了布局,可以在某个页面单独关闭:namespaceapp\index\controller;usethink\Controller;classUserextendsController{publicfunctionadd(){//临时关闭当前模板的布局功能$this->view->engine->layout(false);return$this->display('add');}}

    • TP代码
    • 185阅读
    • 2023-08-01

站三界导航
本站声明:本站严格遵守国家相关法律规定,非正规网站一概不予收录。本站所有资料取之于互联网,任何公司或个人参考使用本资料请自辨真伪、后果自负,站三界导航不承担任何责任。在此特别感谢您对站三界导航的支持与厚爱。