如果选择了“别人”,我如何挂载/保存输入字段值?
主计长:
public Applicant $applicant;
public $eligibilityInput;
public function mount(Applicant $applicant)
{
$this->applicant = $applicant;
if ($this->applicant->eligibility === 'Others'){
$this->applicant->eligibility = $this->eligibilityInput;
}
}
刀片:
<div class="form-group {{ $errors->has('applicant.eligibility') ? 'invalid' : '' }}">
<label class="form-label required">{{ trans('cruds.applicant.fields.eligibility') }}</label>
<select class="form-control" wire:model="applicant.eligibility">
<option value="null" disabled>{{ trans('global.pleaseSelect') }}...</option>
<option value="option1" >option1</option>
<option value="option2" >option2</option>
<option value="Others" >Others</option>
</select>
<div class="validation-message">
{{ $errors->first('applicant.eligibility') }}
</div>
<div class="help-block">
{{ trans('cruds.applicant.fields.eligibility_helper') }}
</div>
@if ($applicant->eligibility === 'Others')
<div class="form-group" style="display: block;">
<label class="form-label required" for="eligibilityInput">Input Eligibility</label>
<input class="form-control" type="text" wire:model="eligibilityInput" name="eligibilityInput" id="eligibilityInput" style="text-transform:uppercase">
</div>
@endif
</div>
提交时,当我需要Others
作为输入字段值时,它将被保存。任何帮助都将不胜感激。
发布于 2022-06-12 22:46:38
由于您不想保存Others
值,但是您使用它来签入视图,所以在以mount()
输出数据之前,以及在保存数据之前,您必须对数据进行稍微的操作。
我不知道剩下的代码是什么样子,所以这里有一些示例代码,我假设数据是在调用save()
方法时保存的。
在这里,我们最初将来自eligibility
属性和eligibility
属性的输入值设置为Others
,如果该值不在select中的一个有效选项中。
然后,当您保存数据时,您需要进行相反的操作--如果eligibility
等于Others
,则从输入中保存值。
如果可以从select中选择更多选项,则需要在!in_array()
中更新mount()
中的数组。
public function mount(Applicant $applicant)
{
$this->applicant = $applicant;
// Set the value of the input and fake the "Others" option selection
if ($this->applicant->eligibility && !in_array($this->applicant->eligibility, ['option1', 'option2'])) {
$this->eligibilityInput = $this->applicant->eligibility;
$this->applicant->eligibility = 'Others';
}
}
public function save()
{
// When the value is Others, we actually save the input instead
if ($this->applicant->eligibility === 'Others') {
$this->applicant->eligibility = $this->eligibilityInput;
}
$this->applicant->save();
}
如果保存后没有重定向,则可能应该在保存后重置sate,就像在mount()
中那样,这样用户就不会有任何变化,如下所示
public function mount(Applicant $applicant)
{
$this->applicant = $applicant;
// Set the value of the input and fake the "Others" option selection
if ($this->applicant->eligibility && !in_array($this->applicant->eligibility, ['option1', 'option2'])) {
$this->eligibilityInput = $this->applicant->eligibility;
$this->applicant->eligibility = 'Others';
}
}
public function save()
{
// When the value is Others, we actually save the input instead
$resetState = false;
if ($this->applicant->eligibility === 'Others') {
$this->applicant->eligibility = $this->eligibilityInput;
$resetState = true;
}
$this->applicant->save();
if ($resetState) {
$this->applicant->eligibility = 'Others';
}
}
https://stackoverflow.com/questions/72597146
复制