2015.10.29
0からはじめるPHP#48【アジャイルで作る掲示板#7-バリデーションバグ#1-】
今月中に掲示板を完成させられる算段でいたのですが、思わぬバグに苦戦することになったので、
愚痴として記事にします。(何)
ナンバリングタイトルにさらにナンバリングタイトルをつけているのですが
その上にナンバリングタイトルをつけるというのは頭おかしい感じがしますが、仕方ありません。
ただ、タイトルが複数行になっても困らないように日記は作ってあるので大丈夫です。
まぁ気になるようだったら文字を圧縮して無理矢理一行に収める方法も知ってるんで、はい。まぁそこまでしてこだわる必要もないかなということで。
で、どんなバグかっていうとですね。
バリデーションです。
バリデーションの基礎については
#33と
#43で触れていますし、基本的にこれで済みます。というか、これで済むからフレームワークというのが素晴らしいのです。
今作ってる掲示板の書き込み処理は、具体的にはこんな感じです。
1.記事投稿フォーム
=>2.[preview]にチェックが入っていたら、プレビュー画面を表示
3.投稿
|
ここで2.と3.でバリデーションを行います。
これが何故かバグります。
僕の書いたソースコードは以下のような感じです。
public function post(Request $request,Response $response)
{
//バリデーション処理
if(プレビューにチェックが入っており、かつプレビュー画面でない)){
//go to プレビュー
}else{
/*投稿*/
//クッキーに保存
//データベース格納
//リダイレクト
}
}
プレビューと投稿でメソッドを分ける必要はないので統合してるんですが、おそらくそれが良くないんでしょう。
でも、
バグを引き起こす原因とは思えないんですね。
で、実際どんなバグがでてくるのかというと
MethodNotAllowedHttpExceptionエラーです。
エラーの意味がちょっとよくわからないんですが、とりあえずトークンのエラーではないらしいです。
そこで紆余曲折し
フォームリクエストというものにたどり着きました。
引用元:Laravel 5.1 バリデーション
やるべきことはドキュメントを見れば簡単に理解できます。
要するにバリデーションをコントローラーから引っぺがすわけですね。
ってことで、実装してみました。
???????????
意味が分かりません。
なんでコントローラーを探しに行ってんだ?
この機能はLaravel5.1以降でしかサポートされていないらしいので
こちらを参考にアップグレードしたんですが、それでもこれです。
ちなみに、useでこのように指定するとアクセス自体はできますが
何故か"forbidden"が返ってきます。
リダイレクトレスポンスが生成されるんじゃなかったのか・・・・・・?謎は深まるばかりです。
こんなことをここ数日悩んでいまして、ここから作業が全く進まなくなりました。
ちょっと僕の持ってる知識では解決できず、ググってもどうにもならなかったので方針を変えます。
一旦プレビュー機能をサポート外にします。
今月中にこの掲示板を完成させ、基礎知識が身についた後に
ちょっと商業的なプロダクトに挑戦しようと思ってたんですが、計画が完全に破綻しましたね。
うーん・・・・・・。別に甘く見てたつもりじゃないし、ほんとに余裕だと思ってたんですが一体何が原因なんだろう・・・・・・。そんな難しいことしてないんだけどなぁ。はぁー・・・・・・。