初学CI框架遇到的一些问题,与Thinkphp框架对比的不同之处。

system 是框架核心

 

application 是项目目录

 

index.php 是项目入口文件

 

其他目录可以删除

 

 

 

控制器命名规则

 

 

 

控制器不加 Controller 后缀,

 

如 user.php 这就是一个控制器

 

 

 

 

 

 

 

修改默认控制器和方法

 

 

 

默认控制器是welcome.php,不喜欢可以改掉。

 

修改方法如下:

 

在 config/routes.php 中

 

$route['default_controller'] = 'welcome';

 

改为

 

$route['default_controller'] = 'index/home';

 

 

 

为什么不该成“index/index”呢???

 

因为CI中的控制器命名中没有后缀,所以index类的index方法会默认为析构方法__construct();

 

所以不可以这样搞,如果改成"index/index"则index方法会被调用两次。

 

 

 

加载视图文件

 

 

 

$this->load->view('index/home');

 

这个视图文件放在/application/view/index/home.php

 

看到这个文件的后缀了吗?它是一个php文件,不是html文件

 

 

 

在CI中 view() 方法可以使用多次,也就是可以加载多个模板

 

可以这样写:

 

 

 

1.在 /application/view/index目录下有这样几个模板文件

 

    header.php

 

    main.php

 

    footer.php

 

 

 

2.在index控制器的home方法中

 

1

2

3

4

5

6

public function home(){

    //按顺序加载模板文件

    $this->load->view('index/header');

    $this->load->view('index/main');

    $this->load->view('index/footer');

}

 

 

给模板分配变量

 

 

 

CI框架中的模板是直接写php代码的,如分配一个hello的变量:

 

$this->load->vars('hello','heheheh');

 

在模板中直接写 <?php echo $hello;?>变量将变量输出。

 

还可以这样:

 

$data['hello'] = 'hello xxoo---';

 

直接写入关联数组

 

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

 

在模板中关联数组健名就是模板里的变量名

 

 <?php echo $hello; ?>

 

 

 

CI超级对象($this)中的装载器load

 

 

 

文件在system/core/loader.php,被实例化成一个属性

 

$this->load 属性是经常用到的,这里有几个常用的方法

 

    $this->load->view()

 

    $this->load->vars()

 

    $this->load->database()

 

    $this->load->model()

 

还可以这样写

 

1

2

3

4

$data['one'] = 'one';

$data['two'] = array(1,2,3,4,5);

//加载模板并分配变量

$this->load->view('user/user',$data);

 

 

获取url中的参数$this->uri

 

文件在system/core/URI.php

 

如:url为 localhost/CodeIgniter/index.php/index/home

 

echo $this->uri->segment(1);

 

输出为:index

 

还可以这样

 

url为:​​http://localhost/CodeIgniter/index.php/index/home/1​

 

public function home($id){

 

echo $id;

 

}

 

输出 1

 

多个参数同样,只不过顺序有限制

 

 

 

输入对象 $this->input

 

类文件目录同上

 

    $this->input->post('username');//同$_POST['username'];

 

    $this->input->server('HTTP_REFERER');//同$_SERVER[HTTP_REFERER'']

 

 

 

    

 

$this在视图中也可以使用

 

 

 

 

 

 

 

关于数据库的操作

 

 

 

pdo设置

 

在application/config/database.php 中找到并填写成如下:

 

$db['default'] = array(

 

    'dsn'=> 'mysql:host=localhost;dbname=test;port=3306',

 

    'hostname' => '',

 

    'username' => 'root',

 

    'password' => '123456',

 

    'database' => '',

 

    'dbdriver' => 'pdo',

 

);

 

// 设置默认加载的数据库的配置

 

$active_group = 'default';

 

$query_builder = TRUE;

 

 

 

// 这个数组可以有多个,不同数据库填写不同数组名称

 

$db['default'] = array(

 

);

 

 

 

$db['hello'] = array(

 

);

 

public function home(){

     

    // 1.转载数据库操作类

    $this->load->database('default');//默认为default可以不写

     

    $sql = "select id,title from article limit 10";

    // 2.执行sql

    $obj = $this->db->query($sql);

     

    // 3.获取结果集

    $data = $obj->result();

     

    echo "<pre>";

    var_dump($data);

     

}