CIUnit: Unit testing for CodeIgniter

CodeIgnigter

メモ〆(。。)
http://www.foostack.com/foostack/
CodeIgniterとphpUnitをつなぐブリッジ

追記:設置までできました♪

ダウンロードすると、なぜか.svnフォルダがそのまま搭載されていて、
いつでもsvn updateしてください的な感じです。
(ただし、ID,PASSが必要みたい・・・どこかに公開されてるのかな?)

テストの為にDBを汚さないようにyamlを使ってね的な事が書かれている部分が、よくわからないのだけれども。
続きはまた今夜か週末にやりたいと思います。

参考リンク

phpUnitの使い方
http://aglabo.com/agl/proevo/PHP/PEAR/phpunit-howto.html

PhpUnit – 最強のユニットテスト自動化ツール
http://www.doyouphp.jp/tips/tips_phpunit.shtml

phpUnitのWIKI
http://www.phpunit.de/

PHPUnit3で始めるユニットテスト
http://gihyo.jp/dev/feature/01/php-test/0001

ネコネットデザイン事務所ホームページ




ネコネットデザイン事務所ホームページを先日リニューアルしました。

旧サイトは、「OpenPNEでつくる!最強のSNSサイト」の中で、OpenPNEのスキンジェネレータNEKOGET PNESKINの解説を掲載いただいた時に本にサイトのキャプチャを掲載いただいた事もあり、思い出深いサイトでしたが、デザインも変更をしました。

このホームページはCodeIgniterというフレームワークを使って、作成しています。
運営をしている、PNESKIN等のコンテンツは自宅のサーバでの運営なのですが、
仕事用のこのサイトはレンタルサーバに設置をしています。

自宅の環境PHP5 MySQL5の環境で開発を進めましたが、レンタルサーバがPHP4 MySQL4.0という古い環境のため、少しコードに手を入れてレンタルサーバ上で動かしています。

コーポレートサイト用の簡易CMSとして、少しずつ育てていく予定です。

メモ

MyNETS2
管理者のログインとか認証関連
元のがよくわからなかったので、作っちゃう事に。

管理用テーブルを作成

 

CREATE TABLE <code>admin</code> (
<code>id</code> INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
<code>user_id</code> INT( 11 ) NOT NULL ,
<code>level</code> INT( 1 ) NOT NULL ,
<code>create</code> TIMESTAMP NOT NULL ,
<code>update</code> TIMESTAMP NOT NULL
) TYPE = MYISAM ;

levelは権限レベル 1はALL 0は無効
数字が増えて行くにつれて、アクセスできる箇所を減らして見ようかなと思ってる。
とりあえずは有効無効設定的に使用

こんな感じでjoinさせて検索しちゃえばいいかなと。
管理ユーザ専用のID,PASSを保存するテーブルをとも思ったけども
モジュール別に管理権限とかつけたくなるかもしれないし。
管理者名は別にあってもいいかもしれない。
後からカラムを追加してみよう・・・・〆(。。)

joinだとこんな感じになるかな・・・・〆(。。)

$this->db->select('*');
$this->db->from('user');
$this->db->join('admin', 'admin.user_id = user.user_id);
$this->db->where('user_id, $user_id); 
$this->db->where('level', 1); 
$query = $this->db->get();

1.6.3のユーザーガイド(MyNETS2は1.7ベースらしい)
http://codeigniter.jp/user_guide_ja/database/active_record.html

whereの指定は、「4. 自由に指定できる文字列を使用する方法」の書き方の方が好みなので、こっち採用〆(。。)

4. 自由に指定できる文字列を使用する方法:

WHERE句の中身を自分で書くこともできます:
$where = “name=’Joe’ AND status=’boss’ OR status=’active'”;

$this->db->where($where);

adminモジュールを書き換えちゃうのもあれなので、
nekogetモジュールを作成
主な役割は会員管理
ここでは、adminテーブルは使わない、会員(user)の管理を行う
機能はきっとこれぐらいあればきっと大丈夫・・・・〆(。。)

  • 会員一覧(新着)
  • 会員一覧(登録順)
  • 会員検索(簡易検索)
  • 会員検索(詳細検索)
  • 会員情報の詳細表示
  • 会員情報の修正
  • 会員情報の削除
  • 会員プロフィール情報の項目管理(登録、修正、削除)

スキン関連のフォルダ構成の変更

  • /theme/default/cssファイル
  • /theme/default/image/imageファイル
  • /theme/nekoget/cssファイル
  • /theme/nekoget/image/imageファイル

モジュール名/main.css の頭で、default/main.cssを読み込む。
モジュール名/main.cssはdefault/main.cssでたりない設定を追記していく
もしくはdefaultの設定を読み込まず、単独の設定を作るベースのCSSファイル
フォルダもしくはファイルで分けて、表示画面別のCSS、Controllerが制御するもの別のCSSファイルを個別に呼び出せるようにする。
この部分はControllerでの制御は避けて、View側で対応させたいな
・・・・〆(。。)備忘録的にメモ

  • View側の開発担当者とロジック(Controllerとかmodelとか)の開発担当者で、見るべき触るべきファイルを分けたい
  • 機能ごとをモジュールで分ける事で、分業を簡単に&設置、除去を簡単にする
  • CSSファイルを表示画面別に後から追記できるようにしておけば、急なデザイン変更にも対応しやすいし、単独のページでしか使わない設定を全ページで読み込ませる必要が無くなる
  • モジュール別のスキンテーマをさくさく変更できると嬉しい・・・デェフォルトとモジュール別のCSSの着脱や入れ替えを簡単にしたい

モジュールの中に、MyNETS2のバージョンとベースのCodeigniterのバージョン番号の情報をどこかに保存しておかないと、
モジュールだけを作ったり、設置したり、外したり、配ったりするのに困りそうだ。
どこかに情報を書き込んでおこう〆(。。)

続きはまた夜にでも勉強しつつやってみる予定。

〆(。。)トランザクション処理
http://codeigniter.jp/user_guide_ja/database/transactions.html

メモ

MyNETS2で、過去にCodeIgniterで作ったものを乱暴にモジュールにつっこんでみたり・・・

  • /system/mynets/modules/nekoget/config/database.phpでモジュール別にDBの設定ができるとのことだったけれども、残念ながらDBの情報を書き込んだだけでは動かなかった。
  • ControllerからViewの読み込みと表示は問題なし。

モジュールフォルダの中はCodeIgniterとほぼ同じ
なので、CodeIgniterがわかれば、普通にCodeIgniterでプログラムを組む感覚で作れる感じ。

スキンの情報が格納されるthemeの中もモジュールごとのフォルダに分かれている。
スキンテーマごとに分かれていてほしいので、こんな感じにしてみる。

  • /theme/
  • /theme/スキンテーマ名/default/css/CSSファイル
  • /theme/スキンテーマ名/default/image/CSSが利用する画像ファイル
  • /theme/スキンテーマ名/モジュール名/css/CSSファイル
  • /theme/スキンテーマ名/モジュール名/image/CSSが利用する画像ファイル

サイト管理用の管理機能もモジュール化について
同じサイト内でも使えるし、切り離して管理機能だけ他の場所に設置できるようにしたい。
adminモジュールを作ってその中でだけにしてしまうと、
簡単に追加したはずの機能の管理の切り離しや追加が面倒な事になってしまう。
管理用モジュールの一般機能モジュールへの依存はなしにしたいから、モジュールを置く場所自体も分けたい。

Viewファイルの共通パーツがControllerで使うテンプレートのパーツをすべて呼び出して、テンプレートに文字データとしてデータを渡すようになっているが、ここはController上ではなく、viewの役割にしたい。
表示の変更や、HTMLの構造を変更する際に、Controllerを調べないといけなくなるよりも、Viewファイル上で完結している方が、デザインや表示を変えるために改変を行う場合に,viewファイルだけを触って解決することができる。(デザイン変更の為にロジックは触りたくない)

眠くなってきたので、今日はここまで。

MyNETS2が面白い。

CodeIgnigter

kunitsujiさんよりCodeIgniterベースのNyNETS2の最新(?)のものをいただいたので、質問を投げさせていただきつつ中を拝見させていただきました。
kunitsujiさん、詳細な説明ありがとうございます!

モジュール化のために用意された構造がとてもすっきりしています。
おもしろそうなので試しに何か1機能作ってみようと思います。

第38回PHP勉強会に参加してきました

第38回PHP勉強会に参加してきました。
今回はZendFrameworkの話題の豊富な勉強会でした。

再起動直前のプレゼン前の某氏のデスクトップ画面

msakamoto-sf さんのプレゼンで印象的だった
IEでtarget=”_blank”で開いた画面にcookieが渡らないプラウザのバグの紹介。
cookieが渡らないという事はsessionも渡らないという事で、sessionで閲覧制限を制御している場合にはsessionエラー画面が表示されてしまう事態。
現象のデモと回避方法の情報等、この日聞いててよかったと後で絶対思うに違いないと思います。

shigeponの発表では発表前にプレゼンの内容を休憩時間に拝見させていただいたわけですが、自動再生のプレゼン資料です。「スタートしたら止まらないからやりなおしはなしなんですよ」というお話だった訳ですが、こんなにスムーズに話せるものなのか!と、プレゼン内容とは別な部分でも衝撃的でした。

TODO:rhacoの1系最新をもう一度頑張ってみる。
TODO:ZendFrameworkの勉強をする。
TODO:seleniumを試してみる 。

第38回PHP勉強会
http://events.php.gr.jp/events/show/66

海外からの発表をUstした話がすずき師匠のブログにUPされています。
本当にすごいなぁ。

関西オープンフォーラム2008にいってきました。

関西オープンフォーラム2008にいってきました。
去年どうしても行きたくて、行けなかった訳ですが、今回は念願叶い行く事ができました。

■設計勉強会
最初の方が切れてしまっててすみません(TAT)

■Piece Framework
音とか画質とか微妙になってしまってすみません(汗)


11/07 PHP関西勉強会に参加してきました。

11/07 PHP関西勉強会に参加してきました。
配信させていただいた動画をUPさせていただきました。

PHPUnitのこんな機能知ってる? (kunitさん)

CakePHPとか (shin1x1さん)

PHPScraping2008 (させざきさん)

11/07 PHP関西勉強会レポートリンク(発見した順に勝手リンクw)

11/5 第2回設計勉強会に参加してきました。

http://events.php.gr.jp/events/show/83
第2回設計勉強会に参加してきました。
動画をニコニコ動画にUPしました。

「クイズ研」開発上の設計判断とその結果(twk)

レイヤー切り分けてる?(ハタ)

結局Webのアーキテクチャーって?(kunit)

弊社サービスの場合の設計(id:shimooka)
編集中(4分割したのであと3本あります。)