学习
实践
活动
工具
TVP
写文章

CI一些优秀实践

不要忘记在index.php文件修改 $system_folder 和 $application_folder ,$system_folder 应该是相对于 index.php 文件, $application_folder 通过保护你邮件表单,评论表单,以及其他各种免费用户提交数据来防止垃圾信息,一个简单方法是只允许一个IP/User客户端在一分钟之内只能提交一次,一个比较好方式是使用 Captcha ,CI2内置了一个 不要总是重复造轮子,把能重用代码放在它应该在地方,比如libraries, helpers 或者是 models,不是controllers,一个经验准则:当你复制代码时候,也许你已经第二次把它放在了错误地方 然后载入Base4,因为Base4CI_Base继承于CI_Loader,Base5,CI_Base与CI_Loader没有继承关系。 下一步,也是真正关键一步了,这一步开始载入了一个Controller类,这个是个实例,不是引用;然后通过Router来解析http地址,获得控制器和方法名字,接着看application\controllers

46150

讲解-加载静态页

接下来,您将创建一个新闻部分,该部分将从数据库读取新闻项。最后,您将添加一个表单以在数据库创建新闻项。 创建新闻项,这将引入更高级数据库操作和表单验证。 结论,这将为您提供进一步阅读和其他资源一些指示。 享受您对CodeIgniter框架探索。 在页头模板文件,$title 变量代表页面的自定义标题,它是在方法中被赋值,但并不是直接赋值给 title 变量,而是赋值给 $data 数组 title 元素。 所以控制器 $data['title'] ,就等于视图中 $title 。 路由 控制器已经开始工作了! 路由规则是不是正确将你带到了控制器 view() 方法?太酷了!

35410
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PHP面试题,面试必看!

    应用类库命名空间统一为app(可修改)不是模块名; 控制器类名默认不带Controller后缀,可以配置开启controller_suffix参数启用控制器类后缀; 控制器操作方法采用return 5.View并不是理想view,理想view可能只是html代码,不会涉及PHP代码。 3、==Lavarel简单介绍==:Laravel是一套简洁,优雅PHP WEB开发框架。 NULL COMMENT '年龄', `sex` VARCHAR(50) DEFAULT NULL COMMENT '性别', PRIMARY key(`id`) ) 现在需要录入一个新数据到表 2. get是把参数数据队列加到提交表单ACTION属性所指URL表单内各个字段一一对应,在URL可以看到。 unserialize — 从已存储表示创建 PHP

    11220

    CI框架 — URL

    注: 1、这些规则并不是对所有 Web 服务器都有效。 2、确保使用上面的规则排除掉你希望能直接访问到资源。 添加 URL 后缀 在你 config/config.php 文件你可以指定一个后缀,CodeIgniter 生成 URL 时会自动添加上它。 c=products&m=view&id=345 CodeIgniter 也支持这个格式,你可以在 application/config.php 配置文件启用它。 c=controller&m=method 注: 如果使用查询字符串格式 URL,就必须自己手工构造 URL 不能使用 URL 辅助函数了(以及其他生成 URL 相关库,例如表单辅助函数),这是由于这些库只能处理 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/109161.html原文链接:https://javaforall.cn

    9230

    -公共函数和全局常量

    若 $key有存在, 则返回 $key 当前存储在缓存,若不存在则返回null。 返回: 运行环境变量, 默认, 或者 null. 返回类型: mixed 用于检索事前设置在环境变量变量值,若无设置则返回默认. 参数: $locale (string) – 使用不同地区,不是默认地区设置。 检索一个基于某个别名字符串本地特定文件。 $locale (string) – 使用不同地区,不是默认地区设置。 检索一个基于某个别名字符串本地特定文件。     更多详细信息请见 Localization 页。 它将会被作为一个反向路由请求,不是一个完整URI,就像使用 redirect()->route()一样:: // 跳转到一个命名路由或反向路由 URI return redirect

    30420

    概述-服务

    Introduction CodeIgniter所有类均作为“服务”提供。这仅意味着,要对要调用类进行硬定义,不是对要加载类名称进行硬编码,而是在一个非常简单配置文件定义它们。 ,MyRouter 不是CodeIgniter\Router\RouterCollection: public static function routes() { return new views/') { return new \CodeIgniter\View\View($viewPath); } 这将在构造方法设置默认路径,但允许轻松更改其使用路径: $renderer getSharedInstance()从工厂方法内部调用方法很容易处理。这用于检查实例是否已在类创建并保存,如果没有,则创建一个新实例。所有工厂方法都提供一个 作为最后一个参数。 想象一下,您已经Blog在根目录创建了一个新目录。这将包含一个带有控制器,模型等Blog模块,并且您想将某些类作为服务使用。

    34010

    痛心CodeIgniter4.x反序列化POP链挖掘报告

    0x00 前言 CI框架作为PHP国外流行框架,笔者有幸挖掘到了它反序列化POP链,其漏洞影响版本为4.*版本。 ? 文末有笔者与该厂商一些“小故事”。 可以看到在/system/Cache/Handlers/RedisHandler.php__destruct魔术方法,$this->redis非常灵活,它可以是任意类实例化对象,那么我们可以调用任意对象 随后直接放入$whereIn这么大一个数组,充当Where判断Key。 那么无疑这里是存在一个SQL注入漏洞。我们不着急,回到Model.php继续往下通读。 ? 0x03 POC编写&&环境依赖 CI框架建立于PHP>=7.2版本,在这些版本,PHP对属性修饰符不太敏感,所以我们POC类所有成员属性对象修饰符都定义为了public。 CI框架写代码有定义方法默认习惯,这样在我们反序列化每个跳板显得非常圆润,TP3.2.3没有定义默认习惯,这里需要降低PHP版本,来实现反序列化。

    41520

    -辅助函数

    CodeIgniter大多数其他系统不同,辅助程序不是以面向对象格式编写。它们是简单程序功能。每个助手功能执行一项特定任务,不依赖于其他功能。 默认情况下,CodeIgniter不会加载帮助程序文件,因此使用帮助程序第一步是加载它。加载后,它将在您控制器和 视图中全局可用。 帮助程序通常存储在您system / Helpers或 application / Helpers目录CodeIgniter将首先出现在您 application / Helpers目录。 : helper(['cookie', 'date']); 可以在控制器方法任何地方(甚至不是View文件)加载帮助程序,尽管这不是一个好习惯,只要在使用它之前就将其加载即可。 您可以在控制器构造函数中加载帮助程序,以便它们在任何函数自动可用,也可以在需要它特定函数中加载帮助程序。 注解 上面的Helper加载方法不会返回,因此请勿尝试将其分配给变量。

    37920

    defined(‘BASEPATH’)) exit(‘No direct script access allowed’)作用

    在看源代码时,发现codeigniter框架控制器,总是加上这样一段话; if(! : 为了防止跨站攻击,直接通过访问文件路径用 另外要注意,这里定义是:defined()不是define(),如果你误将defined写成define,将会报一下错误: A PHP Error was 并不区分数据类型,所以$file既可以是int也可以bool,所以这样语句不会报错。 其实在大多数语言中, bool or bool这样语句中,如果前一个为真后一个就不会再判断了。 这里也是的,所以如果fopen函数执行正确的话,会返回一个大于0int(这其实就 是“真”),后面的语句就不会执行了。

    8610

    Django 实战1:搭建属于自己社工查询系统(上)

    题图:by click_vision from Instagram 前面的文章已经把模板、模型、视图、表单等知识点逐一讲解,大家已经熟悉它们具体用法。但如何将其串联起来还一筹莫展。 我就先阐述我思考内容。既然项目是一个查询系统,那么重点在于查询。众所周知,查询数据则是执行 SQL 语句来从数据库获取数据。SQL 查询语句一般使用表字段作为查询条件。哪些能作为查询条件呢? 先让我们来看看数据库表是怎么定义? 2 数据库表 数据库只有一个表,名为 Socialusers。 我们在数据库定义是 chineseName 和 QQ。 Django 在生成模型时,自动将大写转为化小写。 当它们渲染时候,会自动被解析为 Select 和 input 控件。 6 视图 我设定是用户提交表单地址不改变。所以表单数据会被提交到原来页面。因此,在视图工作是拦截表单,并截取里面的内容。

    11.1K30

    从Web开发者视角来解读MVC架构

    在实际应用,我们只需要修改数据库驱动程序便可,不必知晓与之协作数据库类型。例如:您完全可以让自己模型与JSON文件进行交互,并从中提取数据。而这个简单JSON文件甚至都不算是一个数据库。 它负责面向用户显示,以及让用户如何与应用程序进行交互。 因此,视图通常包括:HTML、CSS、以及来自控制器各种动态。在应用运行时,控制器会与视图、以及模型保持通信。 例如:用户在访问页面时点击某个链接,触发了一个GET请求;或者是以提交表单形式,发送一个POST请求;当然我们也可以发出删除、或提出更新等类型请求。 控制器需要通过模型从数据库获取某些数据,控制器在获取到相关数据之后,通过加载视图方式,将该数据传递给它。接着,模板引擎接管后续“任务”,实现输出变量之类逻辑事务。 当然,控制器也可以在不传递数据情况下加载某个视图。此处需要有一个带有HTML和CSS纯Web页面,就不是真实模板逻辑。 下面是一个非常简单例子(或称流程图)。 ?

    30420

    Java关于String类型10个问题

    用“==”还是equals “==”是用来检测两个引用是不是指向内存同一个对象,equals()方法则检测是两个对象是否相等。 只要你想检测俩字符串是不是相等,你就必须得用equals()方法。 为什么安全敏感字符串信息用char[]会比String对象更好? 同时,这么写也有一定几率让你代码跑更快,因为垃圾回收器会吧没有在使用大字符串回收留下子字符串。 JDK7substring()方法会创建一个新字符数组,不用之前存在。 String repeated = StringUtils.repeat(str,3); //运行结果:abcdabcdabcd 如何将时间格式字符串转换成Date对象? =null)直接判断没有利用StringUtils工具类isNotBlank(args)方法来得好,因为输入框即使没有输入,如果用模型驱动接收时候,传递到后台不一定是Null,有时候是空字符串,

    39000

    简单Excel VBA编程问题解答——完美Excel第183周小结

    学习Excel技术,关注微信公众号: excelperfect 下面是2020年11月12日发布一些简单ExcelVBA问题答案,是不是和你想一样。 Function过程会向程序返回一个Sub过程则不会。 13.过程代码行数有什么限制? 没有限制,但是良好编程习惯规定过程不应太长,最多30至40行代码是合理。 14.如何将数组作为参数传递给过程? 数组名后加上空括号。 15.如何指定函数要返回? 通过将赋给函数名称。 16.过程局部变量能否在调用过程之间“记住”其?如果要这样,怎么办? 21.字符“A”和“a”是否具有相同ASCII不是。同一字母大写和小写具有不同ASCII。 22.如何从字符串开头提取一定数量字符? 使用Left函数。 Excel公式技巧64:为重复构造包含唯一辅助列 Excel小技巧67:列出工作表中所有定义名称 完美Excel社群本周内容 本周完美Excel社群内容更新不是很多,仍然是《Excel编程周末速成班

    34720

    jsessionid困扰「建议收藏」

    对象数组,对应由HTTP请求Cookie报头输入。 十七、使用隐藏表单域有什么缺点 仅当每个页面都是有表单提交动态生成时,才能使用这种方法。单击常规<A HREF.. 二十、如何将信息与会话关联起来   setAttribute会替换任何之前设定;如果想要在不提供任何代替情况下移除某个,则应使用removeAttribute。 如果要使用基本类型作为属性,必须将其转换为相应封装类对象 二十二、如何废弃会话数据 A.只移除自己编写servlet创建数据: 调用removeAttribute(“key”)将指定键关联废弃 注意一点,jsessionid跟一般url参数传递方式是不同不是作为参数跟在"?"后面,而是紧跟在url后面用";"来分隔。

    16610

    ASP.NET MVC下四种验证编程方式

    在针对GET请求Action方法Index,我们创建了一个Person对象并将其作为Model呈现在对应View。 我们直接调用HtmlHelper<TModel> 扩展方法EditorForModel将作为ModelPerson对象以编辑模式呈现在表单之中。 二、使用ValidationAttribute特性 将针对输入参数验证逻辑和业务逻辑定义在Action方法不是一种值得推荐编程方式。 这些预定义验证特性不是本章论述重点,我们会在“下篇”对它们作一个概括性介绍。 具体验证实现在重写IsValid方法,如果被验证在这个列表,则视为验证成功并返回True。为了提供一个友好错误消息,我们重写了方法FormatErrorMessage。

    45280

    10个比较流行PHP框架

    CodeIgniter以其占用空间小闻名(包括文档在内,它大小只有大约2mb),是一个适合开发动态网站PHP框架。它提供了许多预构建模块,帮助构建健壮和可重用组件。 关键特性包括MVC架构、一流错误处理、内置安全工具以及简单优秀文档。此外,它还创建可伸缩应用程序。 与其他框架相比,CodeIgniter要快得多。 这里有一点需要注意:CodeIgniter发行版有点不规则,所以对于需要高级安全性应用程序来说,框架不是一个很好选择。 3. Symfony ? Phalcon是一个使用MVC web架构设计模式全栈PHP框架,最初是用C和c++编写,并于2012年发布。因为它是作为C-extension交付,所以您不必担心学习C编程语言。 ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发诞生。最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布

    4.3K10

    我理解低代码平台、表单生成器核心

    因为它表单组件非常简单,通常都是单个数字,文本或者选项列表,字段比较好控制。 但是如果作为一个低代码平台的话,数据流就相对复杂。 业务组件核心又在于组件需要数据。 然后配置项数据更新后,依次将数据回传到组件。这样,才是一个完整过程。 难点在于如何将组件数据表示为一个可以展示右侧setter数据格式。 然后生成一个对应数据格式,比如: configParams:[ { fieldName:'msg', setterType:null, fieldValue Vueprops又不能直接修改,以及一些其他限制,所以还是感觉react在开发复杂应用时候略胜一筹。 总结 有些东西我们平时都遇到过,并且也在用,但是有时候没有去深入思考一些问题。

    12510

    客户端 session 导致安全问题

    然而,并不是所有语言都有默认session存储机制,也不是任何情况下我们都可以向服务器写入文件。 我们用浏览器访问/captcha,即可得到生成好验证码图片,此时复制保存在cookiesession,用0x03提供脚本进行解码: ? 0x05 CodeIgniter 2.1.4 session伪造及对象注入漏洞 Codeigniter 2session也储存在session,默认名为ci_session,默认如下: ? 可见,session数据被用PHP自带serialize函数进行序列化,并签名后作为ci_session。原理上和flask如出一辙,我就不重述了。 ,用户可以修改任意session 使用强健加密及签名算法,不是自己造(反例discuz)

    64141

    Django模型

    为字段指定默认 primary_key 若为True,则该字段会成为模型主键字段,默认是False,一般作为AutoField选项使用 unique 如果为True, 这个字段在表必须有唯一 null参数是数据库层面的,设置null=True之后,表示数据库该字段可以为空;blank参数是表单层面(HTML),blank=True之后,表示表单填写该字段时候可以不填。 外键 外键这个东西,通常都是在业务逻辑层面来实现不是在数据库实现。但是通常大家学习数据库课程,都会有数据库设计范式,其中有个第三范式就是专指外键约束。在这里只是简单介绍一下。 choices参数就是从我们定义二元组(GENDER_CHOICES)获取值。二元组第一个会储存在数据库第二个将只会用于在表单显示。 这是因为Django会默认指定另外一张表id作为关联字段。如下图所示: 可以看到peopleinfo这张表外键名称是book_id

    11720

    扫码关注腾讯云开发者

    领取腾讯云代金券