プログラミング

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

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

次 チュートリアル 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だけでは限界があるので、是非活用して下さい。

では、おやすみなさい。

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に記述します。

 

接続の詳細を実行環境ごとのファイルに記述することで、コードを書き換えることなく開発用と公開用のデータベースサーバを切り替えて使用することができます。 開発用の設定ファイルはfuel/app/config/development/db.php、公開用の設定ファイルはfuel/app/config/production/db.phpです。

開発用と公開用のほか、テスト用、ステージング用の環境を使うことができます。
設定ファイルはそれぞれfuel/app/config/test/db.phpfuel/app/config/staging/db.phpです。

 

データベースのモデルではORMパッケージを使うので、fuel/app/config/config.phpのalways_loadにORMの読み込みを追加します。

 

追補 mysqliドライバを使う例

 

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

前 チュートリアル Templateコントローラ

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

 

おはようございます。かつてゆうきんと呼ばれていたものです。

今回は、規約その2 コントローラ編で規約だけ説明したRestコントローラとHybridコントローラの説明をします。

 

Restコントローラについて

以前書きましたが、RestコントローラとはHTTPメソッドをサポートするものです。

主に POST や GET ですね。

習うより慣れろということで、さっそくサンプルをドン。

GETメソッドだけ存在するRestコントローラサンプルです。

http://localhost/fuelphp/input/data.json にアクセスすると私の個人情報が漏洩します。ヤダ怖い。

通常のGETメソッドと同じ用に値を渡す事もできます。

例えば http://localhost/fuelphp/input/data.json?name=yukin&age=24 という具合です。

これに対応するRestコントローラは以下のようになります。

アクセスした時の見た目は変わりませんが、渡された値を返すようになっています。

先ほどのURLの yukin と 24 の部分をいじってアクセスしてみて下さい。実感できるかと思います。

Restコントローラ単体ではページの表示には向きません。

主にWebサービスを作成する場合に用いることになるでしょう。

 

Hybridコントローラについて

PHPは多重継承が許されていません。

では、RestコントローラとTemplateコントローラを同時に使いたい場合はどうするのでしょうか?

それを解決してくれるのが、Hybridコントローラです。

RestコントローラとTemplateコントローラの特性を同時に持たせたい場合はHybridコントローラを継承するのです。

ファイルを分割することでも解決可能ですが、それだとURLもわかれてしまい、ユーザにわかりにくくなってしまう場合があります。

例えばログインページを作成するときなどはHybridコントローラを使うことになるかと思います。

anction_index で入力画面を表示 post_login でポストされたデータをチェックし、正しければログイン処理を実行する、などです。

覚えておくと非常に便利なものなので、有効活用して下さい。

 

では、おやすみなさい。

チュートリアル Templateコントローラ

前 チュートリアル HelloWorldを作る

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

 

おはようございます。ゆうきんのようなものです。

前回、HelloWorldを作って基本的なページの作り方を覚えました。

しかし、まだまだ安心してはいけません。ここからが本当の地獄だ・・・。

 

今回はTemplateコントローラについて説明します。

Webサイトって左に表示されるメニューとか、上部に表示されてるタイトルとか、ページを遷移しても変わらないページがありますよね?

その変わらない部分と変わる部分を切り離し、ビューとして作成し管理するのがTemplateコントローラです。

他の使い方もありますが、私は主にこの方法で使用します。

違う使い方でも覚えることは一緒なので安心して下さい。

まずはTemplateコントローラの規約をまとめます。

 

Templateコントローラの規約
  • Controller_Templateクラスを継承する
  • デフォルトレイアウトファイル(テンプレートファイル)は fuel/app/views/template.php である
  • $this->template にテンプレートファイルのビューオブジェクトが自動的に代入される
  • アクションメソッドでは自動的にビューオブジェクトが返される
  • デフォルトテンプレートを使いたくなければ $this->template に違うビューを入れれば良い
  • beforeメソッドを使う場合は必ずparent::before() を呼び出す

 

以上です。新しい単語とかいろいろ出てきてなんのこっちゃと思うでしょうが、きちんと説明します。

デフォルトレイアウトファイル(テンプレートファイル)とは、表示したいビューをはめ込んでいくビューです。

なんか意味わかんないですね。多分見たほうが早いです。というわけでほい。

これがテンプレートファイルです。これは簡単なものです。もちろん作りたいページによって変化します。

あ、でも簡単なものでも難しいものでも、規約通り template.php という名前で fuel/app/views に配置してくださいね。

そこに配置したものがデフォルトレイアウトファイルとして認識されますから。

そして、テンプレートコントローラの $title, $header, $content, $footer にコントローラで生成したビューオブジェクトや、文字列をはめ込んで、表示したいページを作っていくわけです。

というわけでTemplateコントローラのサンプルも載せます。

このファイルはコントローラなので、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 で値をセットすると全てのビューオブジェクトで使用可能になる、というものです。

生成するビューのサンプルも載せておきます。

決して手抜きではありません。・・・決して手抜きではありません。大事な事なので2回言いました。

hello1 と hello2 は fuel/app/views に hellos というフォルダを作って配置してありますので、ご注意を。

全てのファイルが用意できたら、 http://fuelphp/sample/hello1 と http://fuelphp/sample/hello2 にアクセスしてみて下さい。

最初と最後の文章は変わらずに、中央の挨拶だけが変わる手抜きのページが見れると思います。

 

以上が、Templateコントローラの概要と作り方です。

かなり、簡単なページで説明しましたが、使いこなすととんでもなく作業量を減らすことが出来る大変便利なものです。

近代的なページのようなレイアウトにしたければ javascript と css を多用することになるのはFuelPHPでも一緒ですが、私は一切説明するつもりはありません!

 

では、おやすみなさい。

チュートリアル HelloWorldを作る

前 規約その4 ビュー編

次 チュートリアル Templateコントローラ

 

おはようございます。ゆうきんかも知れません。

前回まではFuelPHPの規約について説明しました。

でも、それだけだと何をどうしたらいいのかわからないと思うので、簡単なページの作成を行いたいと思います。

 

ではまず、ビューを作成します。

fuel/app/views に hello.php というファイルを作ります。

中身は以下の通りです。

<title><?php $title ?></title> の部分はphpのコマンドを使って$titleの中身を表示しているというものです。

そのままですね。ではどうやってビューに値を渡すのかは以下のコントローラ作成で説明します。

 

次にコントローラを作成します。

fuel/app/classes/controller にhello.php というファイルを作ります。

中身は以下の通りです。

action_index でビューを生成して return で返しています。

View::forge(‘ビューファイル名’,’ビューに渡すデータ’); がビューを生成する関数です。

第1引数は生成するファイル名を指定した文字列を渡します

第2引数はビューで使用する変数を渡します。

変数の渡し方ですが、$data[‘title’] = ‘hello world’ というように用意した連想配列を渡します。

もちろん変数名は自由ですが、添字はビューファイルと関連付けて下さい。

この場合は、ビューで $title の中身を表示したいので、添字を title にします。

ビューファイルで使用する変数を、きちんと渡してあげないとエラーになるので注意して下さい。

 

作業が終われば、http://localhost/fuelphp/hello にアクセスでHelloWorldが表示されるはずです。

これが基本的なページの作り方ですが、本格的なサイトを作るためにはまだまだ足りません。

次回はTemplateコントローラを使ったページの作り方を説明します。

 

では、おやすみなさい。

 

規約その4 ビュー編

前 規約その3 モデル編

次 チュートリアル HelloWorldを作る

 

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

前回はモデルの説明を行ったので、今回はビューの規約をまとめます。

ビューだけは、コントローラとモデルの規約と大きく違います。

といっても少ないですが。

 

ビューの規約
  • fuel/app/views に配置
  • コントローラの中でView::forge()メソッドを使って生成し、返す

終わりです。

サンプル。

はい普通のHTMLと何も変わりません。

これだけ書くと何が何だかわからないと思うので次回から、実際にページを作りながら説明したいと思います。

 

では、おやすみなさい。

規約その3 モデル編

前 規約その2 コントローラ編

次 規約その4 ビュー編

 

おはようございます。ゆうきんだと思います。

前回はコントローラの説明を行ったので、今回はモデルの規約をまとめます。

と、言ってもほぼコントローラと同じです。

モデルも、コントローラと同様でPHPで記述し、クラスを作成します。

 

モデルの規約
  • fuel/app/classes/model に配置
  • クラス名の先頭には必ず Model_ を付ける
  • クラス名(Model_の後)の頭文字は大文字で他は全て小文字
  • ファイル名とクラス名は同じにしなければならない
  • クラス名中の _ はフォルダを表すので注意
  • Modelクラスを継承する

これだけです。

例によってサンプルを。

クラス作って、すメソッドを作って、データベースなんかにアクセスして、データ取得して、値を返す。

というのがモデルでやることです。

コントローラからどうやって呼び出すかとかはまた今度。

 

では、おやすみなさい。

規約その2 コントローラ編

前 規約その1 MVCパターン?編

次 規約その3 モデル編

 

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

前回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

 

主にこんなところです。多いなぁと思うかも知れませんが、そんなことないです。

他のフレームワークに比べたら大分少ないですし、融通が聞きます。

ピンと来ない方のために簡単なサンプルソースを載せておきます。

こんな感じです。今回は規約だけを伝えるために、極限まで削りました。

実際のサイトを考慮した書き方はまた今度書きます。

コントラーラにはTemplateコントローラとHybridコントローラというものがあるんですが、またの機会に書きます。

 

では、おやすみなさい。

ページのトップへ