codeigniter 2.0.x

75
2011.04.17 1 CodeIgniter PHP Framework 2.0.X Appleboy (Bo-Yi Wu) 2011.04.16

Upload: bo-yi-wu

Post on 20-Aug-2015

16.427 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: CodeIgniter 2.0.X

2011.04.17 1

CodeIgniter PHP Framework 2.0.X

Appleboy (Bo-Yi Wu)2011.04.16

Page 2: CodeIgniter 2.0.X

2011.04.17 2

內容皆採用 創用 CC 姓名標示 -相 同方式分享 3.0 台灣 授權條款

Page 3: CodeIgniter 2.0.X

2011.04.17 3

感謝

● OSSF 自由軟體鑄造場工作坊

● KaLUG 社群

● 現場所有工作人員或聽眾

Page 4: CodeIgniter 2.0.X

2011.04.17 4

今天上課如果有任何問題麻煩請舉手直接打斷講課過程

因為您的問題或許是大家的共同問題

Page 5: CodeIgniter 2.0.X

2011.04.17 5

這份投影片適合 PHP初學者 及尚未使用過 Framework 有幫助

( 熟悉 MVC 的長輩們就不用聽這些了 )

Page 6: CodeIgniter 2.0.X

2011.04.17 6

今天來推廣 CodeIgniter PHP Framework教大家如何快速開發網站

不必一個人辛苦默默從” ”無 寫到有

Page 7: CodeIgniter 2.0.X

2011.04.17 7

Who Am IWho Am IBo-Yi Wu (appleboy) CodeIgniter 台灣繁體中文手冊翻譯 CodeIgniter 台灣繁體中文網站及討論區 CodeIgniter PHP Plurk API (github) CodeIgniter Google Short URL API (github)Contact

appleboy.tw At gmail.comhttp://plurk.com/appleboy46http://blog.wu-boy.com

Now 正文科技有限公司 (Software Department)

- Linux Kernel Driver, Soho Router Integration- Android G-Sensor Driver

Page 8: CodeIgniter 2.0.X

2011.04.17 8

尚未使用 Framework 的設計模式

Page 9: CodeIgniter 2.0.X

2011.04.17 9

Evolution of Web Development

公司網站公司網站

最新消息最新消息

關於我們關於我們

產品資訊產品資訊

聯絡我們聯絡我們

News.php

About.php

Product.php

Contact.php

Page 10: CodeIgniter 2.0.X

2011.04.17 10

Evolution of Web Development

News.phpNews.php

新增新聞新增新聞

刪除新聞刪除新聞

修改新聞修改新聞

Add

Delete

Edit

http://xxxx.com.tw/news.php?mode=[add|delete|edit]&news_id=xxxx

MySQL

Page 11: CodeIgniter 2.0.X

2011.04.17 11

$action = (isset($_GET['mode'])) ? $_GET['mode'] : 'add';

switch($action)

{

case 'add':

echo 'add news';$sql = “insert into xxxx values('aa', 'bb')”;

case 'edit':

echo 'edit news';$sql = “update xxx set title = 'title name' where id = '1'”;

case 'delete':

echo 'delete news';$sql = “delete xxx where id = '1'”;

}

Page 12: CodeIgniter 2.0.X

2011.04.17 12

一個模組 一個檔案

● SQL 語法 , CSS html, PHP 全部寫在同一檔案● 維護困難

● 擴充性差

● 程式雜亂

● 無法交接

● 系統漏洞 SQL Injection● 開發速度慢

● 後輩愈看愈不爽,砍掉重練?太難維護

– 後後輩更不爽,又砍掉?● …..........................

Page 13: CodeIgniter 2.0.X

2011.04.17 13

Why use PHP Framework?

Page 14: CodeIgniter 2.0.X

2011.04.17 14

為了加快網站開發速度及維護模組化套件 ,方便閱讀程式碼所以 PHP Framework 誕生

Page 15: CodeIgniter 2.0.X

2011.04.17 15

Public Web Framework

Page 16: CodeIgniter 2.0.X

2011.04.17 16

Why Choose CodeIgniter?

Page 17: CodeIgniter 2.0.X

2011.04.17 17

Why Choose CodeIgniter ?

1. Small (非常小 )2. Fast ( 非常快速,想用什麼就 load 什麼 )3. Simple (程式架構容易 )4. High Performance (CI vs ZF vs CakePHP)5. Nearly Zero Configuration (五分鐘內搞定 )6. Cleaner Code ( 方便學習擴充 Framework)7. 由我本人親自支援 (歡迎討論區留言 )

Page 18: CodeIgniter 2.0.X

2011.04.17 18

What is CodeIgniter ?

Open Source Web Application Framework

MVC (Model View Controller) Architecture

Page 19: CodeIgniter 2.0.X

2011.04.17 19

CodeIgniter 版本演進

● Version 1.7.1 Release: 2009.02.10● Version 1.7.2 Release: 2009.11.11● Version 1.7.3 Security patch● Version 2.0.0 Release: 2011.01.28● Version 2.0.1 Release: 2011.03.15● Version 2.0.2 Release: 2011.04.07

Thanks for CodeIgniter Reactor

2 month

1 month

Page 20: CodeIgniter 2.0.X

2011.04.17 20

WEB SERVER

ROUTES

Controller

ViewMODEL

LAYOUTDatabase

Client BROWSER

MVC Architecture

Page 21: CodeIgniter 2.0.X

2011.04.17 21

MVCView (views/product.php)

<html><body><p>Product Count:<?=$count?></p></body></html>

Controller (controllers/product.php)function showProduct($id) { $this->load->model(“product”); $count = $this->product->getCount($id); $data[‘count’] = $count; $this->load->view(“product”, $data);}

Model (controllers/product.php)function getCount($id) { $this->db->where(“id”, $id); $this->db->from(“my_product”); $query = $this->db->get(); return $->num_rows();}

View

Controller

Model

Page 22: CodeIgniter 2.0.X

2011.04.17 22

Application Flow Of CodeIgniterApplication Flow Of CodeIgniter

CodeIgniter Plugin 已經在 2.0.X 被移除

Page 23: CodeIgniter 2.0.X

2011.04.17 23

How to install CodeIgniter ?

Page 24: CodeIgniter 2.0.X

2011.04.17 24

System Requirement 系統需求

● System● Windows, Linux(Fedora, Ubuntu), FreeBSD

● PHP● Version 5.1.6 (not support PHP 4 for 2.0.x 系列 )● 如果要支援 PHP 4 請使用 CI 1.7.x 系列

● Database● MySQL (4.1+), MySQLi, MS SQL, Postgres, Oracle,

SQLite, 以及 ODBC

Page 25: CodeIgniter 2.0.X

2011.04.17 25

以最短時間內安裝完成

● Windows + Appserv (推薦 )● FreeBSD + Ports (www/codeigniter-devel)● Ubuntu + apt ( 完成 AMP 架構 )

Page 26: CodeIgniter 2.0.X

2011.04.17 26

以最快速度安裝好 CodeIgniter 環境(Windows + Appserv + CodeIgniter 2.0)

Page 27: CodeIgniter 2.0.X

2011.04.17 27

Windows 環境安裝步驟

● 請先準備好 Windows OS (XP, Win 7)

● 下載 CodeIgniter 2.0.X 安裝檔● 請參考 http://www.codeigniter.org.tw

● 解壓縮到 C 槽 Appserv/www 目錄

● 重新命名目錄● CodeIgniter_2.0.2 → CodeIgniter

● 打開瀏覽器鍵入● http://localhost/CodeIgniter/

Page 28: CodeIgniter 2.0.X

2011.04.17 28

請大家先安裝好 CodeIgniter 環境

Page 29: CodeIgniter 2.0.X

2011.04.17 29

完成畫面

Page 30: CodeIgniter 2.0.X

2011.04.17 30

CodeIgniter 目錄架構

● application/● 專案目錄 (存放所有前端後端程式碼 )

● system/● CodeIgniter 核心目錄 (不需要更動 )

● user_guide/● CodeIgniter Document (可以看中文版 )

● index.php

Page 31: CodeIgniter 2.0.X

2011.04.17 31

根目錄 Index.php 設定

● $system_path : 系統核心目錄設定

● $application_folder : 專案目錄設定

● 如果多專案,可以將核心目錄共用

Page 32: CodeIgniter 2.0.X

2011.04.17 32

專案目錄 application

● application● Cache (網站快取檔案 )● Config (網站設定檔 : 資料庫 ....)● Controllers (所有控制 )● Libraries (共用函式 )● Models (資料庫檔案 )● Views ( 前端 html, css)

Page 33: CodeIgniter 2.0.X

2011.04.17 33

CodeIgniter URL

● example.com/index.php/news/show/article_id● news 代表 Controller● show 代表 Controller 類別內的函式或 Method● article_id 代表 ID 或任何參數傳入給 Method

● 範例 :比對以前設計

example.com/news.php?mode=show&id=1

Page 34: CodeIgniter 2.0.X

2011.04.17 34

移除 index.php 檔案

● mod_rewrite 功能● 利用 .htaccess 移除 URL 所包含的 index.php

Page 35: CodeIgniter 2.0.X

2011.04.17 35

任意副檔名

● CodeIgniter/index.php/welcome/index● 可以在 index 後面任意加上副檔名

● 範例 :● codeIgniter/index.php/welcome/index.html● codeIgniter/index.php/welcome/index.htm● codeIgniter/index.php/welcome/index.py

● 修改 application/config/config.php● $config['url_suffix'] = '.py';

Page 36: CodeIgniter 2.0.X

2011.04.17 36

Controllers

● example.com/index.php/blog/● 直接找到 application/controllers/blog.php

<?phpclass Blog extends CI_Controller {

public function index(){

echo 'Hello World!';}

}?>

Page 37: CodeIgniter 2.0.X

2011.04.17 37

Controller Functions● example.com/index.php/blog/index● example.com/index.php/blog/comments

<?phpclass Blog extends CI_Controller {

public function index(){

echo 'Hello World!';}

public function comments(){

echo 'Look at this!';}

}?>

Page 38: CodeIgniter 2.0.X

2011.04.17 38

類別建構子

<?phpclass Blog extends CI_Controller {

public function __construct(){

parent::__construct(); // Your own constructor code

$this->load->helper('url');$this->load->library('email');

}}?>

Page 39: CodeIgniter 2.0.X

2011.04.17 39

Default Controller

● example.com/index.php/welcome/index● example.com/

● 修改設定檔

● application/config/routes.php● $route['default_controller'] = 'welcome';

Page 40: CodeIgniter 2.0.X

2011.04.17 40

作業

● 請新增 Blog Controller ● 裏面包含兩個 method● Index and person

● Index method● 傳入自己的 ID 比如是 appleboy● 畫面會顯示 : Hi appleboy, 歡迎來到 CodeIgniter

● person method● 產生 3個 input text (name, company, phone)● 帶入 3個參數可以分別寫入上述欄位

Page 41: CodeIgniter 2.0.X

2011.04.17 41

Views

● 檔案放置 application/views/

● 任意新增檔案 blogview.php

<html><head><title>My Blog</title></head><body>

<h1>Welcome to my Blog!</h1></body></html>

Page 42: CodeIgniter 2.0.X

2011.04.17 42

如何載入 View

● $this->load->view('name');● $this->load->view('folder_name/file_name');

<?phpclass Blog extends CI_Controller {

function index(){

$this->load->view('blogview');}

}?>

URL: example.com/index.php/blog/

Page 43: CodeIgniter 2.0.X

2011.04.17 43

新增動態資料到 View

● $this->load->view('name', $data);● $data 陣列格式如下

$data = array( 'title' => 'My Title', 'heading' => 'My Heading', 'message' => 'My Message' );

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

Page 44: CodeIgniter 2.0.X

2011.04.17 44

Views 接受 $data 顯示資料

● 顯示格式如下

<html><head><title><?php echo $title;?></title></head><body>

<h1><?php echo $heading;?></h1><hr><div><?php echo $message;?></div>

</body></html>

Page 45: CodeIgniter 2.0.X

2011.04.17 45

顯示迴圈● Controller 程式

<?phpclass Blog extends CI_Controller {

function index(){

$data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');

$data['title'] = "My Real Title";$data['heading'] = "My Real Heading";

$this->load->view('blogview', $data);}

}?>

Page 46: CodeIgniter 2.0.X

2011.04.17 46

<html><head>

<title><?php echo $title;?></title></head><body>

<h1><?php echo $heading;?></h1>

<h3>My Todo List</h3>

<ul><?php foreach($todo_list as $item):?>

<li><?php echo $item;?></li>

<?php endforeach;?></ul>

</body></html>

Page 47: CodeIgniter 2.0.X

2011.04.17 47

將 views存到變數

● 用途 : 常常用在 AJAX (demo)

● $string = $this->load->view('myfile', $data, TRUE);

● 將第 3 個參數設定為 true

● 範例如下$string = $this->load->view('blogview', $data, TRUE);echo $string;

Page 48: CodeIgniter 2.0.X

2011.04.17 48

作業

● 將 blog 的 person 此 method 所有 html 變成 用 $this->load->view 方式顯示

● 產生陣列顯示在 view 如下● CodeIgniter 非常好玩● CodeIgniter 是開放軟體● CodeIgniter 非常快速● CodeIgniter 非常輕量

Page 49: CodeIgniter 2.0.X

2011.04.17 49

Library and helper

● 載入輔助函數● $this->load->helper('url');

● 載入多個輔助函數● $this->load->helper( array('url', 'email') );

● 載入 Library 類別● $this->load->library('email');

● 載多個 Library 類別● $this->load->library(array('email', 'pagination'));

● 系統預設載入類別 (Ex: input ….);

Page 50: CodeIgniter 2.0.X

2011.04.17 50

Input Library

● POST, COOKIE, 或 SERVER 資料● $this->input->post()● $this->input->cookie()● $this->input->server()

● 取得 POST 資料● $this->input->post('title');● $this->input->post('title', TRUE);

– 第 2 參數使用 XSS 過濾器處理 POST 資料

Page 51: CodeIgniter 2.0.X

2011.04.17 51

作業

● 將 person 資料填入之後送出到 add_person 此 method,並且將三欄位資料顯示於畫面

Page 52: CodeIgniter 2.0.X

2011.04.17 52

資料庫模型 (Models)

● 修改 application/config/database.php● $db['default']['hostname'] = 'localhost';● $db['default']['username'] = 'XXXXXX';● $db['default']['password'] = 'XXXXXX';● $db['default']['database'] = 'XXXXXX';● $db['default']['dbdriver'] = 'mysql';

Page 53: CodeIgniter 2.0.X

2011.04.17 53

Model 介紹

● application/models/blog_model.php

class Blog_model extends CI_Model {

function __construct() { parent::__construct(); }}

Page 54: CodeIgniter 2.0.X

2011.04.17 54

簡單 model 寫法class Blog_model extends CI_Model {

function __construct() { // 呼叫模型 (Model)的建構函數 parent::__construct(); } function get_last_ten_entries() { …............ }

function insert_entry() { …............... }}

Page 55: CodeIgniter 2.0.X

2011.04.17 55

載入 Model

● 請先務必載入 database才可使用model● $this->load->database();

● $this->load->model('blog_model');● 使用如下

– $this->blog_model->get_last_ten_entries();– $this->blog_model->insert_entry();

Page 56: CodeIgniter 2.0.X

2011.04.17 56

快速入門

● $query = $this->db->query("YOUR QUERY");● $query = $this->db->query('SELECT name, title,

email FROM my_table');

foreach ($query->result() as $row){

echo $row->title;echo $row->name;echo $row->email;

}

Page 57: CodeIgniter 2.0.X

2011.04.17 57

Database Active Record

● 查詢資料 (Selecting)

● 新增資料 (Inserting)

● 更新資料 (Updating)

● 刪除資料 (Deleting)

Page 58: CodeIgniter 2.0.X

2011.04.17 58

新增資料 Insert$data = array(

'title' => 'my title' ,'name' => 'my name' ,'date' => '2011.04.16'

);

$this->db->insert('table_name', $data);

產生 :INSERT INTO table_name (title, name, date) VALUES ('my title', 'my name', '2011.04.16')

Page 59: CodeIgniter 2.0.X

2011.04.17 59

作業

● 請新增資料庫 blog

● 設定 application/config/database.php 資訊

● 新增資料表 blog_author● author_id, authod_name, author_company,

author_phone

● 新增 blog_model and add_person method● 利用 Controller 呼叫 blog model 新增資料

Page 60: CodeIgniter 2.0.X

2011.04.17 60

查詢資料 Selecting

● $query = $this->db->get('table_name');● 產生 :SELECT * FROM mytable

● $query = $this->db->get('mytable', 10, 20);● 產生 :SELECT * FROM mytable LIMIT 20, 10

Page 61: CodeIgniter 2.0.X

2011.04.17 61

● 利用 select + get 查詢● $this->db->select('title, content, date');● $query = $this->db->get('mytable');

● 利用 select + from + get 查詢● $this->db->select('title, content, date');● $this->db->from('mytable');● $query = $this->db->get();

– SELECT title, content, date FROM mytable

● 加上判斷條件 where● $this->db->where('name', $name);● $this->db->where('title', $title);● $this->db->where('status', $status);

Page 62: CodeIgniter 2.0.X

2011.04.17 62

查詢 Result回傳值

● 多筆資料 (常用 )● result()● result_array()

● 單筆資料● row()● row_array()

Page 63: CodeIgniter 2.0.X

2011.04.17 63

多筆資料輸出 (物件方式 )

$query = $this->db->query("YOUR QUERY");

if ($query->num_rows() > 0){

foreach ($query->result() as $row){

echo $row->title;echo $row->name;echo $row->body;

}}

Page 64: CodeIgniter 2.0.X

2011.04.17 64

多筆資料輸出 (陣列方式 )

$query = $this->db->query("YOUR QUERY");

if ($query->num_rows() > 0){

foreach ($query->result_array() as $row){

echo $row['title'];echo $row['name'];echo $row['body'];

}}

Page 65: CodeIgniter 2.0.X

2011.04.17 65

單筆資料輸出 (物件方式 )

$query = $this->db->query("YOUR QUERY");

if ($query->num_rows() > 0){

$row = $query->row();

echo $row->title;echo $row->name;echo $row->body;

}

Page 66: CodeIgniter 2.0.X

2011.04.17 66

單筆資料輸出 (陣列方式 )

$query = $this->db->query("YOUR QUERY");

if ($query->num_rows() > 0){

$row = $query->row_array();

echo $row['title'];echo $row['name'];echo $row['body'];

}

Page 67: CodeIgniter 2.0.X

2011.04.17 67

作業

● 將資料表 blog_author 所有資料顯示出來

● 新增 blog_model get_all_data method● 將所有資料回傳給 blog controller● 將資料傳到 view 條列式 顯示出來

Page 68: CodeIgniter 2.0.X

2011.04.17 68

更新資料 (Updating)

$data = array('title' => $title,'name' => $name,'date' => $date

);

$this->db->where('id', $id);$this->db->update('mytable', $data);

產生 : UPDATE mytable SET title = '{$title}', name = '{$name}', date = '{$date}' WHERE id = $id

Page 69: CodeIgniter 2.0.X

2011.04.17 69

作業

● 在 person ” ”顯示畫面加入 編輯 連結

● 點選之後會顯示該筆資料

● 修改完成之後,按下儲存可以覆蓋該筆資料

Page 70: CodeIgniter 2.0.X

2011.04.17 70

刪除資料 (Deleting)

● $this->db->where('id', $id);● $this->db->delete('mytable');

● 產生 : DELETE FROM mytable WHERE id = $id

Page 71: CodeIgniter 2.0.X

2011.04.17 71

作業

● 在 person ” ”顯示畫面加入 刪除 連結

● 點選該連結會刪除該筆資料,並且返回 person 顯示畫面

Page 72: CodeIgniter 2.0.X

2011.04.17 72

join兩表格

$this->db->select('*');$this->db->from('blogs');$this->db->join('comments', 'comments.id = blogs.id', 'left');

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

產生 :SELECT * FROM blogs LEFT JOIN comments ON comments.id = blogs.id

Page 73: CodeIgniter 2.0.X

2011.04.17 73

期末作業

● 實做部落格發文系統● 部落格作者資料表 blog_author● 發表文章時,可以下拉選擇作者 blog_author● 可以新增刪除修改顯示文章

– 請新增 blog_post 資料表● post_id, author_id, post_title, post_data, add_time, edit_time

– 用 join 方式將作者顯示在畫面

Page 74: CodeIgniter 2.0.X

2011.04.17 74

今天課程就到這裡如果有任何問題都可以發問大家辛苦了 ,期末作業要交喔

Page 75: CodeIgniter 2.0.X

2011.04.17 75

Thank You