SlideShare a Scribd company logo
Ensky / 林宏昱
What's Framework




Framework ,中文是「框架」
顧名思義就是一個框框,你寫的東西都要在那個框
框裡。
What's Framework




更精確的定義,就是有人寫了一些code,
那些code提供了一個規範,
規定你怎麼寫網站、檔案應該存在哪裡,
透過那些規定,你可能可以更快寫出一個架構不錯
的網站。
你可能會覺得,PHP那麼簡單,我也寫很快阿,
為什麼還需要Framework來「規範」我呢?
我崇尚自由!
Why Framework?




但是阿,有句諺語說,
「code過了三個月就不是你寫的了」

自己寫的code要是沒有document,
很快就忘了你之前的邏輯
或者是,你在團隊中工作,
而他們全部都需要了解你的Coding style。

身為工程師的你超懶得寫document的阿
Why Framework?
• 你需要大量Document讓你的工作伙伴快速上手
• 你需要一套規範讓大家coding邏輯相同


而這些是一個好的Framework會提供給你的!
Framework to NewHand
基本上不建議新手學Framework。

新手對於PHP的各種特性還不夠熟悉,
很容易被Framework帶來的各種「糖衣」誘惑

一旦使用之後從此對於架構的概念就定型了
從此在也無法接受其他架構
(即使別的FrameWork可能設計的更好)
Framework to NewHand
Framework也是人寫出來的,
在使用的時候你一定要知道每個功能背後是
怎麼寫的,甚至你可以自己trace code。

如此一來,才不會被Framework綁住,
輕則不能輕易換Framework,
重則沒有Framework就不會寫code了。
Framework to NewHand
因此我對新手的建議是

多練、多嘗試

趁自己的架構還沒有被定型,
多嘗試研發自己的架構,
寫的順了,想快速開發,再survey一套順手的
Framework
而不是一開始就直接碰他。
Popular PHP Framework
http://www.phpframeworks.com/index.php
CodeIgniter is an PHP Framework
•   小巧
•   輕量
•   說明文件多、完整
•   速度快
•   簡單

我講CI不代表CI就是最好的Framework,
每個人喜歡的Framework不同。
Model View Controller
MVC是一個程式設計的概念,
和OOP很像,
並不是網頁設計獨有的東西。

但在網頁設計上剛好很適合採用M-V-C架構,
因此幾乎大家的PHP Framework
都採此架構設計。
Model View Controller


        Controller




Model                View
Model View Controller
• Controller
  – 邏輯判斷
    Ex: 這頁做些什麼事情?(登入、註冊、表單)
    我需要哪些資料?
    中間人的角色

• Model
  – 可以重複利用的函數群
    可以被不同的Controller load
    比如說Database的操作很適合成為Model
Model View Controller
• View
  – Layout
    各種不同的網頁內容
    此種頁面純粹印出Controller提供的變數
    (or陣列)
    不做任何邏輯判斷。
Model View Controller

             1.GET /login
Browser                          Controller
             6. Return Page                   4.Load
                                              Login page
           3.Return
           Auth model
                        2.Load Auth
                        model       5. Return
                                    Login Page
             Model                            View
Router
CI的檔案管理是用URL PATH管理的,
當一個網址長這樣:
http://www.codeigniter.org.tw/downloads
他其實代表的意思是:
http://www.codeigniter.org.tw/index.php/downloads
而利用Web Server的URL Rewrite功能,
達到重新導向的目的。

因此,所有網址都經由index.php做統一集中的route動作
Router
index.php看到一個url長這樣
http://ensky.tw/auth/login

根據CI的router,他會去找controller/auth.php
這隻程式,然後去執行他的login function

Demo Code
Router
而如果再繼續/下去,則會被當成該method的
params傳進去。

也因為CI的Router機制,
我們看到一個url就知道去哪裡找他,
檔案在哪裡都一清二楚不會找不到。

http://xxxx/controller/method/params
Loader
為了加快速度,CI的所有元件都是load by need的,
需要的時候在使用loader把它load進來。
load進來之後就會綁到$this上面,
比如說:

$this->load->model('curl');
$this->curl->xxx();

就不需要用傳統的
require_once __dir__ ."/curl.php";
$curl = new curl();
Demo Time

I'll show you controller, model, view
Library
有些時候你會想用別人寫的Library,
但他不是用CI這套Framework,怎麼辦?

沒關係,CI可以讓你使用別人寫的Library,
用法一樣輕鬆寫意。

$this->load->library('phpmailer');
$this->phpmailer->send('enskylin@gmail.com');
CI Session
CI製作團隊似乎覺得php native的session
不是很好用,所以自己設計了一套session,
完全使用cookie加密存放資料,
也可以選擇使用db存放。

$this->session->set_userdata('id', 'ensky');
echo $this->session->userdata('id'); // ensky
CI Session
Note:
如果有個session沒有被設定過(!isset)的話
不會噴錯誤,他會是False

有個flash_data機制頗好用,
若某個session只想保留給下一頁使用,
就可以用flashdata來存

$this->session
     ->set_flashdata('errmsg', 'error!');
<?=$this->session->flashdata('errmsg')?>
Database
• 基本上就完全是我前幾天講的Active Record
$result = $this->db->select('*')
                   ->from('user')
                   ->where('id', 'ensky')
                   ->get()->result_array();

$insert_data = ['id'=>'ensky',
                'gender'=>'boy'];
$this->db->insert('user', $insert_data);
Other feature
• Form Validation
  – 可以讓你很快的做表單輸入格式驗證
    比如說密碼長度大於blablabla
    或者是這欄只能是數字,諸如此類。

  http://www.codeigniter.org.tw/user_guide/libraries
  /form_validation.html
Other feature
• input class
  – 使用者的資料向來都要視為很不安全,
    比方說get, post, cookie等資訊,
    ci就把所有使用者的input包成一個class,
    可以用類似方式取用

    $id = $this->input->post('id');
    $cookie_id = $this->input->cookie('id');
DEMO!
Reference


• 絕對強大的中文手冊
  http://www.codeigniter.org.tw/user_guide/

More Related Content

PDF
API Mocking
PPT
Node Web开发实战
PPTX
第三方内容开发最佳实践
PDF
ASP.Net MVC2 简介
PPTX
广告投放代码和创意代码持续优化
PDF
Berserk js
PPTX
淘宝开放产品前端实践
PDF
百度前端性能监控与优化实践
API Mocking
Node Web开发实战
第三方内容开发最佳实践
ASP.Net MVC2 简介
广告投放代码和创意代码持续优化
Berserk js
淘宝开放产品前端实践
百度前端性能监控与优化实践

What's hot (19)

PDF
第九章解答
PPTX
Angular.js & ASP.NET in Study4
PPTX
twMVC#01 | ASP.NET MVC 的第一次親密接觸
PDF
Laradebut #7 - Laravel AUTH
PDF
Uliweb cheat sheet_0.1
PDF
工作坊總結
PDF
Blazor Component 開發實戰
PDF
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
PDF
twMVC#24 | 別讓資料庫不開心!有些工作讓 Elasticsearch 來代勞
PDF
Ruby rails分享
PDF
架構行動式網站(使用 ASP.NET MVC 4.0 -twMVC#6
PPT
重构之道 触屏篇
PDF
2021.laravelconf.tw.slides3
PDF
CRUD 綜合運用
PPT
zend framework in web services
PPTX
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
PDF
CRUD 綜合運用
PDF
使用 Controller
PPTX
Study4 love.2016.2.20.ionic
第九章解答
Angular.js & ASP.NET in Study4
twMVC#01 | ASP.NET MVC 的第一次親密接觸
Laradebut #7 - Laravel AUTH
Uliweb cheat sheet_0.1
工作坊總結
Blazor Component 開發實戰
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
twMVC#24 | 別讓資料庫不開心!有些工作讓 Elasticsearch 來代勞
Ruby rails分享
架構行動式網站(使用 ASP.NET MVC 4.0 -twMVC#6
重构之道 触屏篇
2021.laravelconf.tw.slides3
CRUD 綜合運用
zend framework in web services
KSDG-ASP.NET MVC 5 Overview (偽三國誌)
CRUD 綜合運用
使用 Controller
Study4 love.2016.2.20.ionic
Ad

Viewers also liked (15)

PDF
Gearman work queue in php
PDF
Introduction to CodeIgniter
PDF
PHP CodeIgniter 框架之美
PDF
以Code igniter為基礎的網頁前端程式設計
PDF
advanced introduction to codeigniter
PPTX
Codeigniter 3.0 之 30 分鐘就上手
PDF
企業資源規劃(Erp)系統導入規劃
PDF
開發環境建置
PDF
初心者 Git 上手攻略
PDF
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
PDF
淺談RESTful API認證 Token機制使用經驗分享
PPTX
RESTful API的设计与开发
PDF
Composer 從入門到實戰
PDF
REST to RESTful Web Service
PPTX
API Token 入門
Gearman work queue in php
Introduction to CodeIgniter
PHP CodeIgniter 框架之美
以Code igniter為基礎的網頁前端程式設計
advanced introduction to codeigniter
Codeigniter 3.0 之 30 分鐘就上手
企業資源規劃(Erp)系統導入規劃
開發環境建置
初心者 Git 上手攻略
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
淺談RESTful API認證 Token機制使用經驗分享
RESTful API的设计与开发
Composer 從入門到實戰
REST to RESTful Web Service
API Token 入門
Ad

Similar to OpenWebSchool - 11 - CodeIgniter (20)

PDF
Introduction to MVC of CodeIgniter 2.1.x
PDF
CodeIgniter 2.0.X
PDF
Phpconf 2011 introduction_to_codeigniter
PPT
学习 CodeIgniter
KEY
Yiitalk
PDF
运维系统开发与Rails 3页面开发实践
KEY
phpconf 2012 yii
PDF
Ibmzf2
PPT
2011 php技术高峰论坛演讲.黄波
PPT
PHP WEB 应用组织与结构
PDF
OpenWebSchool - 03 - PHP Part II
PDF
Web coding principle
PPT
PHP Coding Standard and 50+ Programming Skills
PPT
Codeigniter分享
PDF
优酷 Web网站架构案例分析
PDF
Youku arch qcon2009_beijing
PDF
Key value store
PDF
多说沈振宇:插件思想及多说的开发实践
PPTX
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
PDF
常見設計模式介紹
Introduction to MVC of CodeIgniter 2.1.x
CodeIgniter 2.0.X
Phpconf 2011 introduction_to_codeigniter
学习 CodeIgniter
Yiitalk
运维系统开发与Rails 3页面开发实践
phpconf 2012 yii
Ibmzf2
2011 php技术高峰论坛演讲.黄波
PHP WEB 应用组织与结构
OpenWebSchool - 03 - PHP Part II
Web coding principle
PHP Coding Standard and 50+ Programming Skills
Codeigniter分享
优酷 Web网站架构案例分析
Youku arch qcon2009_beijing
Key value store
多说沈振宇:插件思想及多说的开发实践
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
常見設計模式介紹

More from Hung-yu Lin (10)

PDF
2014 database - course 2 - php
PDF
2014 database - course 3 - PHP and MySQL
PDF
2014 database - course 1 - www introduction
PDF
OpenWebSchool - 06 - PHP + MySQL
PDF
OpenWebSchool - 05 - MySQL
PDF
OpenWebSchool - 02 - PHP Part I
PDF
OpenWebSchool - 01 - WWW Intro
PDF
Dremel: interactive analysis of web-scale datasets
PDF
Google App Engine
PDF
2014 database - course 2 - php
2014 database - course 3 - PHP and MySQL
2014 database - course 1 - www introduction
OpenWebSchool - 06 - PHP + MySQL
OpenWebSchool - 05 - MySQL
OpenWebSchool - 02 - PHP Part I
OpenWebSchool - 01 - WWW Intro
Dremel: interactive analysis of web-scale datasets
Google App Engine

OpenWebSchool - 11 - CodeIgniter