CodeIgniter 筆記 (一)

CodeIgniter

簡單做個筆記免得我到時候忘記,這真的是一個很神奇的Web framework (跟Rails比起來) …

建立一個新的Project

從官方網站 http://www.codeigniter.org.tw 下載下來後解壓縮,然後你的project叫做什麼就把資料夾名稱改成什麼這樣就好了。

  • rails的做法是rails new project_name

建立Controller

自己在application/controllers/資料夾中建立name.php的檔案就可以了,至於內容要填入

<?php

class Name extends CI_Controller {

  public function index($page = 'home')
  {
  }
}

這樣的code,其中$page = 'home'這段還不知道用意 …

注意哦,那個name的意思是你要叫什麼就打什麼,譬如是Users這個Controller你就建立users.php,然後class name是Users這樣。

  • rails的做法是 rails g controller name

Route

這是我覺得最神奇的地方 … 花了半個小時才發現自己錯在哪裡

假設我有一條route是 /users 這樣,我可以這樣寫設定

$route['users'] = "users/index";

它會自動mapping到users這個controller底下的index action這樣,但是我在瀏覽器上不管怎樣測試都失敗,後來我就在URL上寫成/index.php/users,然後就 … 過了 -_-

  • rails 的route我就不講了 … 很多種搭配,還有RESTful,CI看起來似乎並沒有RESTful的玩法在。

Model

它的model的建立方法是在application/models/底下建立name_model.php檔案,然後在Controller中用$this->load->model('name_model');來把它拉進來。

假設我們現在要有一個User model,所以我們先建立application/models/user_model.php,然後裡面寫

<?php
class User_model extends CI_Model {

  public function __construct()
  {
    $this->load->database();
  }

  public function all_users(){

    $query = $this->db->get('users');
    return $query->result_array();
  }
}

(附帶一提,有趣的是,CI的ORM也叫做ActiveRecord)

好,其中$this->db->get('users');這部分的作用就是跟db說它要撈users這個表。

(另外,如果要加上where的條件的時候,可以用$this->db->get_where('users', array('condition_1' => '1'));這種形式的語法來做)

然後我們就可以在controller中這樣撈資料:

$data["users"] = $this->user_model->all_users();

接著,view的部分就可以用foreach把$users的東西給dump出來 ...

  • rails建立model的方式是rails g model name

View

為什麼要把View拆開來說呢?因為 … 它很神奇

首先,似乎沒有像Rails有application.html.erb這個東西的概念,它的layout是另外自己拼湊出來的 … 我在我的Controller中寫了如下的code

$this->load->view('templates/header', $data);
$this->load->view('users/index', $data);
$this->load->view('templates/footer', $data);

然後,要自己在application/views/底下建立templatesusers兩個資料夾,自己建立header.php, footer.php以及在users底下建立index.php然後自己load進來,反正在CI裡面什麼都要自己load就對了XD

那第二個參數的$data幹嘛用的?其實就是把Controller的變數扔到前端用的,在Rails裡面這部分直接設定成instance variable就可以了,不過因為PHP的特性或者是CI的架構,這部分只能另外傳。

呼 …

先這樣吧,MVC都有基礎的認識了,剩下就是看文件然後自己幹一套系統出來,以上。

Comments

comments powered by Disqus