プログラミング
チュートリアル モードを切り替える
前 チュートリアル css と javascript のリンク方法
おはようございます。北斗神拳伝承者ゆうきんです。
今回はモードの切り替え方について説明します。
モードとはつまりデバッグモードだったり、リリースモードだったりです。
では、見て行きましょう。
定義済み環境
- 製品環境 Fuel::PRODUCTION
- 開発環境 Fuel::DEVELOPMENT
- テスト環境 Fuel::TEST
- ステージング環境 Fuel::STAGE
の、4種類が存在します。
それぞれに切り替える方法は次の項目を読んで下さい。
モードを切り替える
FuelPHPでは public/.htaccess で、 production を宣言すると開発環境になります。
宣言の仕方は、
1 |
SetEnv FUEL_ENV production |
という感じです。
特に弄った記憶がなければ、2行目でコメントアウトされているはずなので、外してあげるだけでいいです。
それ以外にも、 development, test, stage を宣言することが出来ます。
それぞれのモードは読んで字の如くなので、特に説明する必要はないかと思われます。
また、何も宣言しなければ自動で development が適用される仕様です。
他にも fuel/app/bootstrap.php を編集することで、モードの切り替えが行えます。
1 2 3 4 5 6 7 8 9 |
/** * Your environment. Can be set to any of the following: * * Fuel::DEVELOPMENT * Fuel::TEST * Fuel::STAGE * Fuel::PRODUCTION */ Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::DEVELOPMENT); |
この部分の Fuel::DEVELOPMENT を Fuel::TEST or Fuel::STAGE or Fuel::PRODUCTION のいずれかに適用したいモードによって切り替えて下さい。
※ public/.htaccess を編集する方法でモードを指定している場合は。そちらが優先されます。
モードによって処理を切り替える
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public function action_modecheck() { if( Fuel::$env == Fuel::PRODUCTION ) { return '製品環境'; } else if( Fuel::$env == Fuel::DEVELOPMENT ) { return '開発環境'; } else if( Fuel::$env == Fuel::TEST ) { return 'テスト環境'; } else if( Fuel::$env == Fuel::STAGE ) { return 'ステージング環境'; } else { return 'いったい何を宣言したんですか!'; } } |
これが全てです。
特に説明することはありません。
では、おやすみなさい。
データベースを使う その2 フィールド型
データベースを使うにはoilコマンドのマイグレーション機能とモデル生成機能を利用します。
oilコマンドで使用できるフィールド型は以下のとおりです。
フィールドの書式はフィールド名:フィールド型
です。
string[n]
varchar[n]
int[n]
enum[value1, value2]
decimal[n n]
float[n n]
text
blob
datetime
date
timestamp
time
データベースを使う その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という名前で。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" > <title>sample_upload</title> </head> <body> <form action="upload" method="post" enctype="multipart/form-data"> ファイル:<input type="file" name="upfile" id="upfile"/> <input type="submit" value="アップロード" /> <?php echo $file_size; ?> </form> </body> </html> |
よし。
次にコントローラー。uploadtestというクラスで。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<?php class Controller_Uploadtest extends Controller { public function action_index() { //省略 /*ここでアップロードページを表示してあげるといいかも*/ return View::forge('up_view',array('file_size'=>0)); } public function action_upload() { //Uploadクラスの設定 $config=array( 'path'=>DOCROOT.'/file', 'auto_rename'=>true, 'ext_whitelist'=>array('jpg','jpeg','gif','png'), 'max_size'=>1024*1024*2, ); //上記の設定で$_FILEの情報を取得 Upload::process($config); //検証がOKなら処理に入る if(Upload::is_valid()){ //上記の設定でアップロードされたファイルを「path」で指定した場所に保存します。 Upload::save(); $data = 0;//例のための変数 //アップロードされたファイルの各種情報を取得します。 foreach (Upload::get_files() as $file){ /*ここにいろいろ処理を書く*/ //例:アップロードされたファイルの合計ファイルサイズを表示する。 $data = $data + $file['size']; } //例の続き return View::forge('up_view',array('file_size'=>$data)); } } } |
「例」って書いてるところは今回のサンプルのための変数とかです。ファイルサイズ表示します。
見ての通り、普通のコントローラーの中で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はアップロードされたファイルの各種情報を収めた連想配列です。
1 2 3 4 5 6 7 8 9 10 11 12 |
name {string} ファイル名(拡張子あり) type {string} FILE_TYPE error {boolean} エラーの有無 size {int} ファイルサイズ field {string} アップロードファイルのフィールド名 file {string} 保存されているパス errors {array} エラーの配列 extension {string} 拡張子 filename {string} ファイル名(拡張子なし) mimetype {string} MIME_TYPE saved_to {string} save()メソッドの保存先パス saved_as {string} save()メソッドの保存ファイル名 |
※型とかなんか間違ってたらごめんなさい。
左から連想ワード・型名・説明
$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
で作成したディレクトリで実行することに注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php class Model_User extends Model_Crud { protected static $_properties = array( 'id', 'name' ); protected static $_table_name = 'users'; } |
idはoilによって自動的に付加されます。
fuel/migrationsディレクトリにはusersテーブルをcreateする001_create_users.phpが生成されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php namespace FuelMigrations; class Create_users { public function up() { DBUtil::create_table('users', array( 'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true), 'name' => array('constraint' => 32, 'type' => 'varchar'), ), array('id')); } public function down() { DBUtil::drop_table('users'); } } |
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
で作成したディレクトリで実行することに注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php class Model_User extends OrmModel { protected static $_properties = array( 'id', 'name' ); protected static $_observers = array( 'OrmObserver_CreatedAt' => array( 'events' => array('before_insert'), 'mysql_timestamp' => false, ), 'OrmObserver_UpdatedAt' => array( 'events' => array('before_save'), 'mysql_timestamp' => false, ), ); } |
idはoilによって自動的に付加されます。
fuel/migrationsディレクトリにはusersテーブルをcreateする001_create_users.phpが生成されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php namespace FuelMigrations; class Create_users { public function up() { DBUtil::create_table('users', array( 'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true), 'name' => array('constraint' => 32, 'type' => 'varchar'), 'created_at' => array('constraint' => 11, 'type' => 'int'), 'updated_at' => array('constraint' => 11, 'type' => 'int'), ), array('id')); } public function down() { DBUtil::drop_table('users'); } } |
モデルとマイグレーションを生成したら、データベースに反映させましょう。
$ 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 に配置します。
呼び出すファイルはビューになります。
必要ないとは思いますがサンプルをどうぞ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <?php echo Asset::css('sample.css'); ?> <?php echo Asset::js('sample.js'); ?> <title>リンク</title> </head> <body> <p>リンクって聞くとゼ○ダの伝説しか出てこない</p> </body> </html> |
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コマンドがあるので使います。
1 2 |
$cd /home/test_user/sample $php oil refine install |
これで終了。
成功すると緑文字で以下のメッセージが表示されます。
1 2 3 4 |
Made writable: /home/test_user/sample/fuel/app/cache Made writable: /home/test_user/sample/fuel/app/logs Made writable: /home/test_user/sample/fuel/app/tmp Made writable: /home/test_user/sample/fuel/app/config |
ね、すぐ終わったでしょ。