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']."";

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

PHP和Python都是高層次的編程語言,廣泛應用於Web開發、數據處理和自動化任務。 1.PHP常用於構建動態網站和內容管理系統,而Python常用於構建Web框架和數據科學。 2.PHP使用echo輸出內容,Python使用print。 3.兩者都支持面向對象編程,但語法和關鍵字不同。 4.PHP支持弱類型轉換,Python則更嚴格。 5.PHP性能優化包括使用OPcache和異步編程,Python則使用cProfile和異步編程。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1
強大的PHP整合開發環境

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

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具