仅当字符串不为空/空时才解密字符串

时间:2018-09-17 13:47:29

标签: php laravel laravel-5

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

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

这是下面刀片的一部分:

        <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是否为不是空的。

有没有一种方法可以使我的刀片不会太肿。如果有一种方法只能在字符串不是空/空的情况下解密,那将是理想的。

2 个答案:

答案 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>

这使您可以将大多数逻辑保留在模型中,并保持整洁的视图(强烈建议)。