oil エラー”This is not a valid Fuel installation so Oil is a bit lost.”
$ curl get.fuelphp.com/oil | sh
でFuelPHPを自動インストールして、その後oilコマンドを実行しようとすると、
This is not a valid Fuel installation so Oil is a bit lost.
とエラーを吐いて実行できないことがあります。
/usr/bin/oilをcatしてみると、./oilが存在するとき$ php oil
を実行し、./oilが無く且つcreate以外なら常に上記のエラーを表示して終了するようになっています。
つまり、/usr/bin/oilは、
$ php oil
とやらずに$ oil
で実行できるようにするラッパ- これ自体はcreateしかできない
よく考えれば判ることなんですが、自動インストールとは$ oil create
を実行することであり、/usr/bin/oilはインストーラのインストーラみたいな物なんですね。
ということで、まずはとにかく$ oil create dir
を実行して、その後oilコマンドを実行するときはcreateしたディレクトリで行いましょう。
データベースを使う その1 設定
FuelPHPのデータベースのマイグレーションやORM(オブジェクト連携モデル)機能を使うには、データベース設定ファイルの編集が必要です。
設定ファイルは、共通の設定を実行環境ごとの設定で部分的に上書きする形式になっています。
ここでは、PDOドライバを使う設定の例を示します。
共通の設定はfuel/app/config/db.phpに記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
return array( 'default' => array( # PDOを使う 'type' => 'pdo', # 接続設定 詳細は実行環境毎のファイルに書きます 'connection' => array( # 接続を持続しない 'persistent' => false, ), # デリミタのクォート記号 'identifier' => '`', # テーブル名のプレフィクスは無し 'table_prefix' => '', # 文字コードはUTF8 'charset' => 'utf8', # キャッシュを使う 'enable_cache' => true, # プロファイルしない 'profiling' => false, ), ); |
接続の詳細を実行環境ごとのファイルに記述することで、コードを書き換えることなく開発用と公開用のデータベースサーバを切り替えて使用することができます。 開発用の設定ファイルはfuel/app/config/development/db.php、公開用の設定ファイルはfuel/app/config/production/db.phpです。
1 2 3 4 5 6 7 8 9 10 11 |
return array( 'default' => array( 'connection' => array( # localhost上のmysqlに作成したfuel_dbデータベースを使う場合 # より安全にするため、dsnにもcharsetを設定する 'dsn' => 'mysql:host=localhost;port=3306;dbname=fuel_db;charset=utf8', 'username' => 'ユーザ名', 'password' => 'パスワード', ), ), ); |
開発用と公開用のほか、テスト用、ステージング用の環境を使うことができます。
設定ファイルはそれぞれfuel/app/config/test/db.php、fuel/app/config/staging/db.phpです。
データベースのモデルではORMパッケージを使うので、fuel/app/config/config.phpのalways_loadにORMの読み込みを追加します。
1 2 3 4 5 6 |
'always_load' => array( 'packages' => array( 'orm', 'parser' ) ), |
追補 mysqliドライバを使う例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
return array( 'default' => array( # mysqliを使います 'type' => 'mysqli', # 接続設定 詳細は実行環境毎のファイルに書きます 'connection' => array( # 接続を持続しない 'persistent' => false, ), # デリミタのクォート記号 'identifier' => '`', # テーブル名のプレフィクスは無し 'table_prefix' => '', # 文字コードはUTF8 'charset' => 'utf8', # キャッシュを使う 'enable_cache' => true, # プロファイルしない 'profiling' => false, ), ); |
1 2 3 4 5 6 7 8 9 10 11 12 |
return array( 'default' => array( # localhost上のmysqlに作成したデータベースfuel_dbを使う場合 'connection' => array( 'hostname' => 'localhost', 'port' => '3306', 'database' => 'fuel_db', 'username' => 'ユーザ名', 'password' => 'パスワード', ), ), ); |
UbuntuでのVMware Workstation再設定
カーネルアップデートなどの後、VMware関連モジュールのリビルドを行うコマンド。
1 |
$ sudo vmware-modconfig --console --install-all |
Ubuntu12.04.1 VMware8.0.4
チュートリアル RestコントローラとHybridコントローラ
おはようございます。かつてゆうきんと呼ばれていたものです。
今回は、規約その2 コントローラ編で規約だけ説明したRestコントローラとHybridコントローラの説明をします。
Restコントローラについて
以前書きましたが、RestコントローラとはHTTPメソッドをサポートするものです。
主に POST や GET ですね。
習うより慣れろということで、さっそくサンプルをドン。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php class Controller_Input extends Controller_Rest { public function get_data() { $this->response( array( 'name' => 'yukin', 'age' => 24 ) ); } } |
GETメソッドだけ存在するRestコントローラサンプルです。
http://localhost/fuelphp/input/data.json にアクセスすると私の個人情報が漏洩します。ヤダ怖い。
通常のGETメソッドと同じ用に値を渡す事もできます。
例えば http://localhost/fuelphp/input/data.json?name=yukin&age=24 という具合です。
これに対応するRestコントローラは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php class Controller_Input extends Controller_Rest { public function get_data() { $this->response( array( 'name' => Input::get('name'), 'age' => Input::get('age') ) ); } } |
アクセスした時の見た目は変わりませんが、渡された値を返すようになっています。
先ほどのURLの yukin と 24 の部分をいじってアクセスしてみて下さい。実感できるかと思います。
Restコントローラ単体ではページの表示には向きません。
主にWebサービスを作成する場合に用いることになるでしょう。
Hybridコントローラについて
PHPは多重継承が許されていません。
では、RestコントローラとTemplateコントローラを同時に使いたい場合はどうするのでしょうか?
それを解決してくれるのが、Hybridコントローラです。
RestコントローラとTemplateコントローラの特性を同時に持たせたい場合はHybridコントローラを継承するのです。
ファイルを分割することでも解決可能ですが、それだとURLもわかれてしまい、ユーザにわかりにくくなってしまう場合があります。
例えばログインページを作成するときなどはHybridコントローラを使うことになるかと思います。
anction_index で入力画面を表示 post_login でポストされたデータをチェックし、正しければログイン処理を実行する、などです。
覚えておくと非常に便利なものなので、有効活用して下さい。
では、おやすみなさい。
チュートリアル Templateコントローラ
次 チュートリアル RestコントローラとHybridコントローラ
おはようございます。ゆうきんのようなものです。
前回、HelloWorldを作って基本的なページの作り方を覚えました。
しかし、まだまだ安心してはいけません。ここからが本当の地獄だ・・・。
今回はTemplateコントローラについて説明します。
Webサイトって左に表示されるメニューとか、上部に表示されてるタイトルとか、ページを遷移しても変わらないページがありますよね?
その変わらない部分と変わる部分を切り離し、ビューとして作成し管理するのがTemplateコントローラです。
他の使い方もありますが、私は主にこの方法で使用します。
違う使い方でも覚えることは一緒なので安心して下さい。
まずはTemplateコントローラの規約をまとめます。
Templateコントローラの規約
- Controller_Templateクラスを継承する
- デフォルトレイアウトファイル(テンプレートファイル)は fuel/app/views/template.php である
- $this->template にテンプレートファイルのビューオブジェクトが自動的に代入される
- アクションメソッドでは自動的にビューオブジェクトが返される
- デフォルトテンプレートを使いたくなければ $this->template に違うビューを入れれば良い
- beforeメソッドを使う場合は必ずparent::before() を呼び出す
以上です。新しい単語とかいろいろ出てきてなんのこっちゃと思うでしょうが、きちんと説明します。
デフォルトレイアウトファイル(テンプレートファイル)とは、表示したいビューをはめ込んでいくビューです。
なんか意味わかんないですね。多分見たほうが早いです。というわけでほい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title><?php echo $title ?></title> </head> <body> <div id="header"> <?php echo $header ?> </div> <div id="content"> <?php echo $content ?> </div> <div id="footer"> <?php echo $footer ?> </div> </body> </html> |
これがテンプレートファイルです。これは簡単なものです。もちろん作りたいページによって変化します。
あ、でも簡単なものでも難しいものでも、規約通り template.php という名前で fuel/app/views に配置してくださいね。
そこに配置したものがデフォルトレイアウトファイルとして認識されますから。
そして、テンプレートコントローラの $title, $header, $content, $footer にコントローラで生成したビューオブジェクトや、文字列をはめ込んで、表示したいページを作っていくわけです。
というわけでTemplateコントローラのサンプルも載せます。
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 44 |
<?php /** * サンプルクラス */ class Controller_Sample extends Controller_Template { /** * アクションメソッドを実行する前に処理される */ public function before() { // 必ず親クラスのbefore()メソッドを実行する parent::before(); // header と footer を指定 $this->template->header = View::forge('header'); $this->template->footer = View::forge('footer'); } /** * 挨拶1 */ public function action_hello1() { // ビューファイル全体に$titleをセットする $this->template->set_global('title', '挨拶1'); // コンテンツを生成しはめ込む $this->template->content = View::forge('hellos/hello1'); } /** * 挨拶2 */ public function action_hello2() { // ビューファイル全体に$titleをセットする $this->template->set_global('title', '挨拶2'); // コンテンツを生成しはめ込む $this->template->content = View::forge('hellos/hello2'); } } |
このファイルはコントローラなので、fuel/classes/controller に配置します。
$this->template とはさっき作ったテンプレートファイルのビューオブジェクトです。
指定も生成もしてないじゃんと思うかもしれませんが、規約でも少し触れたように、デフォルトレイアウトファイルは自動で読み込まれるので、特に意識しなくても大丈夫です。
むしろきちんとデフォルトレイアウトファイルを用意しないと面倒くさいので、きちんと用意するのをオススメします。
注意事項ですが、規約にもあるとおり、Templateコントローラで beforeメソッドを使用する場合、必ず parent::before() を呼び出して下さい。でないと、エラーが出ます。
お気づきでしょうが、$this->template->header がテンプレートファイルで用意した $header です。
$this->template->header = View::forge(‘header’) というようにテンプレートファイルに生成したビューオブジェクトをはめ込んでいきます。
余談ですがビューに渡す変数がなければ、第2引数は省略可能です。
そして、 $title に値をセットして、 content にビューオブジェクトをはめ込んでいます。
規約にも書きましたが、Templateコントローラのアクションメソッドでは自動的にビューオブジェクト、つまり $this->template が返されるので、明示的に書く必要がありません。
$title に値をセットするとき set_global というメソッドを使っていますが、またの機会に詳しく書きます。
簡単に説明すると、 set_global で値をセットすると全てのビューオブジェクトで使用可能になる、というものです。
生成するビューのサンプルも載せておきます。
1 2 3 |
<div> <p>挨拶をしよう</p> </div> |
1 2 3 |
<div> <p>挨拶終わり</p> </div> |
1 2 3 |
<div> <p>おはようございます</p> </div> |
1 2 3 |
<div> <p>おやすみなさい</p> </div> |
決して手抜きではありません。・・・決して手抜きではありません。大事な事なので2回言いました。
hello1 と hello2 は fuel/app/views に hellos というフォルダを作って配置してありますので、ご注意を。
全てのファイルが用意できたら、 http://fuelphp/sample/hello1 と http://fuelphp/sample/hello2 にアクセスしてみて下さい。
最初と最後の文章は変わらずに、中央の挨拶だけが変わる手抜きのページが見れると思います。
以上が、Templateコントローラの概要と作り方です。
かなり、簡単なページで説明しましたが、使いこなすととんでもなく作業量を減らすことが出来る大変便利なものです。
近代的なページのようなレイアウトにしたければ javascript と css を多用することになるのはFuelPHPでも一緒ですが、私は一切説明するつもりはありません!
では、おやすみなさい。
チュートリアル HelloWorldを作る
おはようございます。ゆうきんかも知れません。
前回まではFuelPHPの規約について説明しました。
でも、それだけだと何をどうしたらいいのかわからないと思うので、簡単なページの作成を行いたいと思います。
ではまず、ビューを作成します。
fuel/app/views に hello.php というファイルを作ります。
中身は以下の通りです。
1 2 3 4 5 6 7 8 9 10 |
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title><?php echo $title ?></title> </head> <body> <p>Hello World!</p> </body> </html> |
<title><?php $title ?></title> の部分はphpのコマンドを使って$titleの中身を表示しているというものです。
そのままですね。ではどうやってビューに値を渡すのかは以下のコントローラ作成で説明します。
次にコントローラを作成します。
fuel/app/classes/controller にhello.php というファイルを作ります。
中身は以下の通りです。
1 2 3 4 5 6 7 8 9 10 |
<?php class Controller_Hello extends Controller { public function action_index() { $data['title'] = 'hello world'; return View::forge('hello', $data); } } |
action_index でビューを生成して return で返しています。
View::forge(‘ビューファイル名’,’ビューに渡すデータ’); がビューを生成する関数です。
第1引数は生成するファイル名を指定した文字列を渡します
第2引数はビューで使用する変数を渡します。
変数の渡し方ですが、$data[‘title’] = ‘hello world’ というように用意した連想配列を渡します。
もちろん変数名は自由ですが、添字はビューファイルと関連付けて下さい。
この場合は、ビューで $title の中身を表示したいので、添字を title にします。
ビューファイルで使用する変数を、きちんと渡してあげないとエラーになるので注意して下さい。
作業が終われば、http://localhost/fuelphp/hello にアクセスでHelloWorldが表示されるはずです。
これが基本的なページの作り方ですが、本格的なサイトを作るためにはまだまだ足りません。
次回はTemplateコントローラを使ったページの作り方を説明します。
では、おやすみなさい。
規約その4 ビュー編
おはようございます。ゆうきんのはずです。
前回はモデルの説明を行ったので、今回はビューの規約をまとめます。
ビューだけは、コントローラとモデルの規約と大きく違います。
といっても少ないですが。
ビューの規約
- fuel/app/views に配置
- コントローラの中でView::forge()メソッドを使って生成し、返す
終わりです。
サンプル。
1 2 3 4 5 6 7 8 9 10 |
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>サンプル</title> </head> <body> <p>いあっ!いあっ!くとぅるふ!ふたぐん!</p> </body> </html> |
はい普通のHTMLと何も変わりません。
これだけ書くと何が何だかわからないと思うので次回から、実際にページを作りながら説明したいと思います。
では、おやすみなさい。
規約その3 モデル編
おはようございます。ゆうきんだと思います。
前回はコントローラの説明を行ったので、今回はモデルの規約をまとめます。
と、言ってもほぼコントローラと同じです。
モデルも、コントローラと同様でPHPで記述し、クラスを作成します。
モデルの規約
- fuel/app/classes/model に配置
- クラス名の先頭には必ず Model_ を付ける
- クラス名(Model_の後)の頭文字は大文字で他は全て小文字
- ファイル名とクラス名は同じにしなければならない
- クラス名中の _ はフォルダを表すので注意
- Modelクラスを継承する
これだけです。
例によってサンプルを。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php /** * サンプルクラス */ class Model_Sample extends Model { /** * サンプルメソッド */ public static function getData($number) { // データベースにアクセスしたりしてデータを返す $data = getNanchara($number); return $data; } } |
クラス作って、すメソッドを作って、データベースなんかにアクセスして、データ取得して、値を返す。
というのがモデルでやることです。
コントローラからどうやって呼び出すかとかはまた今度。
では、おやすみなさい。
規約その2 コントローラ編
おはようございます。ゆうきんです。
前回MVCパターンの説明?が終わったので、ようやく規約の説明に移ります。
今回はコントローラの規約をまとめます。
ちなみに、コントローラはPHPで記述し、クラスを作成します。
なお、サイトにアクセスするためのURLは、コントローラのフォルダ構成とメソッド名から決められます。
http://ドメイン/インストールフォルダ名/コントローラ名/メソッド名/パラメータ という具合です。
私の環境だと http://localhost/fuelphp/sample/index という感じになります。
コントローラの規約
- fuel/app/classes/controller にファイルを作成
- クラス名の先頭には必ず Controller_ を付ける
- クラス名(Controller_の後)の頭文字は大文字で他は全て小文字
- ファイル名とクラス名は同じにしなければならない(ファイル名がsample.php だった場合、クラス名はController_Sample となる)
- クラス名中の _ (アンダーバー) はフォルダを表すので注意(Controller_Top_Loginだとclasses/controller/top/login.php ということになる)
- Controllerクラスを継承する
- コントローラ/メソッド[/パラメータ1[パラメータ2[/…]]]でアクセス出来る(これがサイトのURLとなる)
- ブラウザ側から実行されメソッドは action_ を付ける
- コントローラ内でechoを使い出力するのはFuelPHPの規約から外れる(デバッグでは使用OK)
コントローラからの返り値について
- 文字列にキャストできるものしか返してはいけない(Responseオブジェクトで、Viewオブジェクト、文字列 など)
コントローラの特殊なメソッド
- action_index() URLでメソッド名が省略された場合に実行される
- before() アクションメソッドの実行前に自動実行される
- after() アクションメソッドの実行後に自動実行される
- roter() 内部ルーティングを上書き。アクションインデックスが受け取るはずだった引数を受け取り、実行する関数を切り替えることが出来る
Restコントローラ
- 規約にしたがって値を受けおり、サポートしているフォーマットを返す
- Controller_Restクラスを継承する
- 実行されるメソッドにはHTTPメソッドの接頭辞を付ける
- URLのメソッド名に出力フォーマット名の拡張子を付ける
- サポートフォーマット xml, json, jsonp, csv, php(eval()可能なコード), serialized
主にこんなところです。多いなぁと思うかも知れませんが、そんなことないです。
他のフレームワークに比べたら大分少ないですし、融通が聞きます。
ピンと来ない方のために簡単なサンプルソースを載せておきます。
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 |
<?php /** * サンプルクラス * クラス名はController_ + 頭文字大文字 * Controller クラスを継承している */ class Controller_Sample extends Controller { /** * beforeメソッド */ public function before() { // アクションメソッドの実行前に自動実行 } /** * アクションインデックスメソッド */ public function action_index() { // URLのメソッド名を省略した時に実行される // URLは ドメイン/sample/index or ドメイン/sample になる } /** * 自作アクションメソッド */ public function action_top() { // URLは ドメイン/sample/top になる } /** * afterメソッド */ public function after() { // アクションメソッドの実行後に自動実行 } } |
こんな感じです。今回は規約だけを伝えるために、極限まで削りました。
実際のサイトを考慮した書き方はまた今度書きます。
コントラーラにはTemplateコントローラとHybridコントローラというものがあるんですが、またの機会に書きます。
では、おやすみなさい。
規約その1 MVCパターン?編
前 なし
おはようございます。
休日はいつまでも寝ているが、なかなか寝付けないゆうきんです。
ちなみにこれが初投稿です。
これから、少しずつFuelPHPのことについて書いていきたいと思います。
よろしくお願いします。
今回はFuelPHPで特に気を付けなければならない規約をまとめたいと思います。
FuelPHPは、インストールして出来たフォルダに、対応するファイルを配置していくだけでWebサイトが作れるフレームワークです。
主に3種類のファイルを配置していくことになります。
3種類のファイルは「コントローラ」「モデル」「ビュー」で、それぞれに規約が存在します。
規約を書く前に「コントローラ」「モデル」「ビュー」の説明をしたいと思います。
知っている人は読み飛ばして下さい。
コントローラとは?
文字通りアプリケーション全体を制御するものです。
基本的にコントローラからモデルとビューを呼び出し、
ビューとモデルのデータ受け渡しも行います。
モデルとは?
モデルはデータの管理を担当します。
データベースの操作のみならず、ファイル操作、メールの送信なども役割となります。
ビューとは?
表示を担当します。えぇそれだけです。
これを合わせてMVCパターンと呼びます。FuelPHPのみならずいろいろなもので使います。
さて、説明が終わった所で、規約のまとめを書きたいと思いますが、長くなるので次に書きます。
FuelPHP全体の規約
- ファイル名、フォルダ名は全て小文字
- ファイルは全てPHP形式
- PHPのコードしか含まないファイルは、終了タグ( ?> )を書かない
- ファイル名とクラス名は同じにしなければならない
この3つは前提になるので、よく覚えておいて下さい。
次からは「コントローラ」「モデル」「ビュー」それぞれの規約をまとめます。
では、おやすみなさい。