管理人
(0 件のコメント, 28 件の投稿)
このユーザーは共有されたプロフィール情報を持っていません
管理人 による投稿
チュートリアル Smartyの使い方
0
おはようございます。あぁん?ゆうきんじゃねーの?
この記事を読む前に ツグツグ が書いた を舐める様に参照して下さい。(^ω^)ペロペロ
では、Smarty の使い方について説明していきたいと思います。
ちなみに Smarty は拡張子を好き※に変更することができますが、今回は .samrty にしているとして話を進めます。
※プロジェクトで使用している他の拡張子と同じにするのは無理です
なお、Smartyの使い方を全部説明するわけではありません。
今回は基本的なことだけです。詳しくは公式のマニュアルを参照して下さい。
Smartyファイルの生成方法
おさらいです。
1 2 3 4 5 |
// 方法その1 $view1 = View_Smarty::forge('view1'); // 方法その2 $view2 = View::forge('view2.smarty'); |
この2つで生成することが可能です。
Smarty内で変数、PHPコードの呼び出し方
おさらいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Smarty</title> </head> <body> <!-- 変数の呼び出し --> <p>ユーザ名:{$username}</p> <!-- PHPコードの呼び出し --> {Html::Anchor('top/index','トップページ')} </body> </html> |
Smarty でPHPコードの結果を画面上に表示する場合でも、 echo を記述しる必要はありません。
Smartyでの連想配列の扱い方
1 2 |
// Smarty での配列の扱い {Form::input('userid', Input::post('userid'), ['required'=>'required'])} |
これが連想配列の使い方です。
通常のPHPコードと違い array() ではなく、 [] で囲むだけですので注意して下さい。
Smartyで覚えておくと便利な事
※この項目に関しては、随時増やしていきます
コメント
1 |
{* この中に書いたものはコメントです *} |
if文
1 2 3 4 5 6 |
{$age = 24} {if $age < 20} <p>未成年</p> {else} <p>成年</p> {/if} |
現在の時刻
1 2 |
{$date = $smarty.now|date_format:'%Y-%m-%d %H:%M:%S'} <p>現在の日付と時間:{$date}</p> |
文字の連結
1 2 3 |
{$text1 = 'あんかけ'} {$text2 = 'ちゃーはん'} <p>連結した文字 = {$text1|cat:$text2}</p> |
文字数
1 2 3 |
{$text = 'ひゃっはー! ここは通さねぇぜ!'} <p>文字数:{$text|count_characters}</p> <p>空白を含めた文字数:{$text|count_characters:true}</p> |
変数のデフォルト値
1 |
<p>変数に何が入ってる?:{$var|default:'何もねぇ!'}</p> |
大文字化。小文字化
1 2 3 |
{$text = 'Small or Large'} <p>全部大文字:{$text|upper}</p> <p>全部小文字:{$text|lower}</p> |
文字数の規制
1 2 3 |
{$text = 'いやに長い文章考えるのって逆に困るよね特に俺みたいに寡黙な人間にとっては長い文章考えるなんて拷問に等しいよ本当に'} <p>原文:{$text}</p> <p>切捨:{$text|truncate:32:'..'}</p> |
前述しましたが、この記事はちょくちょく更新したいと思います。
では、おやすみなさい。
チュートリアル HTTPエラー処理その2
0
おはようございます。SAN値0のゆうきんです。
前回に引き続きHTTPエラー処理の説明を行います。
今回は、404と500以外のエラーを返す方法について説明します。
方法は2種類あります。順に説明します。
1,404と500以外のエラーを返す簡単な方法
1 2 3 4 |
public function action_error() { return new \Response(null, 405); } |
これで、明示的に405エラーを返すことができます。
今回はnullとしましたが、第1引数にビューオブジェクトを渡すと、それが表示されます。
なお、nullだと真っ白の画面が表示されます。
Response クラスには他の使い方もあるのですが、記事の項目が違うため割愛します。
2,エラーを定義し、それを投げる
1の方法で全て解決できますが、1の方法だとエラーを返したい場所ごとに書かなければならないため、非常に面倒くさいです。
404と500を明示的に返すときと同じように、例外を投げるだけにしたいですよね?
そこでエラーを定義したクラスを作り、それを例外として投げる方法を説します。
今回は405エラーを作成することを前提にして説明します。
まずは、 fuel/app/classes/ に httpexceptions.php というファイルを作成して下さい。
そして、以下のクラスを記述して下さい。
1 2 3 4 5 6 7 |
class HttpMethodNotAllowd extends Fuel\Core\HttpException { public function response() { return new Response(View::forge('errors/405'), 405); } } |
1の方法とほぼ同じです。
今回は、第1引数でビューオブジェクトを生成して渡していますが、適当なビューファイルを用意して下さい。
この場合は405エラーだと視覚的にわかるビューが最適だと思われます。
定義したいエラーが増えるたびに、この httpexceptions.php にクラスを追加していくことになるので、覚えておいて下さい。
クラス名は定義したいHTTPエラーコードに準じた名前にするとわかりやすくていいです。
記述が終わったら、 fuel/app/bootstrap.php を開き、次のように書き加えて下さい。
1 2 3 4 5 |
Autoloader::add_classes(array( // Add classes you want to override here // Example: 'View' => APPPATH.'classes/view.php', 'HttpMethodNotAllowd' => APPPATH.'classes/httpexceptions.php', )); |
‘HttpMethodNotAllowd’ が定義したエラークラス名、 APPPATH.’classess/httpexceptions.php’ がエラークラスを定義しているファイル名となります。
ここまで終わったら下準備は同じです。
後は、404と500と同じように例外を投げるだけです。
1 2 3 4 |
public function action_405error() { throw new HttpMethodNotAllowd; } |
これで405エラーを明示的に返すことが可能となります。
さらに。この方法を使用すれば、404と同じように405が発生したらこのページにルーティングするという設定を適用することができます。
ただし、またいろいろと手を加える必要があります。
その方法は次の項目をご覧ください。
3,2で発生させた例外にルート設定を行う
この項目は2の項目で定義した405に対してルーティングを行うことを前提とします。
2で発生させた例外は public/index.php で受け取ることが可能です。
なので、以下の通りに書き加えて下さい。
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 45 46 47 48 49 |
// Generate the request, execute it and send the output. try { $response = Request::forge()->execute()->response(); } catch (HttpNotFoundException $e) { $route = array_key_exists('_404_', Router::$routes) ? Router::$routes['_404_']->translation : Config::get('routes._404_'); if($route instanceof Closure) { $response = $route(); if( ! $response instanceof Response) { $response = Response::forge($response); } } elseif ($route) { $response = Request::forge($route, false)->execute()->response(); } else { throw $e; } } catch (HttpMethodNotAllowd $e) { $route = array_key_exists('_405_', Router::$routes) ? Router::$routes['_405_']->translation : Config::get('routes._405_'); if($route instanceof Closure) { $response = $route(); if( ! $response instanceof Response) { $response = Response::forge($response); } } elseif ($route) { $response = Request::forge($route, false)->execute()->response(); } else { throw $e; } } |
catch文で、さきほど定義した例外 HttpMethodNotAllowd を受け取り、ルート設定があれば、そちらにルーティングし、なければ2で生成したビューがそのまま表示されます。
ルート _405_ を fuel/config/routes.php で定義していれば、そちらにルートされるということです。
catch文の中で _405_ があれば・・・とやっています。
つまり _405_ という名前は自由に変更できます。が、変数の命名はなるべく揃えた方がわかりやすので、このままで良いでしょう。
以上で、HTTPエラー処理の説明を終わります。
以前説明した、モードで処理を切り替える方法などを複合すれば、開発環境では405エラーを発生させるが、製品環境では404エラーとする、ということが可能です。
下準備は手間ですが、一度作成してしまえば繰り返し使えるので非常に便利です。
では、おやすみなさい。
チュートリアル HTTPエラー処理その1
0
おはようございます。†ゆうきん†です。
今回はエラー処理について説明します。
Webサイトである以上、特に404エラーと500エラーは避けて通れないエラーです。
404と500がなんであるかは別に説明の必要ないですよね。
FuelPHPではこの404と500を明示的に投げる処理が組み込まれています。
うまく、活用して役立てましょう。
404エラーをスローする
1 |
throw new HttpNotFoundException; |
上記で404エラーを投げることが出来ます。
FuelPHPは404エラーがスローされたら、以前説明した routes.php の404ルートを元にページを表示します。
404エラーをスローするのが好ましい状況
例えば、以下のコードを見て下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php /** * サンプルクラス */ class Controller_Sample extends Controller_Hybrid { /** * アクションインデックス */ public function action_index() { // 省略 } /** * post メソッド */ public function post_rasta() { // 省略 } } |
psot_rasta というメソッドがありますが、このままだと、GETで http://localhost/fuelphp/sample/rasta にアクセスできてしまいます。
POSTでのみアクセスを許可したい、許可しなければならない場合は次のようにして下さい。
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 |
/** * サンプルクラス */ class Controller_Sample extends Controller_Hybrid { /** * アクションインデックス */ public function action_index() { // 省略 } /** * post メソッド */ public function post_rasta() { // 省略 } /** * get メソッド */ public function get_rasta() { throw new HttpNotFoundException; } } |
同じく rasta という名前でGETメソッド get_rasta を用意し、そのメソッドで 404エラーをスローするようにします。
こうすれば、GETメソッドでアクセスした場合、404エラーページが表示されるようになります。
また、以下の方法でもGETでのアクセス可を回避できます。
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 |
<?php /** * サンプルクラス */ class Controller_Sample extends Controller_Hybrid { /** * アクションインデックス */ public function action_index() { // 省略 } /** * アクションrastaメソッド */ public function action_rasta() { if( Input::method() != 'POST' ) { throw new HttpNotFoundException; } // 省略 } } |
ちなみに、RestコントローラでPOSTメソッドのみ用意した場合、そのURLにGETでアクセスすると405エラーになります。
しかし、405エラーだとユーザにわかりにくくなるので、404エラーを返したほうが親切です。
なぜ、405エラーだとダメなのかというと、405エラーの場合、特に設定しなければ真っ白い画面が表示されてしまうからです。
ユーザからして見れば、ポルナレフのような状態になってしまいます。
403エラーも同じ理由で404エラーを返したほうがいいです。
さらに403エラーは。404エラーを返したほうがセキュリティが向上します。
今回はPOSTのみ用意してGETでのアクセスを回避するというものですが、逆もまた然りです。
GETのみ用意して、POSTのアクセスを禁止したい場合でも似たようなことを行なって下さい。
500エラーをスローする
1 |
throw new HttpServerErrorException; |
上記で500エラーを投げることが出来ます。
500エラーがスローされた場合、アプリケーションを停止し、専用のページを表示します。
こっちは、スローしなければならない状況が多すぎるためサンプルは割愛します。
パッと思いつくのが、送信されたファイルのデータが大きすぎて処理しきれないとかですかね。
何かしらのデータやファイルを送信したけれど、規格外のものが送られてきて処理しきれないから、ユーザに警告を出すという使い方が多いと思います。
ユーザに知らせるのは404と500だけでいいと思いますが、それだけではデバッグするときは非常に不便です。
ですので、開発環境と製品環境で返すエラーを切り替えるという処理が必須になります。
モードによる処理の切り替えは前回説明しました。
後は404と500以外のエラーを発生させる方法だけですね。
その方法は、長くなるので次で説明します。
では、おやすみなさい。
チュートリアル モードを切り替える
0前 チュートリアル 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 'いったい何を宣言したんですか!'; } } |
これが全てです。
特に説明することはありません。
では、おやすみなさい。
FuelPHP tips Uploadクラス
0FuelPHPでのアップロードについて書きます。
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打ち込めば見れちゃいますよ
チュートリアル css と javascript のリンク方法
0
おはようございます。ゆうきんだぜぇ。ワイルド(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で用意されている関数だろうが、独自に作った関数だろうがビューで呼び出せるので、覚えておくとプログラミングの幅が広がるかもしれません。
では、おやすみなさい。
インストール (ダウンロード版)
0こちらにて、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 |
ね、すぐ終わったでしょ。
チュートリアル モジュールとは
0次 チュートリアル css と javascript のリンク方法
おはようございます。さっそくネタが尽きたゆうきんです。
今回はモジュールについて説明します。
モジュールとは、「いくつかの部品的機能を集め、まとまりのある機能を持った部品のこと」だってwikipediaさんが言ってました。
FuelPHPでもこのモジュールを作る機能が用意されています。
FuelPHPでいうところのモジュールとは、MVCそれぞれのファイルをひとまとめにしたものです。
これでファイル数が増えて非常に見づらくなる問題も解決することができます。
モジュールの作成方法
まずは、 fuel/app/modules/ に任意の名前でフォルダを作ります。
今回は rasta という名前にします。
そして、 rasta の中に classes, config, lang, views とういフォルダを作り、さらに classes の中に controller, model, view というフォルダを作ります。
・・・・・・・・・図で表します。
1 2 3 4 5 6 7 8 9 10 11 |
fuel └app └modules └rasta ├classes │├controller │├model │└view ├config ├lang └views |
最終的に、こんな階層になります。
もうお分かりでしょうが、この新しいフォルダの中にコントローラとモデルとビューを追加していくのです。
モジュールを使った時のURL
通常 コントローラ名/メソッド名 がURLになってましたが、モジュール内に作ったコントローラにアクセスしたい場合は、 モジュール名/コントローラ名/メソッド名となります。
私の環境で rasta というモジュールの、 sample というコントローラの test というメソッドにアクセスしたい場合、 http://localhost/fuelphp/rasta/sample/test という感じになります。
モジュール内のconfigファイル
モジュールを作ったとき、 config フォルダを作りました。
この中に config.php や routes.php を配置した場合、 fuel/app/config/ 内の設定項目とかぶりがあった場合、モジュール内の設定が優先されます。
つまり、モジュール内のファイルで404エラーが発生した時に、飛ばすページを通常と切り替えることが可能になったりします。
以上で、モジュールの説明は終わりです。
では、おやすみなさい。
チュートリアル ルーティング
0前 チュートリアル RestコントローラとHybridコントローラ
おはようございます。ゆう☆きんです。
今回はルーティングについて説明したいと思います。
FuelPHPでは fuel/app/config/routes.php を編集することでルーティング設定が行えます。
では、どのように編集すればいいのか見て行きましょう。
※ルーティングについての説明はURLを多用し、非常にめんどいので http://localhost/fuelphp ではなく http://example/ とします。
基本的なルーティング
1 2 3 4 5 |
<?php return array( 'login' => 'user/login', ) |
この場合、 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:]]+ |
これだけ書くとちょっと意味わかんないんでサンプル。
1 2 3 4 5 6 7 8 9 10 |
<?php return array( '_root_' => 'welcome/index', // The default route '_404_' => 'welcome/404', // The main 404 route 'yugi/(:any)' => 'sample/shodai/$1', // (1) '(:segment)/judai' => 'sample/gx/$1', // (2) '{:num}/yusei' => 'sample/5ds/$1', // (3) ); |
この場合、 http://example/yugi/hitode で(1)にルーティングされます。
ルーティング処理は上から順に実行されます。
なので、 http://example/yugi/judai でも(2)ではなく(1)にルーティングされるので注意です。
http://example/haou/judai の場合は(2)に、 http;//example/123/yusei の場合は(3)にそれぞれルーティングされます。
ここからは高度なルーティングについて説明します。
名前付きパラメータ
名前付きパラメータとは、URIのセグメントに名前を付けるものです。
パラメータは : (コロン)を付けることで表せます。また、パラメータ名に数字を使うことができません。
というわけでサンプル。
1 2 3 4 5 6 7 8 9 10 |
<?php return array( '_root_' => 'welcome/index', // The default route '_404_' => 'welcome/404', // The main 404 route 'cal/:year/:month/:day' => 'sample/cal', // (1) 'cal/:year/:month' => 'sample/cal', // (2) 'cal/:year' => 'sample/cal', // (3) ); |
例えば、 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メソッドの使用
サンプル。
1 2 3 4 5 6 7 8 9 10 11 |
<?php return array( '_root_' => 'welcome/index', // The default route '_404_' => 'welcome/404', // The main 404 route 'sample/(:any)' => array( array('GET', new Route('data/get/$1')), array('POST', new Route('data/post/$1')) ), ); |
http://example/sample/abc にGETでアクセスすれば http://example/data/get/abc にルーティングされ、
http://example/sample/abc にPOSTでアクセスすれば http://example/data/post/abc にルーティングされます。
つまりそういうことです。
名前付きルート
サンプル。
1 2 3 4 5 6 7 8 |
<?php return array( '_root_' => 'welcome/index', // The default route '_404_' => 'welcome/404', // The main 404 route 'rasta/yukin' => array('yukin/index', 'name' => 'yukin'), // (1) ); |
この場合、 http://example/yukin/index にアクセスすると http://example/yukin/index にルートされます。
そして、そのルートに対して yukin という名前を付けていることになります。
これで何が出来るかというと、 Router::get(‘ルート名’); でURLを生成できるようになるので、下記のようなことが可能です。
1 2 3 4 5 6 7 8 9 10 11 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>リンクの生成</title> </head> <body> <?php echo Html::anchor(Router::get('yukin'), 'ゆうきんのページ'); ?> </body> </html> |
Html::anchor とはリンクを生成するメソッドです。
第1引数でURLを指定し、第2引数でリンク名を指定します。
この場合、 Router::get(‘yukin’) で生成したURLを渡してるわけです。
このようにすることが可能ですので、例えば rasta/yukin から rasta/member/yukin にしたいなぁとなったとき、
ルーティング設定だけ更新すればいいので、ビューを弄る必要がありません。
同じURLを複数のビューでリンクするとき、複数のビューを直す手間が省けます。
名前付きルートを使用するときの注意ですが、正規表現や名前付きパラメータが使用出来ません。※現在 FuelPHP 1.2
以上でルーティング設定の説明を終わります。
コントローラ名/メソッド名で生成されるURLだけでは限界があるので、是非活用して下さい。
では、おやすみなさい。
チュートリアル RestコントローラとHybridコントローラ
0
おはようございます。かつてゆうきんと呼ばれていたものです。
今回は、規約その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 でポストされたデータをチェックし、正しければログイン処理を実行する、などです。
覚えておくと非常に便利なものなので、有効活用して下さい。
では、おやすみなさい。