ci框架(一),ci框架(
ci目录结构
|-----<span>system</span><span> 框架程序目录 </span>|-----<span>core 框架的核心程序 </span>|-----CodeIgniter.<span>php 引导性文件 </span>|-----Common.<span>php 加载基类库的公共函数 </span>|-----Controller.<span>php 基控制器类文件:CI_Controller </span>|-----Model.<span>php 基模型类文件:CI_Model </span>|-----Config.<span>php 配置类文件:CI_Config </span>|-----Input.<span>php 输入类文件:CI_Input </span>|-----Output.<span>php 输出类文件:CI_Output </span>|-----URL.<span>php URL类文件:CI_URl </span>|-----Router.<span>php 路由类文件:CI_Router </span>|-----Loader.<span>php 加载类文件:CI_Loader </span>|-----<span>helpers 辅助函数 </span>|-----url_helper.<span>php url相关的辅助函数,如:创建url的辅助函数 </span>|-----captcha_helper.<span>php创建图形验证码的辅助函数 </span>|-----<span>libraries 通用类库 </span>|-----Pagination.<span>php 通用分页类库 </span>|-----Upload.<span>php 通用文件上传类库 </span>|-----Image_lib.<span>php 通用图像处理类库 </span>|-----Session.<span>php 通用session类库 </span>|-----<span>language 语言包 </span>|-----<span>database 数据库操作相关的程序 </span>|-----DB_active_rec.<span>php 快捷操作类文件(ActiveRecord) </span>|-----<span>fonts 字库 </span>|-----<span>application 项目目录 </span>|-----<span>core 项目的核心程序 </span>|-----<span>helpers 项目的辅助函数 </span>|-----<span>libraries 通用类库 </span>|-----<span>language 语言包 </span>|-----<span>config 项目相关的配置 </span>|-----config.<span>php 项目相关的配置文件 </span>|-----database.<span>php 数据库相关的配置文件 </span>|-----autoload.<span>php 设置自动加载类库的配置文件 </span>|-----constants.<span>php 常量配置文件 </span>|-----routes.<span>php 路由配置文件 </span>|-----<span>controllers 控制器目录 </span>|-----welcome.<span>php 控制器文件,继承CI_Controller </span>|-----<span>models 模型目录 </span>|-----welcome_model.<span>php 模型文件,继承CI_Model </span>|-----<span>views 视图目录 </span>|-----welcome.php 视图模板文件,默认后缀名为.<span>php </span>|-----<span>cache 存放数据或模板的缓存文件 </span>|-----<span>errors 错误提示模板 </span>|-----<span>hooks 钩子,在不修改系统核心文件的基础上扩展系统功能 </span>|-----<span>third_party 第三方库 </span>|-----<span>logs 日志 </span>|-----index.php 入口文件
访问形式
在\application\controllers\welcome.php中添加函数:
<span>public</span> <span>function</span><span> hello() { </span><span>echo</span> "test"<span>; }</span>
入口文件.php/控制器/动作
自己新建控制器,hello.php:
<?php <span>if</span> ( ! <span>defined</span>('BASEPATH')) <span>exit</span>('No direct script access allowed'<span>); </span><span>class</span> Hello <span>extends</span><span> CI_Controller { </span><span>public</span> <span>function</span> sayHello(<span>$name</span><span>) { </span><span>echo</span> <span>$name</span>,",Hello World"<span>; } } </span>?>
注意:
- 方法名以下划线开头的是不能访问成功的,只能间接访问。
- 只能访问public修饰的方法。
- 尽量不要与类名相同的方法,会当作构造函数。
加载视图
application\views\view_test.php或者application\views\view\test.php(这中做法主要是方便同一类型的视图可以放在同一个文件夹下方便管理)
<span><</span><span>html</span><span>></span> <span><</span><span>head</span><span>></span> <span></</span><span>head</span><span>></span> <span><</span><span>body</span><span>></span><span> test_ci_hello_world </span><span></</span><span>body</span><span>></span> <span></</span><span>html</span><span>></span>
控制器:
<span>public</span> <span>function</span><span> addView() { </span><span>$this</span>->load->view("view_test"<span>); }</span>
或者:
<span>public</span> <span>function</span><span> addView2() { </span><span>$this</span>->load->view("view/test"<span>); }</span>
效果:
分配变量
把数据从控制器中传到视图中,控制器:
<span>public</span> <span>function</span><span> addView() { </span><span>$this</span>->load->vars("title","value"<span>); </span><span>$list</span> = <span>array</span><span>( </span><span>array</span>('id'=>1,'name'=>'jack','email'=>'123@123.com'), <span>array</span>('id'=>2,'name'=>'jack2','email'=>'1233@123.com'), <span>array</span>('id'=>3,'name'=>'jack3','email'=>'12333@123.com'<span>) ); </span><span>$data</span>['new_title']="标题"<span>; </span><span>$data</span>['list']=<span>$list</span><span>; </span><span>$this</span>->load->vars(<span>$data</span><span>); </span><span>$this</span>->load->view("view_test"<span>); }</span>
视图:
<html> <head> </head> <body> <h1><?php <span>echo</span> <span>$title</span>;?></h1> <h1><?php <span>echo</span> <span>$new_title</span>;?></h1><span> test_ci_hello_world </span><table> <?php <span>foreach</span>(<span>$list</span> <span>as</span> <span>$item</span>):?> <tr> <td><?=<span>$item</span>['id']?></td> <td><?=<span>$item</span>['name']?></td> <td><?=<span>$item</span>['email']?></td> </tr> <?php <span>endforeach</span>;?> </table> </body> </html>
效果:
public function addView() { $this->load->vars("title","value"); $list = array( array('id'=>1,'name'=>'jack','email'=>'123@123.com'), array('id'=>2,'name'=>'jack2','email'=>'1233@123.com'), array('id'=>3,'name'=>'jack3','email'=>'12333@123.com') ); $data['new_title']="标题"; $data['list']=$list; $this->load->vars($data); $this->load->view("view_test"); $this->load->view("footer"); }
视图view_test:
<html> <head> </head> <body> <h1><?php <span>echo</span> <span>$title</span>;?></h1> <h1><?php <span>echo</span> <span>$new_title</span>;?></h1><span> test_ci_hello_world </span><table> <?php <span>foreach</span>(<span>$list</span> <span>as</span> <span>$item</span>):?> <tr> <td><?=<span>$item</span>['id']?></td> <td><?=<span>$item</span>['name']?></td> <td><?=<span>$item</span>['email']?></td> </tr> <?php <span>endforeach</span>;?> </table>
视图footer:
<span>CI_hello_world!!! </span><span></</span><span>body</span><span>></span> <span></</span><span>html</span><span>></span>
显示效果:
uri参数获取
控制器:
<span>public</span> <span>function</span> getUri(<span>$id</span>,<span>$name</span>,<span>$year</span><span>) { </span><span>echo</span> "id--->".<span>$id</span>."---name--->".<span>$name</span>."---year--->".<span>$year</span>."<br />"<span>; </span><span>echo</span> "segment(1)--->".<span>$this</span>->uri->segment(1)."<br />"<span>; </span><span>echo</span> "segment(2)--->".<span>$this</span>->uri->segment(2)."<br />"<span>; </span><span>echo</span> "segment(3)--->".<span>$this</span>->uri->segment(3)."<br />"<span>; </span><span>echo</span> "segment(4)--->".<span>$this</span>->uri->segment(4)."<br />"<span>; </span><span>echo</span> "segment(5)--->".<span>$this</span>->uri->segment(5)."<br />"<span>; }</span>
效果:
加载数据库
这个操作在MVC中是放到model中做的。
在\application\config\database.php中配置数据库参数,注意dbprefix和swap_pre这两个参数。在php中写的是前缀,会默认当作swap_pre,然后放到数据库中的时候会转成dbprefix,但是最好两个都弄成一样的。
还有$active_group,默认是default,如果要连接两个数据库,把default另外取名,然后在函数中写明参数就OK。
必须继承数据核心类CI_Model,同时重载父类中的构造方法。
<span>class</span> Model_name <span>extends</span><span> CI_Model { </span><span>function</span><span> __construct() { parent</span>::<span>__construct(); } }</span>
在每次使用数据库的时候,都需要加载一次数据库:
<span>$this</span>->load->database();
为了方便,可以将数据库的加载设置成自动加载,在\application\config\autoload.php中。
<span>$autoload</span>['libraries'] = <span>array</span>('database');
对于数据库访问对象,装载到超级对象的属性中 $this->db
<span>$res</span> = <span>$this</span>->db->query(<span>$sql</span>);<span>//</span><span>返回对象</span> <span>$res</span>->result();<span>//</span><span>返回数组,数组中是一个一个的对象</span> <span>$res</span>->result_array();<span>//</span><span>返回二维数组,里面是关联数组</span> <span>$res</span>->row();<span>//</span><span>返回第一条数据,直接是一个对象</span>
AR操作数据库
在database.php文件中,将$active_recoed的值改为TRUE,这样就可以使用AR了。
<span>//</span><span>查询</span> <span>public</span> <span>function</span><span> index() { </span><span>$res</span> = <span>$this</span>->db->get('表名');<span>//</span><span>这里自动调用前缀</span> <span>foreach</span>(<span>$res</span>->result() <span>as</span> <span>$item</span><span>) { </span><span>echo</span> <span>$item</span>->name."<br />"<span>; } }</span>
<span>//</span><span>插入</span> <span>public</span> <span>function</span><span> index() { </span><span>$data</span>=<span>array</span><span>( </span>'name'=>'lisi', 'password'=><span>md5</span>('lisi'<span>) ); </span><span>$bool</span> = <span>$this</span>->db->insert("表名",<span>$data</span><span>); </span><span>var_dump</span>(<span>$bool</span><span>); }</span>
<span>//</span><span>更新</span> <span>public</span> <span>function</span><span> index() { </span><span>$data</span>=<span>array</span><span>( </span>'name'=>'wangwu', 'password'=><span>md5</span>('wangwu'<span>) ); </span><span>$bool</span> = <span>$this</span>->db->update('表名',<span>$data</span>,<span>array</span>('id'=>3<span>)); </span><span>var_dump</span>(<span>$bool</span><span>); }</span>
<span>//</span><span>删除</span> <span>$bool</span> = <span>$this</span>->db->delete('表名',<span>array</span>('id'=>2<span>)); </span><span>var_dump</span>(<span>$bool</span>);
常规的方法是ul嵌套,即主菜单ul-li里嵌套子菜单ul,要用到两级循环
首先循环主菜单,要有固定的条件来判断出主菜单,比如主菜单的uid==0或者其它。。。
- 栏目名称
if($news_item['uid'] == 0){ //判断并得到主菜单
echo " - ".$news_item['title'] . '
- ';
- "."ss".$child_item['title']."";
}
endforeach;
echo "";
}
endforeach; ?>
当然这仅限于两级菜单,多级或无限极,可以使用函数递归
function menu($uid=0){ //设置缺省从主菜单开始
global $news;
foreach ($news as $news_item):
if($news_item['uid'] == $uid){
echo " - ".$news_item['title'] . '
- ';
menu($news_item['id']); //递归调用
echo "";
}
endforeach;
}
------ 调用方法 ------------------------------- >
难道MY_Controller不要类名一致?
foreach ($news as $child_item): //循环二次
if($news_item['id'] == $child_item['uid']){ //判断并得到对应子菜单
echo " - "."ss".$child_item['title']."";

译者 | 布加迪审校 | 孙淑娟目前,没有用于构建和管理机器学习(ML)应用程序的标准实践。机器学习项目组织得不好,缺乏可重复性,而且从长远来看容易彻底失败。因此,我们需要一套流程来帮助自己在整个机器学习生命周期中保持质量、可持续性、稳健性和成本管理。图1. 机器学习开发生命周期流程使用质量保证方法开发机器学习应用程序的跨行业标准流程(CRISP-ML(Q))是CRISP-DM的升级版,以确保机器学习产品的质量。CRISP-ML(Q)有六个单独的阶段:1. 业务和数据理解2. 数据准备3. 模型

thinkphp是国产框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。

什么是 celery这次我们来介绍一下 Python 的一个第三方模块 celery,那么 celery 是什么呢? celery 是一个灵活且可靠的,处理大量消息的分布式系统,可以在多个节点之间处理某个任务; celery 是一个专注于实时处理的任务队列,支持任务调度; celery 是开源的,有很多的使用者; celery 完全基于 Python 语言编写;所以 celery 本质上就是一个任务调度框架,类似于 Apache 的 airflow,当然 airflow 也是基于 Python

AI就像一个黑匣子,能自己做出决定,但是人们并不清楚其中缘由。建立一个AI模型,输入数据,然后再输出结果,但有一个问题就是我们不能解释AI为何会得出这样的结论。需要了解AI如何得出某个结论背后的原因,而不是仅仅接受一个在没有上下文或解释的情况下输出的结果。可解释性旨在帮助人们理解:如何学习的?学到了什么?针对一个特定输入为什么会做出如此决策?决策是否可靠?在本文中,我将介绍6个用于可解释性的Python框架。SHAPSHapleyAdditiveexplanation(SHapleyAdditi

AOP(面向切面编程)是一种编程思想,用于解耦业务逻辑和横切关注点(如日志、权限等)。在PHP中,使用AOP框架可以简化编码,提高代码可维护性和可扩展性。本文将介绍在PHP中使用AOP框架的基本原理和实现方法。一、AOP的概念和原理面向切面编程,指的是将程序的业务逻辑和横切关注点分离开来,通过AOP框架来实现统一管理。横切关注点指的是在程序中需要重复出现并且

已安装Microsoft.NET版本4.5.2、4.6或4.6.1的MicrosoftWindows用户如果希望Microsoft将来通过产品更新支持该框架,则必须安装较新版本的Microsoft框架。据微软称,这三个框架都将在2022年4月26日停止支持。支持日期结束后,产品将不会收到“安全修复或技术支持”。大多数家庭设备通过Windows更新保持最新。这些设备已经安装了较新版本的框架,例如.NETFramework4.8。未自动更新的设备可能

如果你在Windows11上安装了2022年5月累积更新,你可能已经注意到你一直使用的许多应用程序都不像以前那样工作了。强制性安全更新KB5013943正在使某些使用.NET框架的应用程序崩溃。在某些情况下,用户会收到错误代码:0xc0000135。可选更新中报告了类似的问题,但并不普遍。随着2022年5月的更新,该错误似乎已进入生产渠道,这次有更多用户受到影响。崩溃在使用.NETFramework的应用程序中很常见,Discord或MicrosoftTeams等

据悉GPT-4将于本周发布,多模态将成为其一大亮点。当前的大语言模型正在成为理解各种模态的通用接口,能够根据不同模态信息来给出回复文本,但大语言模型生成的内容也仅仅局限于文本。另一方面,当前的扩散模型DALL・E2、Imagen、StableDiffusion等在视觉创作上掀起一场革命,但这些模型仅仅支持文到图的单一跨模态功能,离通用式生成模型还有一定距离。而多模态大模型将能够打通各种模态能力,实现任意模态之间转化,被认为是通用式生成模型的未来发展方向。清华大学计算机系朱军教授带领的TSAI


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

記事本++7.3.1
好用且免費的程式碼編輯器