我有一个表格,用户可以随时返回并完成。我有一个选择框,特别是其中包含需要加密的数据。
我遇到的问题是,因为此字段是可选的,所以有时该字段可以为空/空,因此我的页面因错误“有效负载无效”而失败。我假设这是因为它试图解密一个为空的字段,因此它不能。
这是下面刀片的一部分:
<label for="religion">Religion</label>
<select class="form-control" name="religion" id="religion">
<option value="" selected>Choose...</option>
<option value="Religion 1" @if(old('religion', decrypt($user->diversity->religion) === "Religion 1")) selected @endif>Religion 1</option>
<option value="Religion 2" @if(old('religion', decrypt($user->diversity->religion) === "Religion 2")) selected @endif>Religion 2</option>
</select>
因为如果验证失败,我还使用old()
函数也返回字段的值,所以我无法使用empty()
进行if语句来检查$user->diversity->religion
是否为不是空的。
有没有一种方法可以使我的刀片不会太肿。如果有一种方法只能在字符串不是空/空的情况下解密,那将是理想的。
答案 0 :(得分:3)
只需在将该值传递给解密之前检查该值是否为空:
<option value="Religion 1" @if(old('religion', empty($user->diversity->religion) ? '' : decrypt($user->diversity->religion) === "Religion 1")) selected @endif>Religion 1</option>
或者,如果您想获得更多便利,可以在用户模型中添加访问器方法:
public function getDecryptedReligionAttribute()
{
return empty($this->diversity->religion) ? '' : decrypt($this->diversity->religion);
}
这将使您可以简单地将$user->decrypted_religion
传递给old
函数:
<option value="Religion 1" @if(old('religion', $user->decrypted_religion) === "Religion 1") selected @endif>Religion 1</option>
答案 1 :(得分:1)
为了减少膨胀,您可以将属性检查放入User
模型中。我不会编写所有代码,而是在User
中写一个存根:
public function decryptProperty($property) {}
您可以在此处检查是否设置了属性,将其解密并返回值。然后在您看来,您可以通过直接检查用户模型来减少膨胀:
<option value="Religion 1" @if(old('religion', $user->decryptProperty($user->diversity->religion) === "Religion 1")) selected @endif>Religion 1</option>
这使您可以将大多数逻辑保留在模型中,并保持整洁的视图(强烈建议)。