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?
2 Antworten
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>
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>
Neue Fragen
php
PHP ist eine weit verbreitete, übergeordnete, dynamische, objektorientierte und interpretierte Skriptsprache, die hauptsächlich für die serverseitige Webentwicklung entwickelt wurde. Wird für Fragen zur PHP-Sprache verwendet.