65
はじめてのCodeIgniter CodeIgniter Con 2011, Tokyo Japan CodeIgniter and its logo are property of EllosLab inc 寺嶋祐也 2011/02/19 大田区産業プラザPiO

はじめてのCodeIgniter

Embed Size (px)

DESCRIPTION

2011/02/19開催のCodeIgniterカンファレンスの講演資料です。

Citation preview

はじめてのCodeIgniterCodeIgniter Con 2011, Tokyo Japan

CodeIgniter and its logo are property of EllosLab inc

寺嶋祐也

2011/02/19 大田区産業プラザPiO

上場企業で法務をやっていたはずが

(中略)

いつの間にやらプログラムを書いていた!

おはようございます!

法務系PHPerです。

自己紹介

氏名:寺嶋 祐也 / Yuya Terajima

仕事:自営業

Tw : @terakuma

CI歴:1年8ヶ月

特徴:CodeIgniterのVim辞書作ってる人

内容・基礎編

・CodeIgniterと他のFWの違い・実際の構築方法

->スニペット管理ツール

対象・初めてCodeIgniterを使う人・オリジナルのFWを使っている人・cakePHPやsymfonyを使っている人

注意事項

・記載するCodeIgniterとは、CodeIgniter Reactorです

・Ver.は2.0

・ソースコードはgithubで公開中-> https://github.com/e2esoundcom/ci-snippets

CodeIgniter基礎編

Q.CodeIgniterとは?

・MVCフレームワーク

・PHP 5.1.6

・MySQL , Postgres, Oracle, SQLite, ODBC

・EllisLab.inc + コミュニティにより開発Core -> EllisLab.incReactor-> EllisLab.inc + コミュニティ

+Reactor Engineers

機能の追加はUser Voiceで

CodeIgniterの特徴(1)

軽量・高速

・最低限の構成ファイルをload

・ライブラリのload方法も限定的対応可

・合計2MB以下※ユーザーガイド等除く

CodeIgniterの特徴(2)

高い拡張性

・Coreも含めて拡張可

・ライブラリ、ヘルパーも拡張可

・コミュニティによる各種ライブラリ

・多数紹介されるHack

CodeIgniterの特徴(3)

低い学習コスト

・学習のボリューム自体が低い

・充実したユーザーガイド

基本 クラスライブラリ

ヘルパ

2.0になって変わったこと

・PHP4対応終了、PHP5.1.6以上へ・Scaffolding, Validation 削除・driver・CSRF保護機能の追加・キャッシュ機能強化(APC, memcache)・Bug Fix・各ライブラリにメソッド追加…etc

+ C とMの書き方が変わった

よくある質問

1.他のフレームワークより凄いの?

2.cakePHP/symfonyとCodeIgniterは何が違うの?

3.どんな規模の開発で使えるの?

CodeIgniterと他のFWの違い

CodeIgniterの特徴

・軽量・高速・高い拡張性・低い学習コスト

存在しない機能がある

ジェネレーター:自動生成機能

ツール自体がない

設定の記述が少ない設置も簡単

Migration:DBバージョン管理

ありません。

もうちょっと待ちましょう

Modelの挙動

引用元:Practical symfony 6日目

データベースから、ORMと連携して、簡単にデータを取得できる機能

symfonyの場合

Modelの挙動CodeIgniterの場合

Modelは全部手書き

但し、Hackはあります。

苦手なところもカバーができる拡張性!!

Viewの呼び出し:Layouts機能

操作するコンテンツ以外の枠は1ファイルで管理呼出する機能

Viewの呼び出しCodeIgniterの場合

view("header")

view("contents")

view("footer")

表示する度に個別に呼び出し

※実はこれにもHackが

苦手なところもカバーができる拡張性!!

イメージ

CodeIgniter

RoR系

個人的使い分け基準

・Modelでどれだけのテーブルを扱うか

・Hackでストレスなく対応できる範囲か

基本的には…・小~中規模・APIを使う頻度が高いWebサービス

使っている時の感想

・アプリケーション全体の掌握感

・気に入らなければ変えられる容易な拡張性

・スパゲティなコードと闘った後の読み物としても重宝

スニペット管理ツールを作る- CI-SNIPPETS -

CI - SNIPPETS

・スニペット管理ツール

・SyntaxHighlighter

・DBにデータを入れて引き出す程度

・認証なし

(デモ)

まずは、基本を押さえてみる

基本:ディレクトリ

application/~

・controllers・models・views・helpers (自作の関数置くところ)・libraries (自作のクラス置くところ)

system/~は触れない

基本:規約

ControllerとModel共通のルール

・ファイル名とクラス名は同一・クラス名の最初の1文字目は必ず大文字

sample.php

class Sample extends CI_Controller {}

基本:Controller基底のControllerを承継

初期化

ライブラリを呼出

ヘルパ呼出

アクションを定義

基本:Model(1)基底のModelを承継

初期化

メソッドを定義

基本:Model(2)

Controllerからの呼び出し方法

Modelファイル名

メソッドチェーンで使用

基本:View(1)

Viewファイル名

Controllerから配列で値を渡す

基本:View(2)Controllerで渡した配列の中身

配列の添え字を変数として扱える

まとめ:覚えること

ライブラリ

$this->load->library("name");ヘルパ

$this->load->helper("name");View

$this->load->view("file", $data);※値は配列で渡す

Model

$this->load->model("file");Modelのメソッドを使う

$this->model_name->function()

+ C とMの

フォーマット

インストール&

設定

※今日のサンプルコードはgithubにあります

https://github.com/e2esoundcom/ci-snippets

インストール

https://bitbucket.org/codeigniter_jp/ci-ja/

設定対象:4ファイル

・application/config/config.phpdatabase.php

・index.php

・.htaccess

設定:config.php

・設置URL$config["base_url"] = "http://example.jp/"

・log$config[" log_threshold "] = 4

・暗号化キー$config['encryption_key'] = "(32文字乱数)";

・URLプロトコル$config['uri_protocol'] = "AUTO";

+ CSRF機能$config['csrf_protection'] = TRUE;

設定:index.phpデフォルトでは…・$system_path = "system";・$application_folder = "application";

root/

applicasion/system/index.php

ディレクトリをドキュメントルート以外に設置する場合に変更

http://example.jp/にアクセス

設定:database.php

dbprefix => "sn_"

少し話題を変えてURLの話

/index.php/controller/action/param

index.phpカッコ悪い。

設定:.htaccess

root/

applicasion/system/index.php.htaccess

ewriteEngine onRewriteCond $1 !^(index¥.php|images|robots¥.txt)RewriteRule ^(.*)$ /index.php/$1 [L]

+ config.phpを書換え$config['index_page'] = '';

基本はこれだけ

編集画面を作る

・controller : edit.php・model : snippets_model.php・view : header.php

footer.php+ 個別のview

edit.php:~/edit

・設定ファイルから値の読込み・viewの呼び出し

edit_view.php

formヘルパ・CSRF保護機能を使う場合、必ずform_open()

form_open()の度に、hiddenフィールドを自動で

edit.php:~/edit/confirm

form_validation・値の検証クラスライブラリ・ルールの記述はコンストラクタ or 設定ファイル

$this->form_validation->run();

成功ならTRUE,失敗ならFALSE

ユーザー定義のルール

・controllerに検証用の関数を用意

callback_function_nameで検証ルールに指定

form_validationとset_value()の注意点

・set_value()は、form_validationをrun()させないと値が取れない

・set_value()で出力された値は、htmlspecialchars()を通っている

Model

DBでデータを扱う方法

大きく2つ

・SQLを発行する方法

・Active Recordを使う方法

SQL発行を補助するメソッド

・insert_string()

・update_string()

テーブル名と配列を与えるとSQLを生成array("title" => $title,

"code" => $code,"code_type" => $code_type);

結果取得

・オブジェクトで返す -> result(), row()・配列で返す -> result_array() , row_array()・何行返ったか -> num_rows()

こんな機能も!・クエリのキャッシュ・結果セットからCSV生成・結果セットからXML生成

CodeIgniterの情報源

・ユーザ会ML・ユーザ会フォーラム(準備中)・本家フォーラム・User Voice・Twitterの#codeigniter

Reactorになってから、開発の速度が大幅にUP!

さらなる機能の改善、追加が見込まれています。

CodeIgniterでHappy Engineer Lifeを!!

ご清聴ありがとうございました。