データベースを使う その6 マイグレーション

oilコマンドでデータベースをいろいろと変更してみましょう。

これらのコマンドはfuel/migrationsディレクトリにマイグレーションファイルを生成します。

マイグレーションファイルを実際にデータベースに反映させるにはoil r migrateを実行します。

マイグレーションによる変更はデータベースに対してのみ有効です。oil g modelで生成したコードのテーブルやフィールドには反映されません。

 

テーブル作成

書式:

oil g migration create_テーブル名 フィールド [フィールド] ...

例:

$ oil generate migration create_users name:text email:string[50] password:string[125]

 

テーブル名変更

書式:

oil g migration rename_table_テーブル名_to_新しいテーブル名

例:

$ oil generate migration rename_table_users_to_accounts

 

フィールド追加

書式:

oil g migration add_フィールド名_to_テーブル名 フィールド

例:

$ oil generate migration add_bio_to_accounts bio:text

 

フィールド名変更

書式:

oil generate migration rename_field_フィールド名_to_新しいフィールド名_in_テーブル名

例:

$ oil generate migration rename_field_name_to_username_in_accounts

 

テーブル削除

書式:

oil generate migration drop_テーブル名

例:

$ oil generate migration drop_accounts

FuelPHP tips Uploadクラス

FuelPHPでのアップロードについて書きます。

 

FuelPHPにはUploadクラスというものがあり、簡単にアップロードについて処理を行う事が出来ます。

サンプルでも書いてみます。

まずViewから。up_viewという名前で。

よし。

次にコントローラー。uploadtestというクラスで。

「例」って書いてるところは今回のサンプルのための変数とかです。ファイルサイズ表示します。

見ての通り、普通のコントローラーの中でUploadクラスを呼び出してるだけです。
ファイルサイズや拡張子を指定して、ファイル保存して、ファイルがあるかどうかチェックして、ファイルサイズを取得する。っていうのをちょっと生のPHPで検索してみるといいですね。

簡単ですね。

大体はコメントアウトの説明で分かるかと思います。

 

configで設定しているところ(15行目)

・path:ファイルの保存場所。save()関数で保存します。

・auto_rename:名前が同じファイルがアップロードされた時、末尾に「_1」「_2」を追加するかの設定。

・ext_whitelist:許可する拡張子。

・max_size:最大ファイルサイズ(※最後の方にちょっと注意書きます)

そして、Upload::process()に引数として渡してあげると、デフォルトの設定を上書きして処理してくれます。
このconfigを毎回設定するのは面倒ですね。
なので、core/config/にupload.phpがあるので、それをapp/config/にコピーして、いろいろ中身を書き換えればそれがデフォルト設定となります。

 

Upload::is_valid() (26行目)

バリデーションなのかバリッドって読むのかスマイルスマイルヴェリィドゥって読むのか分かりませんが。
つまりはconfigで設定した条件に合うかどうかのチェックです。
trueかfalseが返ってきます。
例の条件で言うと、「virus.exe」とかだと拡張子が条件に合わないのでfalseが返ってきます。
(ちなみに、拡張子なし「sample」ってファイルとかでもfalseが返ってきましたね。)
あとは、1MBを越えるファイルでもfalseが返ってきます。

 

Upload::get_files() の部分(33行目)

このget_files()は、ファイルの情報を取得します。
foreachを使ってるいるのは、引数なしでget_files()を使うと、アップロードされた全てのファイルを配列にして返してくるからです。
(確実に1つ以上アップロードされている場合get_files(0)とか出来ちゃう。)
33行目では、関数から返ってくる値を$fileとして受け取っています。
$fileはアップロードされたファイルの各種情報を収めた連想配列です。

※型とかなんか間違ってたらごめんなさい。
左から連想ワード・型名・説明

$file[‘size’] とかでファイルサイズを取得できるわけです。

 

アップロードファイルのデータサイズ

configのmax_sizeでアップロードファイルの最大サイズを指定していますが。が。が!
ここで好きなように設定できるわけではありません。
若干面倒ですが、php.iniの設定もいじらないといけないです。
また別の機会にそれ書きます。→php.iniの設定はこちらです
例のコードはあくまで例なので・・・
ファイルの保存場所なんて、公開フォルダの直下ですよ。URL打ち込めば見れちゃいますよ

データベースを使う その4 CRUDモデル生成

oilコマンドでCRUDモデル(Create、Retrieve、Update、Deleteの機能を持ったModel_Crudクラス)のコードを自動生成してみます。

 

CRUDモデルはORMモデルほど強力ではありませんが、機能が絞られているぶん、簡単なアプリケーション手軽に作るのに向いています。

oilコマンドに--crudオプションを付ける以外は、ORMモデルと同じ方法で生成できます。ORMモデル生成の記事も参照してください。

 

ここでは、varchar[32]のnameカラムを持つuserテーブルを生成します(テーブルの命名には少し注意が必要です)。

$ oil g model user name:varchar[32] --crud

上記のコマンドを実行すると、fuel/app/classes/model/user.phpファイルが生成されます。

oilコマンドは$ oil createで作成したディレクトリで実行することに注意してください。

idはoilによって自動的に付加されます。

 

fuel/migrationsディレクトリにはusersテーブルをcreateする001_create_users.phpが生成されます。

ORMモデルと違って、CRUDモデルはオブザーバー機能を持たないため、テーブルにはcreate_atとupdate_atが付加されません。

 

モデルとマイグレーションを生成したら、データベースに反映させましょう。

$ oil r migrateを実行すると、データベースにテーブルが作成されます。

 

データベースを使う その3 ORMモデル生成

oilコマンドでORM(Object Relation Mapper)モデルのコードを自動生成してみます。

ORMはCRUD(Create、Retrieve、Update、DeleteといったSQL処理)だけでなく、データベーステーブルをオブジェクトにマップして、テーブル間のリレーションまでも面倒を見てくれる非常に強力なシステムです。

 

ここでは、varchar[32]のnameカラムを持つuserテーブルを生成します(テーブルの命名には少し注意が必要です)。

$ oil g model user name:varchar[32]

上記のコマンドを実行すると、fuel/app/classes/model/user.phpファイルが生成されます。

oilコマンドは$ oil createで作成したディレクトリで実行することに注意してください。

idはoilによって自動的に付加されます。

 

fuel/migrationsディレクトリにはusersテーブルをcreateする001_create_users.phpが生成されます。

 

モデルとマイグレーションを生成したら、データベースに反映させましょう。

$ oil r migrateを実行すると、データベースにテーブルが作成されます。

 

テーブルにはcreate_atとupdate_atの2つのフィールドが自動で付加されます。

oilコマンドのオプションでこれらのタイムスタンプを省略したりフィールド名を変更することができます。

FuelPHP tips データベースのcreated_at、updated_atが不要、または変更したい

マイグレーションで生成されるデータベースにはcreated_atフィールドとupdated_atフィールドが付加されます。これらが不要な場合は、–no-timestampオプションを設定します。
$ oil g model テーブル名 [フィールド1 [フィールド2] ...] --no-timestamp

–no-timestampオプションが設定されると、モデルのコードに$_observersが生成されません。

また、created_atやupdated_atのフィールド名を変更したい場合は、オプションで--created-at=フィールド名--updated-at=フィールド名を設定します。

FuelPHP tips マイグレーションしたテーブル名がなんか変

マイグレーションで作成されたテーブル名は自動的に’s’や’es’が付加されて複数形になります。このため、生成されたテーブルが意図しないテーブル名になってしまうことがあります。

 

また、mysqlではテーブル名に’_’を使用できますが、FuelPHPは’_’をディレクトリ区切りと解釈するので、<code>$ oil r migrate</code>が失敗します(PDOドライバではダメでした。mysqliドライバでは大丈夫なようです)。

そのうえ、テーブル名を’user_account’などとした場合、fuel/app/classes/model/userディレクトリにaccount.phpが生成され、クラス名がModel_Accountとなってしまいます。
テーブル名の命名には、末尾が’s’で終わらないようにする、’_’を使わない、などの注意が必要です。

チュートリアル css と javascript のリンク方法

前 チュートリアル モジュールとは

次 チュートリアル モードを切り替える

 

おはようございます。ゆうきんだぜぇ。ワイルド(ry

前回までで、大分FuelPHPの使い方に慣れたかと思います。

今回は近代のWebページでは必ずと言っていいほど用いられる css と javasript のリンク方法を説明します。

といっても簡単なので、すぐ終わります。

 

リンク方法

css は Asset::css(‘リンクしたいcss名’); を呼び出す。

javascript は Asset::js(‘リンクしたいjavascript名’); を呼び出す。

これだけです。

css は public/assets/css に、javascript は public/assets/js に配置します。

呼び出すファイルはビューになります。

必要ないとは思いますがサンプルをどうぞ。

sample.css と sample.js をリンクしてます。

そっちは css と javascript の記述に従って適当に用意してください。

ここに書くべきではないかも知れませんが、Asset::css などはFuelPHPの関数です。

phpで使えるならFuelPHPで用意されている関数だろうが、独自に作った関数だろうがビューで呼び出せるので、覚えておくとプログラミングの幅が広がるかもしれません。

 

では、おやすみなさい。

インストール (ダウンロード版)

こちらにて、oilコマンドによるFuelPHPのインストールができたと思います。

このページでは「oil create ~~~~」を使わないインストール方法を書きます。すぐ終わります。
あ、バージョンは1.4で。

 

1. まず、ファイルをダウンロードします。→http://fuelphp.com/

「download v○.○ now!」ってボタンでダウンロードです。

 

2. ダウンロードしたファイルを展開しましょう。

ユーザーは「test_user」だとして、「/home/test_user」にファイルを展開しましょう。

展開したディレクトリ名を「sample」とします。(お好みでどうぞ)

最終的なパスは「/home/test_user/sample」となるはず。

 

3. oil refine install ・・・

ここでパーミッション設定やら色々やってくれるoilコマンドがあるので使います。

これで終了。

成功すると緑文字で以下のメッセージが表示されます。

 

 

ね、すぐ終わったでしょ。

 

チュートリアル モジュールとは

前 チュートリアル ルーティング

次 チュートリアル css と javascript のリンク方法

 

おはようございます。さっそくネタが尽きたゆうきんです。

今回はモジュールについて説明します。

モジュールとは、「いくつかの部品的機能を集め、まとまりのある機能を持った部品のこと」だってwikipediaさんが言ってました。

FuelPHPでもこのモジュールを作る機能が用意されています。

FuelPHPでいうところのモジュールとは、MVCそれぞれのファイルをひとまとめにしたものです。

これでファイル数が増えて非常に見づらくなる問題も解決することができます。

 

モジュールの作成方法

まずは、 fuel/app/modules/ に任意の名前でフォルダを作ります。

今回は rasta という名前にします。

そして、 rasta の中に classes, config, lang, views とういフォルダを作り、さらに classes の中に controller, model, view というフォルダを作ります。

・・・・・・・・・図で表します。

最終的に、こんな階層になります。

もうお分かりでしょうが、この新しいフォルダの中にコントローラとモデルとビューを追加していくのです。

 

モジュールを使った時のURL

通常 コントローラ名/メソッド名 がURLになってましたが、モジュール内に作ったコントローラにアクセスしたい場合は、 モジュール名/コントローラ名/メソッド名となります。

私の環境で rasta というモジュールの、 sample というコントローラの test というメソッドにアクセスしたい場合、 http://localhost/fuelphp/rasta/sample/test という感じになります。

 

モジュール内のconfigファイル

モジュールを作ったとき、 config フォルダを作りました。

この中に config.php や routes.php を配置した場合、 fuel/app/config/ 内の設定項目とかぶりがあった場合、モジュール内の設定が優先されます。

つまり、モジュール内のファイルで404エラーが発生した時に、飛ばすページを通常と切り替えることが可能になったりします。

 

以上で、モジュールの説明は終わりです。

では、おやすみなさい。

チュートリアル ルーティング

前 チュートリアル RestコントローラとHybridコントローラ

次 チュートリアル モジュールとは

 

おはようございます。ゆう☆きんです。

今回はルーティングについて説明したいと思います。

FuelPHPでは fuel/app/config/routes.php を編集することでルーティング設定が行えます。

では、どのように編集すればいいのか見て行きましょう。

※ルーティングについての説明はURLを多用し、非常にめんどいので http://localhost/fuelphp ではなく http://example/ とします。

 

基本的なルーティング

この場合、 http://example/user/login ではなく http://example/login でアクセスできるようになります。

 

予約済みのルート

fuel/app/config/routes.php を見て下さい。

_root_ と _404_ が設定されていますが、これはFuelPHPであらかじめ定義されている特殊なルートです。

_root_ は http://example/ にアクセスしたときにルートです。

つまりサイトのトップページです。

_404_ は コントローラやメソッドがなかったときのルートです。つまり 404 Not Found 用のルートです。

 

正規表現によるルーティング

ルーティング設定では正規表現も使えます。正規表現の説明は省きます。

また正規表現以外にも、以下のようなものが使えます。

文字列 意味 実際の正規表現
:any URIの任意の部分にマッチ .+
:segment URIの1つのセグメントにマッチ [^/]*
:num 数字にマッチ [[:digit:]]+
:alpha 文字にマッチ [[:alpha:]]+
:alnum 文字と数字にマッチ [[:alnum:]]+

これだけ書くとちょっと意味わかんないんでサンプル。

この場合、 http://example/yugi/hitode で(1)にルーティングされます。

ルーティング処理は上から順に実行されます。

なので、 http://example/yugi/judai でも(2)ではなく(1)にルーティングされるので注意です。

http://example/haou/judai の場合は(2)に、 http;//example/123/yusei の場合は(3)にそれぞれルーティングされます。

 

ここからは高度なルーティングについて説明します。

名前付きパラメータ

名前付きパラメータとは、URIのセグメントに名前を付けるものです。

パラメータは : (コロン)を付けることで表せます。また、パラメータ名に数字を使うことができません。

というわけでサンプル。

例えば、 http://example/cal/1988/12/26 で(1)にルーティングされます。

この際、コントローラでは $this->param(‘year’); $this->param(‘month’); $this->param(‘day’); を使って各パラメータの数値を取得できます。

http://example/cal/2013 の場合は(4)になり、 $this->param(‘year’); のみ使用可能になるという感じです。

ここで注意ですが、セグメントの多い順から設定しないと http://example/2013/01/18 で cal/year にマッチしてしまう場合があるので、注意してください。

あ、ちなみに最初の日付は私の誕生日です。祝ってくれてもいいんですよ?

 

HTTPメソッドの使用

サンプル。

http://example/sample/abc にGETでアクセスすれば http://example/data/get/abc にルーティングされ、

http://example/sample/abc にPOSTでアクセスすれば http://example/data/post/abc にルーティングされます。

つまりそういうことです。

名前付きルート

サンプル。

この場合、 http://example/yukin/index にアクセスすると http://example/yukin/index にルートされます。

そして、そのルートに対して yukin という名前を付けていることになります。

これで何が出来るかというと、 Router::get(‘ルート名’); でURLを生成できるようになるので、下記のようなことが可能です。

Html::anchor とはリンクを生成するメソッドです。

第1引数でURLを指定し、第2引数でリンク名を指定します。

この場合、 Router::get(‘yukin’) で生成したURLを渡してるわけです。

このようにすることが可能ですので、例えば rasta/yukin から rasta/member/yukin にしたいなぁとなったとき、

ルーティング設定だけ更新すればいいので、ビューを弄る必要がありません。

同じURLを複数のビューでリンクするとき、複数のビューを直す手間が省けます。

名前付きルートを使用するときの注意ですが、正規表現や名前付きパラメータが使用出来ません。※現在 FuelPHP 1.2

 

以上でルーティング設定の説明を終わります。

コントローラ名/メソッド名で生成されるURLだけでは限界があるので、是非活用して下さい。

では、おやすみなさい。

ページのトップへ