2013年1月10日木曜日

sessionをcookieからDBに変更

前の投稿と同じ手順でoil generateを行い、
項目を大幅に増やしたら怒られました。

 Fatal error: Uncaught exception 'Fuel\Core\FuelException' with message 'The session data stored by the application in the cookie exceeds 4Kb. Select a different session storage driver.' in C:\Users\ユーザー名\works\fuel_practice\fuel\core\classes\session\driver.php on line 464

4KBを超えたらダメみたいです。
sessionをcookieじゃなくてDBに保存する方法があるようなのでテスト。
いちいち躓いてますね。

参考にさせてもらったのは
S4Uさんのlこちらのページ

手順はわずか2Step


  1. session用のconfigを書き換える
    1. fuel>core>config>session.phpをコピーしてfuel>app>config>以下に貼り付け
    2. 33行目付近の'driver' => 'cookie'を 'driver' => 'db'に書き換え
  2. oil r sessionでテーブルを作成する
    1. oil r session:create


動作確認して完了。
スゲー。

2013年1月9日水曜日

oilでコード生成して様子を見る

どうもModelがらみの理解が出来ていないようなので、
サンプルを見てみることにしました。

サンプルはoilでジェネレートしたModelをのぞいてみることにする。


環境

  • Windows7 homepremium
  • xampp1.7.7
  • fuelphp1.4


oilはコマンドプロンプトcmd.exeから使用します。

管理者権限でcmd.exeを起動します。

起動後にoilまでのパスを通す。

phpまでのパス
c:\直下にxamppをインストールしている人ならパスは
c:\xampp\php になっていると思います。


C:\Users\ユーザー名>cd c:\xampp\php

C:\xampp\php>set path=%path%:%cd%


続けて、oilまでのパスを通します。
自分の環境ではWindowsのUsersフォルダに設けたworksのなかにfuel_practiceというフォルダがあるのでパスは以下のようになります。
c:\Users\ユーザー名\works\fuel_practice
コマンドプロンプトでパスを通す。

C:\xampp\php>cd c:\Users\ユーザー名\works\fuel_practice
C:\Users\ユーザー名\works\fuel_practice>set path=%path%:%cd%

これで準備完了。
それでは、さっそくoilでgenerateしてみよう。

ちなみに、やっていることのほとんどは
WinRoad徒然草さんのサイトに詳しく載っています。ほんとお世話になってます。

さてoilに関してのドキュメントにざっと目を通して。。。
http://fuelphp.jp/docs/1.4/packages/oil/generate.html
。。。うう、このへんから辛いですね。
生成されたModelを覗いてみたいということで、
Using Model_CRUD か Scaffolding ですよね??^^;
とりあえず全体を把握してみてみたいと思うので今回はScaffoldingでいってみよう。


C:\Users\ユーザー名\works\fuel_practice>php oil generate

で説明文。
Examples:には
php oil generate controller <controllername> [<action1> |<action2> |..]
php oil g model <modelname> [<fieldname1>:<type1> |<fieldname2>:<type2> |...]
php oil migration <migrationname> [<fieldname1>:<type1> |<fieldname2>:<type2>|...]
php oil g scaffold <modelname> [<fieldname1>:<type1> |<fieldname2>:<type2> |...]
php oil g scaffold/tmplate_subfolder <modelname> [<fieldname1>:<type1> |<fieldname2>:<type2> |...]
php oil g config <filename> [<key1>:<value1> |<key2>:<value2> |...]
と表示されました。


構文は
php oil g scaffold アプリケーションの名前 項目1:データタイプ 項目2:データタイプ ...
となっているようですね。
自分はwindows + コマンドプロンプトからなので先ほどパスを通したphpから実行するため
頭にphpをつけてます。

項目1,項目2がxampp上のMySQLテーブルのカラム名を兼ねていて、きっちり決めておけば後で手を入れるのを大幅に減らすことが出来そう。
ここでは、ドキュメントのサンプルのように2項目で作成してみます。

コマンドプロンプトからえいやっと。

C:\Users\ユーザー名\works\fuel_practice>php oil g scaffold sample3 title:string content:text

ばばばっと一気にファイルが作成されます。うーむ気持ちいい。
Creating migration: C:\Users\ユーザー名\works\fuel_practice\fuel\app\migrations/001_create_sample3s.php

Creating model: C:\Users\ユーザー名\works\fuel_practice\fuel\app\classes/model/sample3.php
Creating controller: C:\Users\ユーザー名\works\fuel_practice\fuel\app\classes/controller/sample3.php
Creating view: C:\Users\ユーザー名\works\fuel_practice\fuel\app\views/sample3/index.php
Creating view: C:\Users\ユーザー名\works\fuel_practice\fuel\app\views/sample3/view.php
Creating view: C:\Users\ユーザー名\works\fuel_practice\fuel\app\views/sample3/create.php
Creating view: C:\Users\ユーザー名\works\fuel_practice\fuel\app\views/sample3/edit.php
Creating view: C:\Users\ユーザー名\works\fuel_practice\fuel\app\views/sample3/_form.php
Creating view: C:\Users\ユーザー名\works\fuel_practice\fuel\app\views/template.php

もう一息。続けて

C:\Users\ユーザー名\works\fuel_practice>php oil refine migrate

これでテーブルが作成されたはず。 phpmyadminなどで確認してみましょ。 うむ。たしかに表示されてます。 さっそくアクセスすると。。。 普通に使えてます。すげ。 ちょっと長くなったので今回はここまで。 作成されたModelを読み解くのを次回にしようと思います。お疲れ様でした。

2013年1月4日金曜日

あけましておめでとうございます。

結局、成果物のないまま2013年を迎えることとなってしまいました。
今年こそ早めに成果物をだしたいと思います。

新年を迎えてgitを取り入れることにしました。
でも、まだ恥ずかしいのと作法がよくわからないので
bitbucketにプライベートリポジトリを作成してます。
それと、xamppとfuelPHP両方バージョンアップしてみましたよ。
データベース接続に少し手間取りましたが、どうにか1.4への移行も完了。
xamppは最新版の1.8.1にしたかったのですが、
どうしてもうまくいかなくて暫定的に1.7.7です。もともと1.7.2だったのであまり変わってません。。。

こんなに感覚的な理解で良いのか?という感じで進めていますが大丈夫でしょうか(^^;)

ユーザ認証の記事に検索で飛んできている人が多いので、
このあたりを自分の経験として投稿していく予定です。
未熟者が躓くポイントを生暖かく見守ってくれるとうれしいです。

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などのキーワードはすべて小文字
  • クラスではブレースは次の行から
  • クラスが空の場合は同一行に
  • カッコとブラケットの前後にはスペースを入れない
  • クォートはなるべくシングルクォート
  • 文字列の連結はパーツの間にスペースを入れない
なかなか開発に入れません。
いつになったら始まるんでしょう。

続く。