ちょっと本書から離れ気味になりますが、本書で遊んでいるうちにPCの調子が悪くなり、PCを変えたらVirtualBoxが動かなくなり、VirtualBoxとvagrantをバージョンアップしたら、sshに引っかかって七転八倒し、
何とか回復したと思ったら、
ここまでは確かめましたのさ。
で月を変えて表示。
あうち(>_<)
これって一応前のマシンで完成までもっていったはずで。。マシンを変えたときに何かアクシデントがあったか(例えば未完成の古いソースを持ってきたとか)、元々あるバグに気が付いていなかったのか。。
ま、プログラマのお仕事なんてバグとの闘いですよね。最初から最後までバグなしで作るなんて絶対不可能なわけで、というよりバグって当然、最初からすんなり動いたら奇跡ってなもんです。
今までたくさんの未経験者に教えてきて、一番大きな差が出るのが、このバグに出くわした時の対処じゃないかと思います。
確かにバグと一口に言っても、簡単なスペルミスから、かなり込み入ったものまで難易度は様々ですが、この程度の小さなプログラムでそうそう不可解なバグが出るのは稀なことです。
ここで、ちゃんとバグを追えるようになるかどうかで、プログラマとしての技量の伸びが分かるなぁ、と思ってきました。最初は横一線でも、段々と自分でバグを調べられる、あるいは現象を見て当たりをつけられるようになっていく人と、いつまで経ってもバグを目の前に茫然自失となる人です。
茫然自失する人には共通点があります。どのような不具合かをちゃんと説明できないのです。「動きません」といいます。
それはボタンを押しても「何も起きない」のか、エラー画面になるか、エラー画面だとしたらどんな画面なのか、その区分けが大事なのですが、その時点で目が点になってしまっています。
ここでは、この現象に対して、どのように対処を進めていくかをお見せするのもヒントになる人もいるかも知れない、と思いまして、開示することにしました。
ここにもすでにいくつか、ヒントが提示されています。
1)We can’t find that! 見つけられないと言ってる。何を?
2)URLを見るとlocalhost/honichi/putbotton となっている。
これが手掛かりです。FuelPHPは人に優しいですね。要するにputbuttonというactionが見つからないと言っています。これで少なくとも「表示」ボタンにはこのURLを投げるactionが割り付いていることは確かです。
このputbuttonは何を指すでしょう。
http://localhost/donichi/putbuttonは、
http://サーバ/プロジェクト/controller/action_indexを指し示します。これはFuelPHPのルールです。
しかし私はputbuttonというcontrollerを作った記憶がありません。
確か、putbuttonはlogin.php すなわちLoginコントローラの中の一メソッドとして書いた記憶があります。
そういう場合、URLとしては
http://localhost/donichi/calendar/putbutton
http://localhost/プロジェクト名/controller/アクションメソッド
という表記にならなければいけません。
そして、この
すなわち
まではどの機能でも必要なbase_urlになるので、いちいち書かなくても済むようにFuelPHPは設定するconfigファイルが存在します。
fuel/app/config/config.php
がそれに当たります。
26行目あたりに
// ‘base_url’ => null,
baseurlがコメントアウトされています。
一方、先ほどの「表示」ボタンで動くアクションがどう設定されているか見ます。
views/calendar/index.phpを見ると、
<form method=”post” action=”putbutton”>
こうなってました。単にputbuttonだけを指定しています。
このケースって微妙なんですよねー。。
最初の初期表示のときに
http://localhost/donichi/calendar
と書くか、
http://localhost/donichi/calendar/
と最後をスラッシュで締めくくるかで、動きが変わってしまうんです。
スラッシュで締めくくって初期画面を出します。
で、月を変えて表示ボタン押下。
今度は動いちゃいます。
この微妙さがいやなので、先に挙げたconfig.phpのbase_urlを生かします。
‘base_url’ => ‘http://localhost/donichi/’,
こうやっておき、フォームの方も追記します。
<form method=”post” action=”<?php echo Uri::base();?>calendar/putbutton”>
どんな指定をされても絶対パスで指定できます。
スラッシュで締めくくらない書き方で起動、
10月を指定して表示
どのような指定の仕方でも左右されなくなりました。
たしか、ここまで作ったとおもうのだがなぁ。。
ということで次回から日曜日編に戻ります。
ただ、日曜日編を単になぞるだけでは本書と本当に内容がダブってしまうため、追いかけて都度のトピックスや、いったん追いかけた後にまたアイデアが浮かんだら紹介してみたいと思います。
ということで、次回までまた暫時お時間をいただこととなります。