fuelPHPでページを行ったり来たりする
前回はとりあえずページの表示をすることに成功しました。
ですが、たった1ページのサイトなんて基本的には存在しないわけで・・・世の中にあるサイトは大抵コンテンツページというものがトップページ以外にあるものです。
そこで複数ページ間の移動というのが必要になります。
ページの移動と言うとHTMLを書いたことがある人なら
<a href="~~~.html">リンク先</a>
という文が思いつくかと思います。
非常に簡単で覚えれば「これでページ遷移できる」となりますが他にもページ遷移する方法はあります。
今回紹介するのが<form>タグです。
fuelPHPを使う上で結構重要なHTMLタグになります。
今回はfuelPHPを使っていろいろやってみましょう。
<form>タグというのは入力や送信のフォームを作成するタグです。
検索サイトで検索する際に文字を入力する箱や検索ボタンがフォームになります。
では早速書いていきます。前記事で使ったtest/index.phpを改造していきます。
まずはViewsの方から。
直打ちするのもいいですがせっかくなのでfuelPHPの機能を使ってformを作ります。
<html>
<head>
<title>テストページ</title>
<meta charset="UTF-8">
</head>
<body>
<?php echo Form::Open('test/sub')."\n"?>
<?php echo Form::Submit('sub','SUB')."\n"?>
<?php echo Form::Close()?>
</body>
</html>
こう書いてindex.phpを開くとSUBと書かれたボタンが表示されます。
<?php ~~ ?>の中身はformタブを書くのに必要なものを関数化したものです。
表示したindex.phpのソースを開いてみると
<form action="http://サーバのIP、もしくはDNS名/test/sub" accept-charset="utf-8" method="post"> <input name="sub" value="SUB" type="submit" id="form_sub" /> </form>
こんな感じに変換されています。
このままSUBボタンを押すとfuelPHPのエラー画面が出てきます。
それもそのはず、転送先のsub.phpがまだ作られていないのですから。
続けてviewsにsub.phpを作成しましょう。
<html>
<head>
<title>サブページ</title>
<meta charset="UTF-8">
</head>
<body>
<?php echo Form::Open('test/index')."\n"?>
<?php echo Form::Submit('index','INDEX')."\n"?>
<?php echo Form::Close()?>
</body>
</html>
subやSUBの部分をindex、INDEXに書き直すだけでとりあえずOKです。
これでindex.phpから移動できる・・・と思いきやまだエラーが出ます。
アドレス部分の最後が/subになっている部分を/sub.phpを直してもダメです。
ファイル自体は存在しているはずなのにどうして?ってなるかもしれません。
先ほどのindexのソース文を見直して見てください。
その中にaction=という部分があります。その内容の文末が/test/subになっていますが・・・
この/test/subはViewsにある/test/sub.phpを参照しているわけではありません。
どこを見にいっているかというと
contorollerの/test.phpにあるaction_subというメソッドを参照しています。
つまりcontorollerで/test/subにアクセスしてきたらsub.phpを表示するという処理が無いため、
ファイルはあっても表示してくれないと言う訳です。
前記事にも書きましたが一つのページを作るのに必ずViewsとContorollerの編集が必要になります。
ではcontorollerのtest.phpを編集します。
Controller_Test extends Controller{}内に以下の文章を追加します。
public function action_sub()
{
return Response::forge(View::forge('test/sub'));
}
これでsubのページが表示され、indexと行き来できるようになりました。
今回は<form>でやりましたが、<a href></a>や<button onClick=~>でも同じです。
むしろ今回の記事だけではformを使った意味はあまりないです。
ですが、また別の記事でこれらを使い分ける必要があるというのを書いておきたいです。