Ich habe den folgenden Arbeitscode in meiner create Ansicht

<div class="flex justify-between">
  <label class="inline-flex items-center">
    <input name="contact_preferences[]" @if(old('contact_preferences') && in_array('post', old('contact_preferences'))) checked @endif value="post" type="checkbox" class="form-checkbox"><span class="ml-2 text-gray-700">Post</span>
  </label>
  <label class="inline-flex items-center">
    <input name="contact_preferences[]" @if(old('contact_preferences') && in_array('email', old('contact_preferences'))) checked @endif value="email" type="checkbox" class="form-checkbox"><span class="ml-2 text-gray-700">E-Mail</span>
  </label>            
  <label class="inline-flex items-center">
    <input name="contact_preferences[]" @if(old('contact_preferences') && in_array('phone', old('contact_preferences'))) checked @endif value="phone" type="checkbox" class="form-checkbox"><span class="ml-2 text-gray-700">Phone</span>
  </label>
  <label class="inline-flex items-center">
    <input name="contact_preferences[]" @if(old('contact_preferences') && in_array('none', old('contact_preferences'))) checked @endif value="none" type="checkbox" class="form-checkbox"><span class="ml-2 text-gray-700">None</span>
  </label>
</div>

Wie Sie sehen können, verwende ich Kontrollkästchen, um die von einem Benutzer getroffenen Entscheidungen zu markieren. Aber meine if-Anweisung, diese Kontrollkästchen als checked anzuzeigen, wenn andere Validierungsregeln nicht eingehalten werden, erschüttert mein Gehirn ein wenig. es funktioniert, scheint aber unnötig lang zu sein.

Gibt es eine Klingenmagie, die ich tun kann und die mir nicht bewusst ist, um die Aussage überhaupt zu verkürzen?

0
Andy Holmes 9 Okt. 2020 im 18:28

2 Antworten

Beste Antwort

Sie sollten in der Lage sein, Ihren Zustand mithilfe eines null coalesce anstelle einer Überprüfung der Existenz des Eintrags:

<div class="flex justify-between">
  <label class="inline-flex items-center">
    <input name="contact_preferences[]" @if(in_array('post', old('contact_preferences') ?? [])) checked @endif value="post" type="checkbox" class="form-checkbox"><span class="ml-2 text-gray-700">Post</span>
  </label>
</div>

Und noch eine Option - ich wusste eigentlich nicht, dass Sie @if / @endif in einer einzigen Zeile wie dieser inline ausführen können. Was ich immer mache, ist ein einfaches ternär und Echo wie folgt:

<div class="flex justify-between">
  <label class="inline-flex items-center">
    <input name="contact_preferences[]" {{ in_array('post', old('contact_preferences') ?? []) ? "checked" : "" }} value="post" type="checkbox" class="form-checkbox"><span class="ml-2 text-gray-700">Post</span>
  </label>
</div>
1
miken32 9 Okt. 2020 im 16:26

Sie können eine Funktion erstellen, damit sie trockener wird:

 <div class="flex justify-between">
        <?php
            function isChecked($name){
                return old('contact_preferences') && in_array($name, old('contact_preferences')) ? 'checked': '';
            }
        ?>
        <label class="inline-flex items-center">
            <input name="contact_preferences[]" {{isChecked('post')}} value="post" type="checkbox" class="form-checkbox"><span class="ml-2 text-gray-700">Post</span>
        </label>
        <label class="inline-flex items-center">
            <input name="contact_preferences[]" {{isChecked('email')}} value="email" type="checkbox" class="form-checkbox"><span class="ml-2 text-gray-700">E-Mail</span>
        </label>
        <label class="inline-flex items-center">
            <input name="contact_preferences[]" {{isChecked('phone')}} value="phone" type="checkbox" class="form-checkbox"><span class="ml-2 text-gray-700">Phone</span>
        </label>
        <label class="inline-flex items-center">
            <input name="contact_preferences[]" {{isChecked('none')}} value="none" type="checkbox" class="form-checkbox"><span class="ml-2 text-gray-700">None</span>
        </label>
    </div>
0
Stano 9 Okt. 2020 im 15:48