実現したいこと
POSTされたinput[type="text"]がdisabled状態であるか、空であるかを区別し、処理を分岐したいと思っています。
editアクションで使用をしたく、以下の仕様を考えています。
- DBに値がセットされていればtextをdisabled属性にする
- ユーザーは値を上書きする時はdisabledを解除し、別の値の入力または入力値を空にする操作ができる
- submitされupdateアクションが実行されたとき、disabledなら更新しない、空文字なら値をNULLに上書きする
環境
Laravel:6.x
PHP:7.x
サーバー:Apache 2.4.x / Amazon Linux 2
発生している問題
試したところ生PHPではdisabledの場合null、空の場合は空文字('')となり区別が可能でしたが、Laravelでは全てnullになってしまうようです。調べましたらConvertEmptyStringsToNullが働いているためらしいとわかり、Kernel.phpでコメントアウトしました。ところが今度は全て空文字になってしまい、やはり区別ができません。
生PHPではできるけれど、Laravelでは不可能なのでしょうか?それとも設定変更などで可能でしょうか?
該当のソースコード
edit.blade.php
PHP
1<form method="post"> 2 @foreach ( $user as $key => $column ) 3 {{ Form::text($key, $column, isset($column) ? ['disabled' => null] : null }} 4 @endforeach 5 <button type="submit">送信</button> 6</form>
UserController.php
PHP
1public function edit($id) 2{ 3 return view('edit', [$user => User::find($id)->toArray()]); 4 //以下の値が入っていると仮定します。 5 // $user['column1'] = '1234'; 6 // $user['column2'] = null; 7} 8public function update(Request $request, $id) 9{ 10 dump($request->all()); 11 // array:2 [ 12 // "column1" => "" 13 // "column2" => "" 14 // ] 15}
生PHPの場合
PHP
1<?php 2echo 'EMPTY:<br>'; 3var_dump($_POST['empty']); 4echo '<br>'; 5echo 'DISABLED:<br>'; 6var_dump($_POST['disabled']); 7echo '<br>'; 8// EMPTY: 9// string(0) "" 10// DISABLED: 11// NULL 12?> 13<form method="post"> 14<input type="text" name="empty"> 15<input type="text" name="disabled" value="1234567890" disabled> 16 <input type="submit"> 17</form>

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。