• CodeIgniter框架——访问方式 URI 分配变量 数据库操作


    1、访问方式:

    CodeIgniter 的访问URL使用的是pathinfo,入口文件/控制器/方法(/参数列表)

    eg:localhost/index.php/welcome/index/id

    第一段表示调用控制器类。
    第二段表示调用类中的函数或方法。
    第三及更多的段表示的是传递给控制器的参数,如 ID 或其它各种变量。 

    2、URI参数获取:

    控制器端代码

    1 public function getUri($id,$name,$year)
    2         {
    3             echo "id--->".$id."---name--->".$name."---year--->".$year."<br />"; //依次得到uri参数
    4             echo "segment(1)--->".$this->uri->segment(1)."<br />";
    5             echo "segment(2)--->".$this->uri->segment(2)."<br />";
    6             echo "segment(3)--->".$this->uri->segment(3)."<br />";
    7             echo "segment(4)--->".$this->uri->segment(4)."<br />";
    8             echo "segment(5)--->".$this->uri->segment(5)."<br />";
    9         }

    运行效果

    3、分配变量

    (1)把数据从控制器传到视图中

    控制器端代码

     1 public function addView()
     2         {
     3             $this->load->vars("title","value");
     4             $list = array(
     5             array('id'=>1,'name'=>'mw','email'=>'123@123.com'),
     6             array('id'=>2,'name'=>'mw2','email'=>'1233@123.com'),
     7             array('id'=>3,'name'=>'mw3','email'=>'12333@123.com')
     8             );
     9             $data['new_title']="test_title";
    10             $data['list']=$list;
    11             $this->load->vars($data);
    12             
    13             $this->load->view("view_test");
    14         }
    $this->load->vars('$array');
    说明:这个函数以一个关联数组作为输入参数,将这个数组用PHP的extract函数,转化成与这个数组对应的变量 。你之所以要单独用这个函数也许是因为,你想在控制器的构造函数中设置一些全局变量,以使这些变量在任意函数调用的视图(view)里能够用上。你能多次调用这个函数。数组数据被缓存并被并入一个数组,用来转化成变量。

    视图端代码

     1 <html>
     2     <head>
     3     </head>
     4     <body>
     5         <h1><?php echo $title;?></h1>
     6     title is <?php echo $title;?>
     7      
     8         <h1><?php echo $new_title;?></h1>
     9     new_title is <?php echo $new_title;?>
    10     
    11         <h1>test_ci:the data from controller to view</h1>
    12         <table>
    13             <?php foreach($list as $item):?>
    14             <tr>
    15                 <td><?=$item['id']?></td>    
    16                 <td><?=$item['name']?></td>
    17                 <td><?=$item['email']?></td>                
    18             </tr>
    19             <?php endforeach;?>
    20         </table>
    21     </body>
    22 </html>

    运行效果


     (2)数据分配流程范例:

    控制器端helloworld.php代码

     1 <?php
     2 class HelloWorld extends CI_Controller{
     3     function index($name){  //获取url中的参数$name
     4         echo $name,", Hello world ~ in controller and the name is parameter";
     5         echo '</br>';
     6         $this->load->model('helloworld_model');  //载入模型
     7         $data=array();
     8         $data['helloworld_view'] = $this->helloworld_model->get_helloworld_view();  //利用模型中的方法返回其中的数据
     9         $this->load->view('helloworld_view',$data);  //载入视图,并传入参数$data
    10     }
    11 }
    在控制器有设置名为$data的数组,并把一些对象的属性及文本读入数组;然后通过名称装载视图,并把$data作为第二个参数。
    注:在幕后,CI很好地利用了另外一个PHP函数:extract(),这个函数的作用是把数组中的元素取出放入变量表,其中每个键值对中的键名即为变量名,对应该键名的值为变量的值。因此我们刚才定义的$data数组在视图中转换成一个单一的变量

     虽然你只传送一个变量到视图中,但是,你能把许多数据装进那个变量中。$data数组的每个值还可以是数组,这被称为多维数组,因此,用一个数组变量可以把大量的变量传递给视图,这是一个很好的编程技巧。

    模型端helloworld_model.php代码

    1 <?php
    2 class Helloworld_model extends CI_Model{
    3     public function get_helloworld_view()
    4     {
    5         $helloworld_view = "Model for Helloworld!";
    6         return $helloworld_view;  //返回数据$helloworld_view
    7     }
    8 }

    视图端helloworld_view.php代码

     1 <html>
     2 <head>
     3 <title> Helloworld </title>
     4 <meta name="Author" content="">
     5 <meta name="Keywords" content="">
     6 <meta name="Description" content="">
     7 </head>
     8 <body>
     9     View for Helloworld ~ in the view    //视图本身显示信息     
    10     <h1>
    11     <?php echo $helloworld_view;?>  //显示从模型中得到的数据
    12     </h1>
    13     the workflow is : controller get the data from model, and send view display.
    14 </body>
    15 </html>

    访问url:http://localhost/index.php/helloworld/index/name

    运行效果

    4、加载数据库:

    此类操作放在MVC中的Model中,必须继承数据核心类CI_Model,同时重载父类的构造方法。

    1 class Model_name extends CI_Model
    2 {
    3     function __construct()
    4     {
    5         parent::__construct();
    6     }
    7 }

    在每次使用数据库的时候,都需要加载一次数据库:

    1 $this->load->database();

    为了方便,可以将数据库的加载设置成自动加载,在applicationconfigautoload.php中。

    1 $autoload['libraries'] = array('database');

    对于数据库访问对象,装载到超级对象的属性中 $this->db

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

    AR操作数据库,在database.php文件中,将$active_recoed的值改为TRUE,这样就可以使用AR了。

    1 //查询
    2 public function index()
    3 {
    4     $res = $this->db->get('表名');//这里自动调用前缀
    5     foreach($res->result() as $item)
    6     {
    7         echo $item->name."<br />";
    8     }
    9 }
     1 //插入
     2 public function index()
     3 {
     4     $data=array(
     5         'name'=>'lisi',
     6         'password'=>md5('lisi')
     7     );
     8     $bool = $this->db->insert("表名",$data);
     9     var_dump($bool);
    10 }
     1 //更新
     2 public function index()
     3 {
     4     $data=array(
     5         'name'=>'wangwu',
     6         'password'=>md5('wangwu')
     7     );
     8 
     9     $bool = $this->db->update('表名',$data,array('id'=>3));
    10     var_dump($bool);
    11 }
    1 //删除
    2 $bool = $this->db->delete('表名',array('id'=>2));
    3 var_dump($bool);

     总结为:

    (1)连接数据库:$this->load->database();
       注:将其写在模型的构造函数里,这样就在加载模型的同时连接了数据库
    (2)插入数据: $this->database->insert($t_name,$data);
                  $t_name:需操作的表
                  $data:需插入的数据(键名=字段名,键值=字段值,自增主键可不写)
    (3)更新数据: $this->db->where(字段名,字段值);
                  $this->db->update(表名,修改值的数组);
    (4)查询数据: $this->db->where(字段名,字段值);
                  $this->db->select(字段);
                  $query=$this->db->get(表名);
                  return $query->result();
    (5)删除数据: $this->db->where(字段名,字段值);
                  $this->db->delete(表名);
  • 相关阅读:
    32 最小子串覆盖
    31 数组划分
    29 交叉字符串
    动态规划
    18 带重复元素的子集
    17 子集
    16 带重复元素的排列
    23.二叉树的后续遍历序列
    J.U.C-其他组件
    21.Longest Palindromic Substring(最长回文子串)
  • 原文地址:https://www.cnblogs.com/xymqx/p/3928075.html
Copyright © 2020-2023  润新知