質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

3714閲覧

Laravel5.5にて、戻るボタン押下時は必須入力を要求しない方法

gobindar

総合スコア51

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/01/18 04:48

編集2019/01/18 05:13

お世話になっております。
当方Laravel5.5にてWebSiteを構築しております、
環境はmac OS Mojave10.14.2
ブラウザはGoogle Chrome バージョン: 71.0.3578.98になります。

やりたいこと

サイトのユーザーのプロフィールを表示編集する機能があり、
プロフィールの編集画面にて、入力項目に対してviewでrequiredを付与しています。
編集画面には戻る(「マイプロフィールへ」)ボタンと確認ボタンがあり、
戻るボタン押下時には必須入力は要求されないようにしたいのですが、
どのように実装すればよいでしょうか。
view側でrequiredではなく、controllerにて必須入力をチェックするしかないでしょうか。

現状

入力項目が空白のまま、プロフィールの編集画面にて、「マイプロフィールへ」を
押下すると同時に、「必須入力です」の注意が項目に表示されます。

編集画面のview

php

1 @section('content') 2 <form action="{{ route('edit_myprof_confirm') }}" method="post"> 3 {{ csrf_field() }} 4 5<table class="span_upload"> 6 <tr> 7 <th>項目A<div class="badge badge-dark float-right">必須</div></th> 8 <td><textarea name="a" class="w-50" type="text" rows="1" required>{{ old('a') }}</textarea></td> 9 </tr> 10 <tr> 11 <th>項目B<div class="badge badge-dark float-right">必須</div></th> 12 <td><textarea rows="5" name="b" required>{{ old('b') }}</textarea></td> 13 </tr> 14</table> 15 16@endsection 17 18@section('button') 19 @component('common.btn_two_component') 20 @slot('btn_left') 21 マイプロフィールへ 22 @endslot 23 24 @slot('btn_right') 25 確認 26 @endslot 27 28 @endcomponent 29 </form> 30@endsection 31

ボタンコンポーネント

php

1<div class="col-6 both-side-padding"> 2 <div class="button_wrapper_left"> 3 <button type="submit" name="action" value="back" class="btn-outline-success btn btn_flat"> 4 {{$btn_left}} 5 </button> 6 </div> 7</div> 8<div class="col-6 both-side-padding"> 9 <div class="button_wrapper_right"> 10 <button type="submit" name="action" value="submit" class="btn-outline-success btn btn_flat"> 11 {{$btn_right}} 12 </button> 13 </div> 14</div>

宜しくお願い致します。
お世話になっております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

今のコードだけ見ると、戻るボタンはtype=submitで<form action="{{ route('edit_myprof_confirm') }}" method="post">
の中に居るので、仮にrequiredを外したところで戻れなさそうに見えますね・・・?

入力フォーム系(<input>とか)のタグに付けるrequired
それが属する<form>が送信される前に入力有無のチェックがされることになります。
なので、requiredを持つタグが属する<form>を送信せずに戻れる仕様へ変更すべきかと思います。

例えば
戻るボタンを、type=buttonに変更して、ページ移動の処理は別途書くとか、
戻るボタンを、別のformに設置するとか(※<form>タグは入れ子にしないように注意してくださいね)、、、

それと、質問の主旨とはちょっと違いますが。

view側のrequiredもいいのですが、コントローラー側での入力チェックも大切です。
勝手にrequiredを削除して送信するような、悪意あるユーザが現れるかもしれませんしね^^;


コメント見ましたので、追記いたします。

仮に画面に下記の4つがあるとして、

1.マイプロフィール
2.マイプロフィール編集:入力(戻るボタン・進むボタン)
3.マイプロフィール編集:確認(戻るボタン・進むボタン)
4.マイプロフィール編集:完了

コントローラーの中で分岐、・・ということは、例えば
2の画面上で戻るボタンを押した場合、3の処理で、action=backなら1にリダイレクトさせている・・という感じなのでしょうか?

先ほど調べていて見つけたのですが、requiredは、button=submitを押したときにしか、チェックされないようなので(私も今日知りました・・^^;回答しておきながらすみません・・)、
一番早い解決方法は、やはり戻るボタンは、type=buttonに変更して、onclickに$(this).parents('form').submit();とか書いてしまう方法かもです。。。(jqueryが使えないなら、formに名前でもつけてjavascriptで)

この場合、actionには値がPOSTされませんので、それを分岐の条件にすれば良いかなと。
(あくまで一番早い解決策であって、良い策とは言いませんが)

=========================================================

確認画面→完了画面の際は、戻るもsubmitでないとold inputを取得できない

こういう実装方法を取ったことが無いので、どういう状況からそう判断されたのか分かりませんが、
明示的にリダイレクトさせた先で、渡された値も引き継ぎたい場合は、そうできるように指定してリダイレクトさせるのが正しいと思います。(ボタンが変わっただけで取得できないのでは困るので)

php

1return redirect('リダイレクト先')->withInput();

そもそものお話をすると、(私の考えですが、)
「入力画面」の「戻る」機能は、「戻りたいURLへのリンク」で充分だと思いますし、
「確認画面」から「入力画面」へ「戻る」時も、一度「完了画面にPOSTしてから入力画面にリダイレクト」ではなく、直接「入力画面にPOSTする」方が単純で簡潔ですよね?

今の状態は、どうにもボタン部分をcomponentで使いたいがゆえに、プログラム側が複雑になってしまっているようにしか見えないので、本末転倒というかなんというか・・・といった印象です^^;

「どこからどこまでをコンポーネント化し、処理をどう分けるか」

は、「それによってプログラム側が複雑化しない」ことも、判断材料のひとつにすると良いかもしれません。

投稿2019/01/18 05:36

編集2019/01/18 09:45
mix-peach

総合スコア1910

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gobindar

2019/01/18 07:08 編集

mix-peach様 ご回答有難うございます。 現在のコーディングでは、Controllerにて、valueがbackかsubmitなのかで 分岐させております。 質問に記載させていただきましたボタンのコンポーネントは、 戻る・進むのある全ての画面で使用を想定していて、 確認画面→完了画面の際は、 戻るもsubmitでないとold inputを取得できないと思っているのですが、 正しいでしょうか? もしそうだとしたら、下記3つのうちどれかになる、という認識で正しいでしょうか・・・? 1.確認画面→完了画面のボタンと、入力画面→確認画面のボタンは別々に作成する (確認画面→完了画面は両方submitでいいが、入力→確認画面は戻るボタンをtype=buttonにする) 2.戻るボタンは別のformにする 3.ボタンは両方submitのままとし、viewでのrequiredは撤廃し、一律でController側で処理する 当方完全初心者のため、こういった場合に 「どこからどこまでをコンポーネント化し、処理をどう分けるか」 に判断がつかず、なかなか難しいところです、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問