zoukankan      html  css  js  c++  java
  • ci中MVC

    一、ci中MVC

     

    二、的访问模式为pathinfo模式,如http://localhost/index.php/控制器/方法

     

    application目录

    controllers 控制器

    models模型

    views 视图

     

    默认控制器welcome.php,默认方法是index方法,默认加载模版welcome_message.php

     

    控制器:

    1、文件名全部小写

    2、所有控制器需要直接或间接继承CI_Controller

    3、方法名称不能以下划线开头

    4、私有、受保护的方法(动作),浏览器不能直接访问,要求访问的方法必须是public

    5、方法名称不区分大小写

    6、index不能作为控制器名称,index是受保护字段

    7、与类名相同的,会被php当做构造方法

    8、不允许直接访问控制器方法

    if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    加载视图: //视图默认是php文件,如果想用html,可以用视图.html

    $this->load->view('welcome_message');//控制器_视图

    $this->load->view('welcome/message');//控制器/视图

     

    一、单独分配一个变量:

    $this->load->vars('title','这是标题');

     

    视图使用变量: echo $title;

     

    二、分配数组

     

    $this->load->vars($_POST);

     

     

    视图里最好用html里加php代码,不要用Php标签中加html

     

    四、在控制器方法中加载头和尾部(vars加载视图可以多次加载)

     

    $this->load->view(header);//头

    $this->load->view(index);//内容

    $this->load->view(fooder);//尾部

     

    五、推荐使用这种形式写循环

    <?php foreache($list as $key):?>

    <?=$key['id']?> // 可以试试,php短标签写法,和<?php echo $a['id']?>一样

    <?php andforeache;?>

     

     

    CI的超级对象

          当前的控制器对象

          属性:

    $this->load(装载器类的实例,类的加载,加载视图、文件)

          方法:

          view() : $this->load->view(index);加载视图

          vars() : $this->load->vars($_POST);分配数据

          database(): 数据库加载对象

          model(): 装载模型

          helper(): 加载帮助文件

     

    $this->uri($this->uri ,不确定自己试试)(是ci_url的实例,文件在system/core/URL.php)

          $_GET方法:

          segment():   获取Url某一段的参数的值

          $this->url->segment(1);获取第一段参数的值

         

          入口文件.php/控制器/方法(动作)/参数1/参数2

          public function index($id-0,$name...){ //$id-0传值的时候按照传值,不传值默认0

               echo $id.$name...;

          }

    也可以在动作后面直接写参数,依次写变量接收

    $this->input是ci_input的实例,文件在system/core/input.php

          $this->input->post('username'); //取代$_POST

          $this->input->server('DOCUMENT_ROOT'); //取代$_SERVER

          在视图里面也可以通过$this访问超级对象

          例如: <?php echo $this->input->server('DOCUMENT_ROOT'); ?>

     

    使用数据库访问//手册->数据库类->查询、生成结果

     

          application/config/database.php  //配置数据库账户、密码、数据库、表前缀

          $db['default']['dbprefix'] = '';//用户定义表前缀

          $db['default']['swap_pre'] = '';//系统默认替换用户定义表前缀,最好初试设置和用户自定义一样,写sql语句必须用这个表前缀

          $this->load->database(); //可以在application/config/autload.php里设置$autoload['libraries'] = array('database');自动加载

     

          //查询数据

          public function index()

          {

               $this->load->database();//加载数据库操作类,装载成功后会放在超级对象的属性中,默认属性名称为db

               //var_dump($this->db);

               $res = $this->db->query($sql); //返回对象

               $res->result(); //返回数组,数组里是一个一个对象,通过箭头调用

               $res->result_array(); //返回二维数组,里面是关联数组

               $res->row();//返回第一条数据,是对象

               $this->load->view('index',$_POST);//可以用第二个参数传值

          }

          //添加数据,其它的update,delete,也是这样的

     

          public function add()

          {

               $this->load->database();

     

               $res = $this->db->query($sql);//返回真或者假

     

               if($res){

               echo    $this->db->affected_rows();//返回受影响行数

               echo    $this->db->insert_id();//返回自增id的值

     

               }

     

          }

    复杂的sql用这个

          参数绑定//参数只能是索引数组

     

          $sql = "select*from bg_user where name=?";

          $this->db->query($sql,$name);//如果有多个问号,需要传入索引数组

     

     

    AR模型(简单的sql用这个)

     

          (基础sql语句,Active Record 类)获得都是对象,遍历后用->调用

                     application/config/datebase.php中的$active_record = TRUE;必须为true才可以使用,默认是true

     

          如:

               $query = $this->db->get('mytable');

     

    连贯操作:(查询user表里id,name字段,id大于3的,跳过2条,显示3条,按照id降序)

               $res=$this->db->select('id,name')

                                ->from('user')

                                ->where('id >=',3)//id后边必须有空格

                                ->limit(3,2) //这个顺序和sql语句是反的一定注意

                                ->ordey_by('id desc')

                                ->get();

                          var_dump($res->result());

     

                     echo $this->db->last_query();//显示最后一条执行的sql语句

     

    where方法:

                     $this->where('id',1)->get();

                     $this->where('id =',1)->get();//这2种方法都行,id后边一定要有空格

                     $this->where('id !=',1)->get();//不等于1的,注意id后边的空格

                     $this->where(array('id'=>1)->get();

                     $this->where(array('id >'=>1,'username'=>'zhangsan')->get();//数组中可以传多个值,可以写不等、大于、小于等等条件,注意后边的空格

                    

                    

     

                     echo $this->db->last_query();//显示最后一条执行的sql语句

     

    如何扩展控制器

          application/core/里新建扩展控制器;让别的控制器继承这个

        可以在application/core/config.php里修改自定因控制器前缀$config['subclass_prefix'] = 'MY_';默认必须以MY_开头

          <?php

          class MY_Controller extends CI_Controller{

          public function __construct(){

          parent::__construct();//第一行必须调用父类的构造方法

     

          //echo 'aaaa';

          //权限验证

          //登录验证

          }

          }

     

    模型 application/models/

        1、文件名称必须全部小写,类名首字母必须大写

        2、起名的时候最好用user_model这样,名称后边加_model,因如和控制器名称相同会报错,避免这种情况发生

        3、都要继承 CI_Model

        4、在模型中可以直接使用超级对象的属性

        在model里

        <?php

          class user_model extends CI_Model{

     

               //返回所有用户

               public function getAll(){

               $res = $this->db->get('user');

               return $res->result();

     

               }

          }

     

          在控制器里

          class Welcome extends CI_Controller {

     

          public function index()

          {

               //加载模型

               $this->load->model('user_model','user');//第二个参数为别名,可以不要

               //使用方法,获取数据

               $list = $this->user_model->getAll();//如果用别名的话,这里这么调用$list = $this->user->getAll();

     

               //加载视图

               $this->load->view('home/index',array('list'=>$list))

          }

    }

          在视图里面循环输出

     

    url相关函数 //手册-url辅助函数

          如果使用必须在application/confing/autoload.php里面配置$autoload['helper'] = array('url');

          或者在对应控制器里添加

          $this->load->helper('url'); 或者

          在视图里

          <?php echo site_url('控制器/方法');?>

     

          可以在视图里写网址下的地址如

          <?php echo base_url();?>public/css.css

     

    路由设置

          在application/confing/routes.php里设置$route['default_controller'] = "welcome";

          另外设置$route['正册.html'] = '空置期/方法/参数';//设置这个为Url伪静态

          如果apache可以支持.htaccess,把.htaccess放在入口文件处,隐藏入口文件

          (开启apache的rewrite功能,LoadModule rewrite_module modules/mod_rewrite.so)

     

          下一课程15

     

  • 相关阅读:
    CLR c++/CLI 如何返回多个返回值
    在php 中显示array数据
    MVC已死,该是用MOVE的时候了
    拿到网规证书后,办北京户口的遭遇。
    利亚德股票限售股解禁表
    32位MSSQL数据库备份如何在64位MSSQL数据库上恢复
    利用DNS实现负载均衡
    购买服务器具体和什么参数有关
    简单来总结一下C++与C#之间的区别
    c# 操作DOS ping命令判断与指定主机是否可以通信
  • 原文地址:https://www.cnblogs.com/520fyl/p/5396407.html
Copyright © 2011-2022 走看看