endeavort
@endeavort

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Laravel におけるデフォルト値について

解決したいこと

ラジオボタンのデフォルト値を設定したい

例)
LaravelでWebアプリをつくっています。
機能の修正中にエラーが発生しました。
解決方法を教えて下さい。

発生している問題・エラー

現在はデフォルト値が無制限となっているが、基本は無制限にしたくないので
「設定する」の回数は空白にしたい

該当するソースコード

<th>利用上限</th>
    <td>
        @php
        $default_use_limit = isset($ticket->use_limit) ? old('use_limit', $ticket->use_limit) :
        old('use_limit');
        $is_active_use_limit = $default_use_limit || old("use_limit_toggle");
        @endphp

        <label class="mr-3">
            <input type="radio" value="0" name="use_limit_toggle" class="form_toggle_radio" {{
                !$is_active_use_limit ? "checked" : "" }}>
            <span>無制限</span>
        </label>
        <label>
            <input type="radio" value="1" name="use_limit_toggle" class="form_toggle_radio" {{
                $is_active_use_limit ? "checked" : "" }}>
            <span>設定する</span>
        </label>

        <div class="input_container mt-3">
            <input type="number" name="use_limit" value="{{ $default_use_limit }}">
            <span class="pl-2"></span>
        </div>

        @error('use_limit')
        <p class="error_text">{{ $message }}</p>
        @enderror
    </td>

自分で試したこと

$default_use_limit = old('use_limit', $ticket->use_limit ?? ' ');

と修正したところ、新規作成のデフォルト値は確かに期待通りになったが、既存のチケットを編集する際も全て、「設定する」の回数は空白になってしまうので、こちらは既存の値を表示するようにしたいです。

なお、新規作成画面と編集画面はどちらも_form.blade.phpを利用しており、無制限の場合はnull、設定するの場合はその整数がデータに反映されるようになっています。

0

1Answer

こんな感じならどうでしょうか?(手元のパソコンで試せないので動作の保証ができないので申し訳ないです,)

<th>利用上限</th>
    <td>
        @php
-        $default_use_limit = old('use_limit', $ticket->use_limit ?? ' ');
+        $default_use_limit = old('use_limit', $ticket->use_limit ?: ' ');
-        $is_active_use_limit = $default_use_limit || old("use_limit_toggle");
+        $is_active_use_limit = old("use_limit_toggle",  $default_use_limit);
        @endphp

        <label class="mr-3">
            <input type="radio" value="0" name="use_limit_toggle" class="form_toggle_radio" {{
                !$is_active_use_limit ? "checked" : "" }}>
            <span>無制限</span>
        </label>
        <label>
            <input type="radio" value="1" name="use_limit_toggle" class="form_toggle_radio" {{
                $is_active_use_limit ? "checked" : "" }}>
            <span>設定する</span>
        </label>

        <div class="input_container mt-3">
            <input type="number" name="use_limit" value="{{ $default_use_limit }}">
            <span class="pl-2"></span>
        </div>

        @error('use_limit')
        <p class="error_text">{{ $message }}</p>
        @enderror
    </td>

1Like

Comments

  1. @endeavort

    Questioner

    $default_use_limit = old('use_limit', $ticket->use_limit ?: ' ');
    

    こんなやり方があったんですね!
    ありがとうございます!

  2. すみません,調べたら???:も同じようでした。
    個人的に?:は三項演算子と形が近く,直感的だったので使ったいたのですが,??でも良いみたいです。

    となると,提示した方法ではうまくいかなさそうです。申し訳ないです。

Your answer might help someone💌