2012年12月14日金曜日

ユーザー認証にチャレンジ

複数回になりそうです。

まずは公式ドキュメントを確認。
http://fuelphp.com/docs/packages/auth/simpleauth/intro.html

当然英語です。。。
かなり適当に和訳。あっているかも怪しいですw。


Introduction
SimpleAuthはその名のとおり認証パッケージに含まれているシンプルな認証システムです。Authの動作、実装のサンプルであり、他の認証ドライバのサンプルでもあり、独自ドライバを作成するときの参考資料とすることができます。
Auth setup
設定は SimpleAuth ドライバを使用することを Auth package に伝えることから始まります。これは auth.php コンフィグファイルで設定します。デフォルトのファイルは Auth package にあります。変更を加える前にあなたの app/config フォルダにこのファイルをコピーしてください。デフォルトで SimpleAuth package用に設定されている。コンフィグファイルについての説明は 後のconfigrationを参照してください。
セットアップ完了後、app/config/config.php always_load 部分でパッケージのオートロードを行うかを選択できます。
Configuration
SimpleAuth認証システムはコンフィギュレーションファイルを使用して構成されます。'simpleauth'コンフィギュレーションファイルに驚くところはありません。デフォルトのファイルは、 Auth package にあります。変更を加える前に、app / configフォルダにこのファイルをコピーしてください。
The following configration values can be defined:
次の設定値を定義することができます:
Param
Type
Default
Description
db_connection
string
null
使用するDB接続名称。db.php ファイルの定義と一致させる必要があります。デフォルトはnull
table_name
string
'users'
使用するユーザーテーブルの名称
table_columns
array
array('*')
配列でユーザーテーブルから選択、またはすべてのカラム。最低でも username, password, email, last_logoin, login_hash, group, profile_fieldsは指定する必要がある。
guest_login
boolean
true
true なら誰もログインしていない場合、ダミーゲストユーザを作成することによりグループ、acl driversの使用を許可します。
groups
array
array()
SimpleAuth groups driver によるグループの定義。グループの配列詳細については*ここを参照してください。
roles
array
array()
SimpleAuth groups driver による role 定義。roles の配列詳細については*ここを参照してください。
login_hash_salt
string
'put_some_salt_in_here'
SimpleAuth ドライバでパスワードを安全に作成するためのソルト値はパスワードのハッシュ値を計算し、データベースへの格納に使われます。デフォルトパスワードは PBKDF2 ですが、ランダムな文字列にデフォルトを変更してください。
username_post_key
string
'username'
ログインフォームの username インプットフィールドの名称を指定します。
password_post_key
string
'password'
ログインフォームの password インプットフィールドの名称を指定します。

Database table
SimpleAuth はひとつのテーブルを使用します。作成にはこの SQL を使用してください。

CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
`group` int(11) NOT NULL DEFAULT '1',
`email` varchar(255) NOT NULL,
`last_login` varchar(25) NOT NULL,
`login_hash` varchar(255) NOT NULL,
`profile_fields` text NOT NULL,
`created` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `useranem` (`username`, `email`)
)

Example
サンプルのログインアクション
public function action_login()
{
$data = array();

//送信ボタンを押したら
if (Input::post())
{
$auth = Auth::instance();
if($auth->login())
{
Response::redirect('success_page');
}
else
{
//Oops
$data['username'] = Input::post('username');
$data['login_error'] = 'Wrong username/password combo. Try again';
}
}

//Show the login form
echo View::forge('auth/login',$data);

}

次は訳文のとおりSQLでテーブルを作成してみることにします。
当然、前回妄想したusersテーブルとはテーブル設計が異なりますw。
>続く

2012年12月13日木曜日

作業工程を妄想する

前回投稿で一応DBのテーブルの骨子は考えたので、
今度は全体の工程を考えて(妄想)しておく。


機能面を中心に時系列でならべてみよう

  1. ユーザ認証機能をつける
  2. コメント機能をつける
  3. 予約状況の更新機能をつける
  4. 進捗管理用のビューをもうける。全体の進捗を俯瞰できるといいな。
こんな方針でいってみようと思う。
1と2についてはサンプルも見つけられると思うのでどうにかなりそう。
3はちょっと難しそうなので最後に。
予約状況の元となるreservationsテーブルに放り込むデータはcsvにする予定。
csvから放り込む部分もできれば半自動化したいと考えている。
csvデータをreservationsテーブルに放り込む部分と、reservationsテーブルのデータをarrivalsデータに統合する部分が今のところよくわからない。正直全体的によくわからないんだけど、特にわからないってことでw。

年末も近くなって作業時間の捻出も課題だ。
睡眠時間を削っての作業が基本だが、今は冬真っ盛りで寒い寒い。
防寒対策も講じねば。

>続く。

DB設計を考える

自身のスキルを考えたらDBや仕様はできるだけ簡単するというのが一つの解だとは思いながらも、つまずくポイントでしっかりつまずいていきたいという思いもあるため最初からゴールを意識して作成していくことにしてみる。 あまりにも遠回りになりそうならその時考えることにしよう。

まずはテーブルを思いつく限り。

  • users - 認証とセッション管理に使うつもり
  • arrivals - 顧客データに当たる部分。素直に顧客データとしないのは顧客に対する到来イベントを処理の中心に置きたいから。普通なら顧客テーブルに到来イベントテーブルをぶら下げるべきだけど、到来イベントをまとめたデータ群を定期的に作成してarrivalsに放り込んでいく。 あまりサンプルがみつからないアプローチの仕方なのでこの先つまずく原因になりそうな仕様だ。
  • comments - 顧客とのやりとりを記録していくテーブル。このシステムでの基幹となる部分かな。ここに残したコメントを複数人で共有できるようにするのが主目的
  • reservations - 予約情報をシステム外部から取り込んで放り込んでおくテーブル
妄想では、
arrivalsのデータに対してセールスアプローチを行い、アプローチのログをcommentsテーブルに記録していく。reservationsには定期的に結果を取り込みarrivalsに結果情報を補足する。
コメントを作成する機能のほか、外部情報をテーブルに反映させていく機能が必要だ。
顧客情報を扱うので当然認証機能はつけたい。
とはいえ、イントラ内での使用を前提としているので簡易認証でも構わないと思ってる。

ER図にするにはまだ妄想が足らない気がするので落書きから。
ああ、そうそう顧客の予約管理システムにしたいってのどっかに書いたっけか。

users

  1. id
  2. nameKana
  3. nameKanji
arrivals
  1. id
  2. 目的コード
  3. date
  4. address
  5. phone
  6. mobile
  7. stage
  8. reservation_id
comments
  1. id
  2. user_id
  3. arrivals_id
  4. date
  5. time
  6. text
  7. status

reservations
  1. id
  2. arrivals_id
  3. date
  4. staff
テーブルは4つくらいか。テーブル間をMySQL上で結ぶ必要はないはず。テーブル間の結びつけはFuelがやってくれる。。。はず。 そうだよね??

すこしやりたいことがはっきりしてきました?
目的コードは英語表現ではなんて書けば良いかなぁ。ちょっとweblioで調べておくか。
むぅ。なんとなくここにテーブル間の従属関係を考えればbakeでパパッといけるような気がするけどここはFuelPHPで頑張ってみることにしよう。

従属関係はアンダースコアで書いてみた。アンダースコアのついている項目は
他テーブルの主キーにするつもりです。
CakePHPと並行して学習中なので記法なんかがゴッチャになってますw。

作業の進み具合を分かり易くするために目次をつけてみることにする。


>>続く

2012年11月26日月曜日

FuelPHPのコーディング規約

なんだかできる奴っぽいタイトルがかえってかっこ悪いんですが、
コード書式を覚えられないのでメモ書き。



  • タブインデントが標準。
  • ファイル名はすべて小文字
  • エンコードはUTF-8 bomなし
  • クラス名は単語をアンダースコアで区切る。各単語は大文字はじまり
  • メソッドも単語をアンダースコアで区切る。各単語はすべて小文字
  • ループ用の変数は一文字がいい
  • 変数の初期化は1行につき一つ
  • 定数はすべて大文字。単語の区切りはアンダースコア
  • true, false, null, asなどのキーワードはすべて小文字
  • クラスではブレースは次の行から
  • クラスが空の場合は同一行に
  • カッコとブラケットの前後にはスペースを入れない
  • クォートはなるべくシングルクォート
  • 文字列の連結はパーツの間にスペースを入れない
なかなか開発に入れません。
いつになったら始まるんでしょう。

続く。

環境構築とインストール

作業環境

OS - Windows7HomePremium
サーバ - XAMPPによるローカル環境 XAMPP1.7.7をとりあえず使用。
データベースはXAMPPに含まれるMySQLです。

その他
エディタはIDEのEclipse 3.7 indigo使ってます。多少慣れてきたのでこのまま使って行こうとおもいます。

インストール

手順等は上記書籍にしたがって進めてみました。
インストール手順に限らない話ですが、上記の書籍に詳しい手順が載っているのでこれからFuelPHPを触ってみようという方にはオススメだと思います。。。

XAMPPをインストール

XAMPPはcakePHPをちょろっと触ってみたときにインストールした1.7.7です。
最新版は1.8.1みたいですね。 
ダウンロードは apache friends のサイトからどうぞ。 http://www.apachefriends.org/jp/xampp-windows.html

FuelPHPをインストール

最新版は1.4ですが、インストール自体は実はちょっと前にすませていた1.2.1で進めて行くつもりです。最新版へのアップデートもそのうちやりたいと思います。

Eclipseにプロジェクトを作成

こんな順序でインストール作業を進めていきます。
プロジェクト名はベタにfuelとしました。

ちょっと一区切りで次回へ。




2012年11月25日日曜日

ゴールの設定

FuelPHPを使用して顧客管理システムを作ってみるテスト。
ちなみにwebアプリやPHPフレームワークについてはまったくの初心者っていうより
プログラミングなどVBAでかじった程度。

挫折しないでゴールまでたどり着けるか?
まぁやれるところまでやってみようと思います。


どんなものを作りたいのか今一度、頭の中を整理してみよう。
  • 顧客管理を複数人で行いたい。
  • 外部公開しないとはいえ、個人情報を取り扱うのでユーザー認証はつけたい。
  • 集計結果などをみやすくして管理を楽にしたい
とりあえず、パパッと思いつくのはこんなところか。
複数人作業についてはFuelPHPで顧客管理システムが完成すればほぼ問題なくなるはずなので無視しても良い項目ですね。 動機に近い。
今回は同一LAN内で使うことができればよいなぁと思っているので、インターネット経由でのアクセスは考えていません。

ユーザー認証はセキュリティ的につけておきたい機能です。

最後はせっかくデータが集まっているのだから集計して役立てたいという思いから。 業務も楽になることでしょう。

しかし、なんといっても全てにおいてわからない事だらけ。
調べながら、試しながらとなるため長い道のりになりそうです。