ざっくりFuelPHP入門

目次

fuelPHPまとめ

環境はMac&MAMPを使ってる前提でまとめています。

FuelPHPは1.7.2を使用。

 

インストール

1.クイックインストーラをインストールする

2.プロジェクト作成する

作成したいフォルダへ移動し、以下コマンド実行。

※今回の場合、testプロジェクトを作成

そうするとtestフォルダが作成され、その中に色々なファイルがインストールされる

※もしdate_default_timezoneなんたら的なエラーが出たら、/etc/php.iniファイル(ルートにあるetcフォルダ内のやつ)のdate.timezone部分を

と変更する。(頭のセミコロン「;」は取ること!)

もしetcフォルダ内にphp.iniファイルがなかった場合

php.ini.default的なのしかなければ、下記のsudo cpコマンドでコピーして名前をphp.iniへ変更。

↑php.ini.defaultファイルを新しい名前のphp.iniファイルとしてコピーするよって意味。

もし、中身を編集してもreadonlyだとエラーが出る場合は、下記のようにsudo chmodコマンド で 権限を664に変更すれば書き込み可能になる。

フォルダ構成

覚えておけばいいところだけ抜き出した構成。

フォルダ構成

ページを開いてみる

‘test’というプロジェクトを作った場合、下記のURLでアクセスするとFuelPHPのWELCOME画面が表示される。

URLとファイルとの対応関係

例えば、下記のようなURLがある場合、

サーバーはhttp://localhost/blog/public/index.phpを呼び出し、welcome/indexがパラメータとして渡され、/で区切られた最初のパラメータ名の「コントローラ」を呼び、次のパラメータ名の「アクション」を呼び出す。

(コントローラー名がWelcomeのwelcome.phpファイル内にある、アクション名indexを呼んでるってこと)

安全なディレクトリ構成へ変更する

WEBサーバの公開ディレクトリ(htdocs)にFuelPHPをインストールした場合、FuelPHPの設定ファイルなどもそこにインストールされるため全て公開されてしまい、あまり良くない。

そこで、htdocsと同階層に違うフォルダを作成(名前は「sample」とかなんでもOK)し、そこにFuelPHPをインストールする。

(必要なら、インストールしたFuelPHPのフォルダに対してアクセス権も設定しておくこと)

その後、httpd.confに下記のようなバーチャルホスト設定を追加する。

そして、/etc/hostsファイルに下記1行を追加する。

※sample.localhostのホスト名は127.0.0.1のipアドレス(自分のPCになる)だよと定義してる

コントローラーからビューへの値の受け渡し方

APPPATH/classes/controller/welcome.php
APPPATH/views/welcome/test.php

他にも、オブジェクト変数で渡すこともできる

APPPATH/classes/controller/welcome.php

上記ケースの場合、アクセスするURLは下記のようになる。

ビューを作る

fuel/app/views内に〇〇.phpという形で作成してあげる。

もし、viewsフォルダ内に別フォルダを作って、その中にビューファイルを置いた場合、コントローラー側でのビューファイルの指定は下記のようにする。

例:viewsフォルダの中にhomeフォルダを作り、その中にビューファイルindex.phpを作った場合

ビュー側
コントローラー側

※ビューに渡される値は全て自動でサニタイズされる。

ビューファイルを入れ子にする

headerやfooterなど別ファイルにして、ビューファイルの中で別のビューファイルを読み込むようにする。

fuel/app/views/head.php
fuel/app/views/content.php
fuel/app/views/footer.php
コントローラー側

画像やリンク、cssの配置

画像やcss、jsに関してはプロジェクト名/public/assetsの中にそれぞれimg,js,cssでフォルダが既に作られているので、その中に置く。

そして、画像を表示させたい時やCSS、jsの読込みしたいときなどはAssetクラスのメソッドを使う。

Assetクラス

Assetクラスのメソッドを使うことで簡単にhtmlに書き出してくれる。

画像を読み込む場合

ビュー内で下記のようにファイルを指定し

公開ディレクトリ配下のassets/img/の中にtitle.pngファイルを配置すればOK。

属性など指定したい場合は下記のように第2引数に指定してあげる。

CSSを読み込む場合

ビュー内で下記のようにファイルを指定し、

公開ディレクトリ配下のassets/css/'の中にbase.css’ファイルを配置すればOK。

aタグを使う場合

※リンク先はコントローラ名/メソッド名の形で指定する

※第3引数は属性をつけたいときに使用する

※第4引数にtrueを指定するとhttpsで始まるリンクになる。

iconを読み込みたい場合

find_fileメソッドを使うと指定したファイルのパスが返ってくるのでそれを使う。

第一引数がファイル名、第二引数がファイルタイプ(imgかjsかcss)、第三引数がフォルダ

上記の場合、assets/icons/内にある画像ファイルのicon.pngのパスを教えて!とメソッドを呼んでいる。

assetsフォルダ内にjs,css,img以外のフォルダを作ってそこのファイルを読み込みたい場合

初期状態では、Asset::jsとやればassets/js内のファイルを指定でき、Asset::cssとやればassets/css内のファイルが指定できるが、

assets/pluginsなどのフォルダ内のファイルを指定したい場合には、下記のようにAssetクラスにパスを追加してやる必要がある。

※今回はjsと指定したので、Asset::jsでファイル名を指定するとデフォルトのassets/jsフォルダ内と新たにパスを追加したassets/pluginsフォルダ内を探しに行く。

コントローラー

コントローラの基本

fuel/app/classes/controllerの中に作成する。

ファイル名は小文字。

www.test.com/example/indexというURLを指定した場合、exampleというコントローラーのindexというアクションが指定されたという意味になる。

Welcome.php

リクエストされたコントローラ名が見つからないorコントローラ名が指定されてない場合

config/routes.phpの設定先に遷移する

モデル・ビューへの呼び出し

ビューへの値の受け渡し方

値の受け渡し方は2通りある。

配列などで受け渡す方法とオブジェクトを作成して受け渡す方法。

引数で受け渡す

ビューのオブジェクトを生成して受け渡す

パラメータを受け取る

URLのアクションメソッド名の後にパラメータを指定することでコントローラ側で受け取れる。

URL
パラメータを受け取るコントローラ

パラメータがいくつ渡されるか不明な場合

※引数をつけなくてもいい

※ビュー側で、foreach文などで変数paramから順に取り出してあげる

before()メソッドでログインチェックなどの各ページ共通処理をする

before()メソッドはURLで指定されたアクションメソッドが実行される前に実行されるので、会員専用ページなどのログインチェックなどに使える。

コントローラーをまとめる

似た機能のコントローラー同士でまとめておきたいなど、classes/controllerの配下にさらにディレクトリを作ってコントローラーを配置したい場合は以下のようにする。

例:会員用機能のコントローラをmembersディレクトリ配下にまとめる場合

ディレクトリ構成
アクセスするURL
アクセスするコントローラ内

ベースのコントローラを作る

会員専用サイトなどで複数のコントローラで同じ処理をさせる場合、各コントローラ内に記述していくよりも、ベースのコントローラを作って、それを継承する形で各コントローラを作ってあげる。

※ベースコントローラと同階層に継承したコントローラを置いても大丈夫

ディレクトリ構成
ベースコントローラ

作ったコントローラを継承する

オートローダのお陰で、クラス定義で名前以外のものを記述しなくても他のコントローラを継承できる。

テンプレートコントローラ

ヘッダ、フッタは共通のものを使い、コンテンツ部分だけ各ページで違う内容にしたいなどサイト全体で共通するHTMLを作成し、一部分だけを入れ替える時に使えるのが「テンプレートコントローラ」

テンプレートコントローラにはあらかじめ、$templateというプロパティが用意されているので、そいつに色々設定してやる。

テンプレートコントローラを使うにはController_Templateを継承してあげる。

テンプレートコントローラを使う
テンプレートhtml(APPPATH/views/template.php)

モデルを作る

まずDBの設定をする

/fuel/app/config/db.phpをいじる。

DBの設定

モデルを作る

Model_Crudクラスを拡張して作る

Model_CrudクラスにはCRUD(作成、検索、更新、削除)するためのメソッドが用意されてるので、簡単な操作くらいならこっちを使えばOK。

例)フォームで入力した内容をDB登録し、そのDB内容を表示する場合

APPPATH/classes/model/post.php
ビュー:登録フォーム(APPPATH/views/post/form.php)
コントローラ:Post(APPPATH/classes/controller/post.php)

フォーム内容をDBへ登録する場合

SQLを書く

SQLをそのまま書くか、クエリビルダというものを使って書くかの2通り。

SQLをそのまま書く場合

※as_array()を使わないと中身が取り出せないので注意!!

クエリビルダを使って書く場合

※クエリビルダを使えば、自動でエスケープしてくれる

クエリビルダを使ったINSERT
クエリビルダを使った件数カウント
クエリビルダを使ったトランザクション

コントローラーからモデルへ

ORMを使う

テーブル同士のリレーション(多対多、1対多など)を定義しておくことで、ひとつのテーブルを更新すると自動的に関連するテーブルも更新してくれたりする。

書き方

\Orm\Modelを継承したモデルクラスを作成し、fuel/app/classes/model/配下に置く。

fuel/app/classes/model/contents1.php

アプリのモジュール化

アプリの規模が大きくなる際などは、アプリの各機能を独立させモジュール化(部品化)してあげた方が開発効率や保守性も高まる。(詳しくはp.52)

アクセスするURL

バリデーション

方法1:add_fieldメソッドを使う

※add_fieldメソッドは文字列の検証しか出来ない略式的なもの

コントローラー内

エラーメッセージの日本語化

1.APPPATH/config/config.phpで’language’を’ja’にする

2.APPPATH/lang/ja/vallidation.phpファイル作成

3.編集する

編集内容

※「:label」の部分には指定したラベルの名前が入る

※「:param:x」x番目のパラメータを取得する

エラーメッセージの上書き

$val->set_message(‘required’,’:labelが入力されていません’);

方法2:add()とadd_rule()を使う

文字列以外のチェックも可能。

$val->add(‘password’,’ぱすわーど’)

->add_rule(‘required’)

->add_rule(‘min_length’,8)

->add_rule(‘max_length’,12)

->add_rule(‘valid_string’,array(‘alpha’,’numeric’,’dashes’,’utf8′));

※dashesは「ー」ハイフンと「_」アンダースコアを許可。

※utf8は正規表現のまっちんぐをutf8で行うことを指定。

※valid_stringの後の第2引数を指定しないと自動でarray(‘alpha’,’utf8′);が入る。

独自の検証規則を作成する

既に登録済みのemailでないかを調べる場合など

APPPATH/classes/myvalidation.php

エラーメッセージを毎回書くのが面倒ならメソッド側に設定する

認証機能

SimpleAuthを使う。

Authパッケージを使う

使うにはconfig.phpにauthを追加する

テーブルを用意する

デフォルトでは、テーブル名はusersを想定していて、

id,username,password,group,email,last_login,login_hash,profile_fields,created_at

のカラムがあることが前提。

テーブル名だけは設定すれば変更可能。

ユーザ登録

※パスワードは自動でハッシュ化されて保存される

ログイン

※ログインするとusersテーブルのlast_loginにログイン時刻、login_hashにタイムスタンプを基にしたハッシュ値が保存される。

さらに、セッションにユーザ名とログインハッシュ値が保存される。

ログアウト

ログイン状態のチェック

ログイン保持(1週間ログインを保持するなど)をする

1.simpleauth.phpをコピーする

fuel/packages/auth/config/simpleauth.phpfuel/app/config/内へコピペ。

2.コピペしたsimpleauth.phpを編集する

3.コントローラ内のログイン認証でOKだった場合の中で下記を記述する

ユーザグループの設定

1.PKGPATH/auth/config/simpleauth.phpの「groups」セクションにグループの定義を設定する

どのグループに属しているかを調べる場合

ユーザ認証ページの例

サイト構成
① member.php