CodeIgniter
Allen 2021-08-07 15:22:50 5166 8 0 0 0

兄弟连PHP视频CI框架(CodeIgniter)-笔记

...

兄弟连PHP视频CI框架(CodeIgniter)-01-CI简介与MVC设计模式


--CI框架

讲师:邹义良

微博:weibo.com/it266

...

--主要内容

CI简介

深入MVC设计模式

CI中控制器与视图

CI的超级对象

数据库访问

AR模型

...

--CI是什么?

1,codeIgniter是一个轻量级但功能强大的PHP框架

2,基于MVC设计模式,提供了一套丰言的类库

3,简单易学,高效实用

--官方网站32

codeigniter.com

--中文网站

codeigniter.org.cn

--下载当前最新版本

codeigniter_2.1.4.zip,2.19m

+++

...

--有什么特点?

你想要--个小巧的框架

你需要出色的性能

你需要广泛兼容标准主机上的各种PHP 版本和配置,CI 2.1.4 需要PHP5.1.6

你想要一个几乎只需0配置的框架

你想要一个不需使用命令行的框架

你想要一个不需坚守限制性编码规则的框架

你不希望被迫学习一门模板语言( 虽然可以选择你喜欢的模板解析器)

你不喜欢复杂,热爱简单

你需要清晰、完整的文档

...

--目录结构说明

license.txt许可协议

user_guide 用户手册

system 框架核心文件

application 应用目录

index.php 入口文件

...

+++

MVC简单示范

...省略...

以下几点:

1,入口文件:唯一能让浏览器直接请求的脚本文件

2,控制器controller:协调模型和视图

3,模型model:提供数据,保存数据,有效性验证

4,视图view:只负责显示,搜索输入,比如表单。。。

(CI中甚至可以不用模型,只用CV,也可以做出项目来,这样很难维护,而且重用性差)

5,动作action:是控制器中的方法(公开的),用于被浏览器请求


=============


Tag: CI笔记
评论
Allen#1Allen 2021-08-08 00:23:01(N) 链接地址

兄弟连PHP视频CI框架(CodeIgniter)-02-

...

CI中的MVC

访问URL使用的方式是【pathinfo】(好像文件夹一样)

访问方法:【入口文件.php】/【控制器】/【动作(方法)】

如:http://aub.pub/CI/index.php/welcome/test

application目录中

--controller 控制器

--models  模型

--view  视图

...

默认控制器welcome

默认动作是index

+++

控制器

1,不需要加后缀(如cotroller),直接:类名.php

2,文件名建议小写(指的是控制器文件名如:user.php,类名可以大写如User)

3,所有的控制器,直接或间接继承自类CI_Controller

4,只有public的方法,才能做为动作(被浏览器请求)。

控制器中对动作方法要求:

--定义必须是public,protected不能被请求

--方法名不能以下划线开头(不能被请求,但可以被调用)

--方法名不区分大小写

--与类名相同的方法,会被php当作是构造方法,会被默认执行。相当于__construct()。不要这样做!

class User extends CI_Controller
  public function index() {  
   echo 'user----index';
  }
  public function test1() {  
   echo 'test1';
  }
  // 以下划线开头的方法,不能被请求,但可以被调用
  public function _test() {  
   echo 'test2';
  }
  public function test2() {  
   $this->_test();
  }
}

class Index extends CI_Controller
  //与类名相同的,会被php当作构造方法,会被自动执行
  // 相当于_construct(){}
  public function index() { 
    echo 'index 控制器的index方法
';   }    public function index2() {      echo 'index 控制器的index2方法
';   } 

20210808 2135

PS:

与类名相同的方法,会被php当作是构造方法,在CI3以后的版本中会报错:

A PHP Error was encountered
Severity: 8192
Message: Methods with the same name as their class will not be constructors in a future version of PHP; Index has a deprecated constructor
Filename: controllers/Index.php
Line Number: 3
Backtrace:
File: /www/wwwroot/aub.pub/00ci/index.php
Line: 315
Function: require_once

PHP错误,8192
消息:在PHP的未来版本中,与类同名的方法将不会是构造函数;索引有一个不推荐使用的构造函数

--20220117

Allen#2Allen 2021-08-08 22:14:19(N) 链接地址

兄弟连PHP视频CI框架(CodeIgniter)-03

...

--->视图

1,在控制器中如何加载视图

调用方法:$this->load->view(视图) 

可以多次调用$this->load->view(视图);

//直接写视图名字,不用写扩展名,如果有子目录,则写上目录名,如:

        load->view('welcome_message');
	//echo 'user---->index';		
	//$this->load->view('user_index');  //加载/views/use_index.php视图
        //$this->load->view('user/index');  //加载/views/use/index.php视图
        
        //还可以分别加载header和主体
        $this->load->view('header');
        $this->load->view('user/index');
		
	//分配变量
	//$this->assign('key','value');  // smarty中分配变量 
		
	// 分配单独的变量
	//$this->load->vars('title','这是标题');
		
	$list=array(
            array('id'=>1,'name'=>'V-jack','email'=>'[email protected]'),
            array('id'=>2,'name'=>'V-tom','email'=>'[email protected]'),
            array('id'=>3,'name'=>'V-john','email'=>'[email protected]'),
            );
        $data['title']='这是标题';
        $data['list']=$list;
        $this->load->var($data);

        //$this->load->view('user_index');
        $this->load->view('user/index');		
	}

2,视图中可以直接写使用原生php

3,推荐使用以下方法

    <h2><?=$title."[user_index.php]"?></h2>
    
<?
    //不推荐的写法
    echo "<h2>不推荐的写法</h2>";
    echo "<table border='1'>";
    echo "<tr><th>1编号</th><th>姓名</th><th>邮箱</th></tr>";
    foreach ($list as $key=>$value) {
        echo "<tr>";
        echo "<td>{$value['id']}</td>";
        echo "<td>{$value['name']}</td>";
        echo "<td>{$value['email']}</td>";
        echo "</tr>";
    }
    echo "</table>";
?>

    <h2><?="推荐的写法"?></h2>
    <table border='1'>
        <tr>
            <th>2编号</th>
            <th>姓名</th>
            <th>邮箱</th>
        </tr>
        <? foreach($list as $item): ?>
        <tr>
            <td><?=$item['id'] ?></td>
            <td><?=$item['name'] ?></td>
            <td><?=$item['email'] ?></td>
        </tr>
        <? endforeach; ?>
    </table>
Allen#3Allen 2021-08-09 00:24:03(N) 链接地址

兄弟连PHP视频CI框架(CodeIgniter)-04-超级对象

...

----->超级对象,就是控制器对象

当前的控制器对象,提供了很多属性:

var_dump($this);

var_dump($this->load);

...

$this->load属性,装载器,提供了很多属性,可以用来加载各种类,如视图,变量,文件等。

装载器类的实例:system/core/loader.php

装载器类提供很多方法,如:

view() 装载视图

vars() 分配变量到视图

database() 装载数据库操作对象

model() 装载模型对象

helper() 

public function index()
	{
		// 打印控制器对象,超级对象(CI主要依赖这个对象)
		var_dump($this);
		//load对象,CI提供的装载器
		var_dump($this->load)
		
		/*
		//CI会自动实例化一个CI_Loader的对象,放在超级对象的属性中
		//下面的代码只是帮助大家理解$this->load属性
		$obj=new CI_loader();  ///system/core/Loader.php
		$this->load=$obj;
		$this->load->view();  //用的是核心中这个方法public function view($view, $vars = array(), $return = FALSE)
		*/
Allen#4Allen 2022-01-17 14:47:37(N) 链接地址

兄弟连PHP视频CI框架(CodeIgniter)-04- CI超级对象中的uri

		//$this->p($this->uri);  //是CI_URI类的实例,在核心中的system/core/uri.php

		// https://aub.pub/00ci/index.php/welcome/index/id/7
		echo $this->uri->segment(0)."<br>";  // 空
		echo $this->uri->segment(1)."<br>";  // welcome
		echo $this->uri->segment(2)."<br>";  // index
		echo $this->uri->segment(3)."<br>";  // id
		echo $this->uri->segment(4)."<br>";  // 7

//需要添加p方法
public function p($data=null) {
    if (empty($data)) {
        return false;
    }
    echo '<pre>';
    print_r($data);
    echo '</pre>';
}

CI里传参数方式:

CI里传参数方式:
index.php/welcome/index/id/5/name/jack 
(=?id=5&name=jack)
CI中如何取这些参数?分段获取。
$this->uri->segment(4); // 可以获取到5
index.php/welcome/index/7
$this->uri->segment(3);  // 可以获取到7


也可以直接引用

	public function index($aa=0,$name='')
	{
		echo $aa."<br>";
		echo $name."<br>";		
	}

welcome/index/7/jack
-》7,jakck,

总结:

CI中分段获取参数
segment(n)用于获取url中的第n个参数(值)
传统的URL写法:入口文件.php/控制器/动作/参数1/值1/参数2/值2
CI中的URL写法:入口文件.php/控制器/动作/值1/值2
echo $this->segment(3);  //值1
echo $this->segment(4);  //值2

index.php/控制器/index/7/jack
public function index($p=0,$name="") {
    echo $p;  // 输出7
    echo $name;  // 输出jack
}

Allen#5Allen 2022-01-17 17:07:45(N) 链接地址

兄弟连CI框架视频教程-06,CI超级对象中的input输入类

$this->input,输入类

是CI_Input类的实例,system/core/Input.php

CI_Input类提供方法:

$this->input->post('username');   // $_post['username']
$this->input->server('DOCUMENT_ROOT');   // $_SERVER['DOCUMENT_ROOT']
$this->input->server('REMOTE_ADDR');   // $_SERVER['REMOTE_ADDR']
通过前一种方式访问,Ci已经帮我们做了一些安全处理

$this->p($this->input);

//$this->p($_SERVER);

...

暂时先介绍这三个超级对象:load,uri,input

+++

在视图中使用超级对象

在视图中,直接用$this来访问超级对象中的数据属性,原理就是CI就是把视图include进来了。

<? echo $this->input->server('REMOTE_ADDR'); ?>
Allen#6Allen 2022-01-17 18:09:45(N) 链接地址

07,在CI中的数据库操作(1)

https://www.php.cn/code/6299.html

1,修改配置:applicationconfigdatabase.php
2,操作数据库 将数据库访问对象,装载到超级对象的属性中
$this->db //装载数据库操作类 
$this->load->database(); 
$this->load->database($db);  //也可以加参数,默认为default 

$res=$this->db->query($sql);  //返回对象  // mysql_query(); 
$users=$res->result();   //返回数组,数组里面是一个一个的对象 
$users=$res->result_array();   //返回二维数组,数组中是一个一个的关联数组 
$users=$res->row();   //返回第一条数据,直接是一个对象

用对象传递数据

    public function showusers(){
        //装载数据库操作类
        $this->load->database();
        //装载成功后,会放入超级对象的属性中,默认属性名是db
        //var_dump($this->db);  //$this->p($this->db);   //
        
        $sql='select * from ty_user';
        $res=$this->db->query($sql);  //返回对象  // mysql_query();
        //var_dump($result);  //$this->p($res); //返回值是一个类的对象 
        
// 用对象传递数据
        $users=$res->result();   //返回数组,数组下面是一个一个的对象
        //mysql_fetch_assoc();  //关联数组
        //mysql_fetch_object();  //返回对象
        $data['user_list']=$users;
        $this->load->view('user/showusers',$data);
        
        // foreach ($users as $row) {
        //     echo $row->user_id." | ";
        //     echo $row->user_name." | ";
        //     echo $row->user_email." | ";
        //     echo "<br>";
        // }
    }

//视图showusers中调用
    <table border='1'>
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>邮箱</th>
        </tr>
        <? foreach($user_list as $row): ?>
        <tr>
            <td><?=$row->user_id; ?></td>
            <td><?=$row->user_name; ?></td>
            <td><?=$row->user_email; ?></td>
        </tr>
        <? endforeach; ?>
    </table>    

用二维数组传递数据 

    public function showusers(){
        //装载数据库操作类
        $this->load->database();
        //装载成功后,会放入超级对象的属性中,默认属性名是db
        //var_dump($this->db);  //$this->p($this->db);   //
        
        $sql='select * from ty_user';
        $res=$this->db->query($sql);  //返回对象  // mysql_query();
        //var_dump($result);  //$this->p($res); //返回值是一个类的对象 

// 用二维数组传递数据        
        $users=$res->result_array();   //返回二维数组,数组中是一个一个的关联数组
        //mysql_fetch_assoc();  //关联数组
        //mysql_fetch_object();  //返回对象
        $data['user_list']=$users;
        $this->load->view('user/showusers',$data);      
        
    }

//视图showusers中调用
    <table border='1'>
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>邮箱</th>
        </tr>
        <? foreach($user_list as $item): ?>
        <tr>
            <td><?=$item['user_id'] ?></td>
            <td><?=$item['user_name'] ?></td>
            <td><?=$item['user_email'] ?></td>
        </tr>
        <? endforeach; ?>
    </table>
Allen#7Allen 2022-01-17 15:52:11(N) 链接地址

08,在CI中的数据库操作(2)

https://www.php.cn/code/6302.html

参数绑定
$sql="select * from ty_user where name=?";
$this->db->query($sql,$name);
//如果有多个问号时,需要传入一个索引数组
$data[0]='lili';  //$name='lili';
$data[1]='123';
$sql="insert into ty_user (name,password) value (?,md5(?))";
$bool=$this->db->query($sql,$data);

表前缀
'dbprefix' => 'ty_',
'swap_pre' => 'swap_',
只需要把这两个配置成一样即可。
说明:代码中全部写成【swap_pre】即可,CI会自动把前缀换成【dbprefix】

db的自动加载
//配置自动加载db
application/config/autoload.php
$autoload['libraries']=array('database');
//$this->load->database();  //配置自动加载后,就不需要这一行了

受影响行数
$this->db->affected_rows();
自增id
$this->db-insert_id();

测试代码

    public function add() {
        $this->load->database();
        $sql="insert into ty_user (user_id,user_name,user_pwd,user_email) values (200,'mary',md5('mary'),'[email protected]')";
        $bool=$this->db->query($sql);
        if ($bool){
            //mysql_affected_rows
            //
            echo '受影响行数'.$this->db->affected_rows();
            echo '自增id:'.$this->db-insert_id();
        }
    }
    
    public function update() {
        //配置自动加载db
        // application/config/autoload.php
        // $autoload['libraries']=array('database');
        // $this->load->database();  //配置自动加载后,就不需要这一行了
        
        //参数绑定
        //$name=$this-input->post('name');
        $data[0]='lili';  //$name='lili';
        $data[1]='123';
        $sql="insert into ty_user (name,password) value (?,md5(?))";
        
        $bool=$this->db->query($sql,$data);
        if ($bool){
            //mysql_affected_rows
            echo '受影响行数'.$this->db->affected_rows();
            echo '自增id:'.$this->db-insert_id();
        }
    }
Allen#8Allen 2022-01-18 16:13:56(N) 链接地址

1-9CI中的AR(数据库增、删、改、查)

https://www.php.cn/code/6306.html

1,确保配置文件【application/config/database.php】中,
$active_record=TRUE
2,application/config/autoload.php
$autoload['libraries']=array('database');
3,在配置文件中,正确配置表前缀后,会自动添加。
三个方法:get,insert,update,delete
$res=$this->db->get('表名'); //表名不用加前缀,返回结果集对象
$res->result()

$bool=$this->db->insert('表名',关联数组);

$bool=$this->db->upate('表名',关联数组,条件);

$bool=$this->db->delete('表名',条件);

测试代码

测试代码
$this->db->get('表名'); //表名不用加前缀,返回结果集对象
// Get
$res=$this->db->get('user');
//var_dump($res);
foreach ($res->result() as $item) {
	echo $item->name;
	echo '<br>';
}

// insert
$data=array{
	'name'=>'mary',
	'password'=>md5('mary'),
}
$bool=$this->db->insert('user',$data);
var_dump($bool);

//update
$data=array(
	'emain'=>'[email protected]',
	'password'=>md5('12345'),
);
$bool=$this->db->upate('user',$data,array('id'=>3));
var_dump($bool);

//delete
$bool=$this->db->delete('user',array('id'=>2));
var_dump($bool);

顶部     1/1 
欢迎评论
未登录,
请先 [ 注册 ] or [ 登录 ]
(一分钟即可完成注册!)
返回首页     ·   返回[CodeIgniter]   ·   返回顶部