【PHP】リクエストセッションの値が取得出来ないことがあるパターン【Laravel】


同僚がハマっていたのでヘルプで入って見たらこうなってたよ っていうメモ

問題

コントローラーで保存したはずのリクエストセッションが取得出来ない。
(そもそも保存出来てない?)

コード

hoge.blade.php

@extends('base')
@section('content')

<form>
 <input type="text" name="name">
 <input type="text" name="age">

 <button type="button" onclick="postNext()">Next</button>
</form>

@endsection

@section('js')
  <script type="text/javascript" src="js/hoge.js"></script>
@endsection

hoge.js
function postNext() {
  $('form').attr('action', postUrl);
  $('form').submit();
}

色々と端折っているものの、正常に動く形です。

原因

chromeのdeveloper toolsでNextを押下した時のNetworkタブを確認していたら画面遷移直前でerrorのpostを発見。

継承しているbase.blade.phpの中に<form> ~ </form>が存在していた。
その状態でタグ指定でsubmitしていたため、正常なsubmitと不正なsubmitを同時に行っていた。
(成功するパターンもあったのが、ここら辺の判断をどうやっているかまでは追っていない)

修正

本来postされるべきformにIDを付けてJSファイルをタグ指定ではなく、ID指定でsubmitするようにした。

あとがき

同僚がなぜこのような実装したかまでは言及していない。(めちゃくちゃ切迫したスケジュールの中で頑張ってるので聞けなかった)
個人的にはjsでsubmit記述する必要があるのかな?とも思った。

submit前に処理を入れたかったとしても以下の形で良い気がする

$('#hoge_form').submit(function() {
  ~
});

あんまりこういう事はないと思うけど、一体験談として。