FuelPHP

 

認証 その2 SimpleAuthの認証画面を試す

0

oil g adminコマンドを使うとスキャフォールドと認証画面を一気に生成することができます。

ここでは、認証用ユーザ管理テーブルのスキャフォールドと認証画面をまとめて作ってみます。

 

まず、ユーザ管理テーブルのスキャフォールドを生成します。

FuelPHP 1.5ではfuel/packages/auth/exampleにSimpleAuth用のマイグレーションファイルがありますが、ここではoil g adminを使うことが目的なので、oilコマンドでマイグレーションを生成します。

$ oil g admin user username:varchar[50] password:varchar[255] group:int:default[1] email:varchar[255] last_login:varchar[25] login_hash:varchar[255] profile_fields:text

マイグレーションをデータベースに反映させます。

$ oil r migrate

テーブルが出来たら、ユーザーを新規追加します。

oilコマンドでテストコンソールを開き、Authパッケージのcreate_userメソッドを実行します。

$ oil c

Fuel 1.4 - PHP 5.3.10-1ubuntu3.5 (cli) (Jan 18 2013 23:39:11) [Linux]
>>> Auth::create_user('admin', 'pass', 'admin@example.com', 100)
1
>>>

create_userメソッドの引数は、ユーザ名、パスワード、メールアドレスのほか、グループIDが必須です。

ここで指定している値100は、simpleauth.phpで設定している管理者グループのIDです。

成功すると追加されたレコードのidが表示されます。成功したらCtrl+Cでコンソールを終了します。

 

これだけで完了です。

public/adminをブラウザで開いてみましょう。

SimpleAuth認証画面

認証画面が表示されます。

さきほど新規追加したユーザでログインします。

管理画面ダッシュボード

ダッシュボードが表示されます。

上部のリンクUserをクリックするとスキャフォールドで作成されたUsersテーブル管理画面が表示されます。

スキャフォールドによる管理画面

 

以上でSimpleAuthの認証画面を確認できました。

ただし、この例ではAuth::create_userの処理を入れていないので、このスキャフォールドを使った新規ユーザ追加や変更はできません。

 

追補

いろいろやっているうちに、ログインすると310リダイレクトループエラーになるようになってしまったときは、マイグレーションをやり直すと解消します

認証 その1 SimpleAuthのシンプルな設定

0

Authパッケージを使うと、ユーザ認証(Authentication)と認可(Authorization)のインターフェースを利用できます。

ここでは実装サンプルとして添付されているSimpleAuthを試してみます。

 

まずはfuel/app/config/config.phpにauthパッケージを読み込む記述を追加します。

 

次にfuel/packages/auth/config/auth.phpとfuel/packages/auth/config/simpleauth.phpをfuel/app/configディレクトリにコピーします。

 

auth.phpではAuthドライバの設定を行います。これはこのままで構いません。

simpleauth.phpではSimpleAuthの設定を行います。ユーザにアクセス権限を与えるためにグループIDの設定が必要ですが、コメントアウトされているので、これを外します。

以上でとりあえずSimpleAuthを動かす設定ができました。

チュートリアル Smartyの使い方

0

前 チュートリアル HTTPエラー処理その2

次 チュートリアル フォームの作成とDBの使い方

 

おはようございます。あぁん?ゆうきんじゃねーの?

この記事を読む前に ツグツグ が書いた を舐める様に参照して下さい。(^ω^)ペロペロ

では、Smarty の使い方について説明していきたいと思います。

ちなみに Smarty は拡張子を好き※に変更することができますが、今回は .samrty にしているとして話を進めます。

※プロジェクトで使用している他の拡張子と同じにするのは無理です

なお、Smartyの使い方を全部説明するわけではありません。

今回は基本的なことだけです。詳しくは公式のマニュアルを参照して下さい。

 

Smartyファイルの生成方法

おさらいです。

この2つで生成することが可能です。

 

Smarty内で変数、PHPコードの呼び出し方

おさらいです。

Smarty でPHPコードの結果を画面上に表示する場合でも、 echo を記述しる必要はありません。

 

Smartyでの連想配列の扱い方

これが連想配列の使い方です。

通常のPHPコードと違い array() ではなく、 [] で囲むだけですので注意して下さい。

 

Smartyで覚えておくと便利な事

※この項目に関しては、随時増やしていきます

コメント

if文

現在の時刻

文字の連結

文字数

変数のデフォルト値

大文字化。小文字化

文字数の規制

 

前述しましたが、この記事はちょくちょく更新したいと思います。

では、おやすみなさい。

チュートリアル HTTPエラー処理その2

0

前 チュートリアル HTTPエラー処理その1

次 チュートリアル Smartyの使い方

 

おはようございます。SAN値0のゆうきんです。

前回に引き続きHTTPエラー処理の説明を行います。

今回は、404と500以外のエラーを返す方法について説明します。

方法は2種類あります。順に説明します。

 

1,404と500以外のエラーを返す簡単な方法

これで、明示的に405エラーを返すことができます。

今回はnullとしましたが、第1引数にビューオブジェクトを渡すと、それが表示されます。

なお、nullだと真っ白の画面が表示されます。

Response クラスには他の使い方もあるのですが、記事の項目が違うため割愛します。

 

2,エラーを定義し、それを投げる

1の方法で全て解決できますが、1の方法だとエラーを返したい場所ごとに書かなければならないため、非常に面倒くさいです。

404と500を明示的に返すときと同じように、例外を投げるだけにしたいですよね?

そこでエラーを定義したクラスを作り、それを例外として投げる方法を説します。

今回は405エラーを作成することを前提にして説明します。

まずは、 fuel/app/classes/ に httpexceptions.php というファイルを作成して下さい。

そして、以下のクラスを記述して下さい。

1の方法とほぼ同じです。

今回は、第1引数でビューオブジェクトを生成して渡していますが、適当なビューファイルを用意して下さい。

この場合は405エラーだと視覚的にわかるビューが最適だと思われます。

定義したいエラーが増えるたびに、この httpexceptions.php にクラスを追加していくことになるので、覚えておいて下さい。

クラス名は定義したいHTTPエラーコードに準じた名前にするとわかりやすくていいです。

記述が終わったら、  fuel/app/bootstrap.php を開き、次のように書き加えて下さい。

‘HttpMethodNotAllowd’ が定義したエラークラス名、 APPPATH.’classess/httpexceptions.php’ がエラークラスを定義しているファイル名となります。

ここまで終わったら下準備は同じです。

後は、404と500と同じように例外を投げるだけです。

これで405エラーを明示的に返すことが可能となります。

さらに。この方法を使用すれば、404と同じように405が発生したらこのページにルーティングするという設定を適用することができます。

ただし、またいろいろと手を加える必要があります。

その方法は次の項目をご覧ください。

 

3,2で発生させた例外にルート設定を行う

この項目は2の項目で定義した405に対してルーティングを行うことを前提とします。

2で発生させた例外は public/index.php で受け取ることが可能です。

なので、以下の通りに書き加えて下さい。

catch文で、さきほど定義した例外 HttpMethodNotAllowd を受け取り、ルート設定があれば、そちらにルーティングし、なければ2で生成したビューがそのまま表示されます。

ルート _405_ を fuel/config/routes.php で定義していれば、そちらにルートされるということです。

catch文の中で _405_ があれば・・・とやっています。

つまり _405_ という名前は自由に変更できます。が、変数の命名はなるべく揃えた方がわかりやすので、このままで良いでしょう。

 

以上で、HTTPエラー処理の説明を終わります。

以前説明した、モードで処理を切り替える方法などを複合すれば、開発環境では405エラーを発生させるが、製品環境では404エラーとする、ということが可能です。

下準備は手間ですが、一度作成してしまえば繰り返し使えるので非常に便利です。

では、おやすみなさい。

チュートリアル HTTPエラー処理その1

0

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

次 チュートリアル HTTPエラー処理その2

 

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

今回はエラー処理について説明します。

Webサイトである以上、特に404エラーと500エラーは避けて通れないエラーです。

404と500がなんであるかは別に説明の必要ないですよね。

FuelPHPではこの404と500を明示的に投げる処理が組み込まれています。

うまく、活用して役立てましょう。

 

404エラーをスローする

上記で404エラーを投げることが出来ます。

FuelPHPは404エラーがスローされたら、以前説明した routes.php の404ルートを元にページを表示します。

 

404エラーをスローするのが好ましい状況

例えば、以下のコードを見て下さい。

psot_rasta というメソッドがありますが、このままだと、GETで http://localhost/fuelphp/sample/rasta にアクセスできてしまいます。

POSTでのみアクセスを許可したい、許可しなければならない場合は次のようにして下さい。

同じく rasta という名前でGETメソッド get_rasta を用意し、そのメソッドで 404エラーをスローするようにします。

こうすれば、GETメソッドでアクセスした場合、404エラーページが表示されるようになります。

また、以下の方法でもGETでのアクセス可を回避できます。

ちなみに、RestコントローラでPOSTメソッドのみ用意した場合、そのURLにGETでアクセスすると405エラーになります。

しかし、405エラーだとユーザにわかりにくくなるので、404エラーを返したほうが親切です。

なぜ、405エラーだとダメなのかというと、405エラーの場合、特に設定しなければ真っ白い画面が表示されてしまうからです。

ユーザからして見れば、ポルナレフのような状態になってしまいます。

403エラーも同じ理由で404エラーを返したほうがいいです。

さらに403エラーは。404エラーを返したほうがセキュリティが向上します。

今回はPOSTのみ用意してGETでのアクセスを回避するというものですが、逆もまた然りです。

GETのみ用意して、POSTのアクセスを禁止したい場合でも似たようなことを行なって下さい。

 

500エラーをスローする

上記で500エラーを投げることが出来ます。

500エラーがスローされた場合、アプリケーションを停止し、専用のページを表示します。

こっちは、スローしなければならない状況が多すぎるためサンプルは割愛します。

パッと思いつくのが、送信されたファイルのデータが大きすぎて処理しきれないとかですかね。

何かしらのデータやファイルを送信したけれど、規格外のものが送られてきて処理しきれないから、ユーザに警告を出すという使い方が多いと思います。

 

ユーザに知らせるのは404と500だけでいいと思いますが、それだけではデバッグするときは非常に不便です。

ですので、開発環境と製品環境で返すエラーを切り替えるという処理が必須になります。

モードによる処理の切り替えは前回説明しました。

後は404と500以外のエラーを発生させる方法だけですね。

その方法は、長くなるので次で説明します。

では、おやすみなさい。

 

データベースを使う その5 スキャフォールド生成

0

スキャフォールドは足場という意味で、これを生成することでORMの機能に加えてテーブル管理のコントローラとビューまでコマンドひとつで出来てしまうという、恐ろしく便利なものです。

 

さっそく試してみましょう。

ここではnameフィールドとageフィールドを持つuserテーブルを作成することとします。

$ oil g scaffold user name:varchar[32] age:int

fuel/app/classes/model/user/phpから見ていきます。

ORMパッケージのModelを継承しているのはORMモデル生成の場合と同様ですが、validateメソッドが追加されています。このメソッドはコントローラから呼び出され、データのバリデーション条件を返します。

また、マイグレーションファイルもモデル生成時と同じくfuel/app/migrationsディレクトリに生成されています。

 

次に、fuel/app/classes/controller/user.phpを見てみましょう。

メソッド 処理内容
action_index 一覧表示
action_view 個別データ表示
action_create 新規追加
action_edit 変更
action_delete 削除

action_createとaction_editでは、入力されたデータがモデルのvalidateから得た規定に合っているかを確認しています。

fuel/app/views/userディレクトリにはビューのコードが生成されています。

template.php ページのテンプレート
_form.php 入力フォーム
index.php  一覧表示
view.php 個別表示
create.php 新規追加
edit.php 変更

コードが生成されているのを確認したらデータベースに反映させます。

$ oil r migrate

 

それではページを表示してみましょう。ブラウザでpublic/usersを開きます。

データなし

データ一覧ページが表示されます。

まだデータはありません。

 

Addボタンをクリックすると新規追加ページが表示されます。

データを入力

データを入力したらSaveボタンをクリックします。

データが追加されている

データ一覧ページに戻ります。

入力したデータが追加されています。

 

次にViewをクリックしてデータを表示してみます。

選択したデータを表示

選択したデータが表示されます。

 

Editをクリックしてデータを変更してみます。

データを変更する

変更してSaveボタンをクリックすると、再び一覧ページが表示されます。

データが変更されている

変更が反映されているのがわかります。

 

最後にDeleteをクリックして削除してみます。

データが削除されている

一覧が表示され、データは削除されています。

 

このように、スキャフォールドを使うことで簡単にデータベースアプリケーションの基本機能を構築することができます。

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

0

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

次 チュートリアル HTTPエラー処理その1

 

おはようございます。北斗神拳伝承者ゆうきんです。

今回はモードの切り替え方について説明します。

モードとはつまりデバッグモードだったり、リリースモードだったりです。

では、見て行きましょう。

 

定義済み環境
  • 製品環境 Fuel::PRODUCTION
  • 開発環境 Fuel::DEVELOPMENT
  • テスト環境 Fuel::TEST
  • ステージング環境 Fuel::STAGE

の、4種類が存在します。

それぞれに切り替える方法は次の項目を読んで下さい。

 

モードを切り替える

FuelPHPでは public/.htaccess で、 production を宣言すると開発環境になります。

宣言の仕方は、

という感じです。

特に弄った記憶がなければ、2行目でコメントアウトされているはずなので、外してあげるだけでいいです。

それ以外にも、 development, test, stage を宣言することが出来ます。

それぞれのモードは読んで字の如くなので、特に説明する必要はないかと思われます。

また、何も宣言しなければ自動で development が適用される仕様です。

他にも fuel/app/bootstrap.php を編集することで、モードの切り替えが行えます。

この部分の Fuel::DEVELOPMENT を Fuel::TEST or Fuel::STAGE or Fuel::PRODUCTION のいずれかに適用したいモードによって切り替えて下さい。

※ public/.htaccess を編集する方法でモードを指定している場合は。そちらが優先されます。

 

モードによって処理を切り替える

これが全てです。

特に説明することはありません。

 

では、おやすみなさい。

データベースを使う その2 フィールド型

0

データベースを使うにはoilコマンドのマイグレーション機能とモデル生成機能を利用します。

oilコマンドで使用できるフィールド型は以下のとおりです。

フィールドの書式はフィールド名:フィールド型です。

string[n]
varchar[n]
int[n]
enum[value1, value2]
decimal[n n]
float[n n]
text
blob
datetime
date
timestamp
time

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

0

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クラス

0

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打ち込めば見れちゃいますよ

ページのトップへ