首页 > 解决方案 > 仅当字符串不为空/空时如何解密字符串

问题描述

我有一个用户可以随时返回并完成的表单。我有一个选择框,特别是需要加密的数据。

我遇到的问题是,由于此字段是可选的,因此有时该字段可能为空/空,因此我的页面失败并显示错误“有效负载无效”。我假设这是因为它试图解密一个为空的字段,因此它不能。

这是下面刀片的一部分:

        <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()如果验证失败,我也使用该函数来返回字段的值,所以我无法执行 if 语句empty()来检查是否$user->diversity->religion不为空。

有没有办法做到这一点而不会使我的刀片过于臃肿。如果有一种方法只在字符串不为空/空时解密字符串,那将是理想的。

标签: phplaravellaravel-5

解决方案


只需在将其传递给解密之前检查该值是否为空:

<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_religionold函数:

<option value="Religion 1" @if(old('religion', $user->decrypted_religion) === "Religion 1") selected @endif>Religion 1</option>

推荐阅读