【问题标题】:How to decrypt string only if string is not null/empty仅当字符串不为空/空时如何解密字符串
【发布时间】:2018-09-17 22:03:44
【问题描述】:

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

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

下面是刀片的一部分:

        <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-&gt;diversity-&gt;religion 是否不为空。

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

【问题讨论】:

  • 什么是$user?它是您的用户模型的实例还是其他什么?
  • @DarrylE.Clarke $user 是当前登录用户的一个实例,所以是用户模型。
  • 为什么不能使用 !empty?您可以在旧函数之前添加它。
  • 您也可以将该检查放入控制器而不是视图中,并将结果作为值传递给视图。
  • 酷,一个答案来了。

标签: php laravel laravel-5


【解决方案1】:

只需检查该值是否为空,然后再将其传递给解密:

<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-&gt;decrypted_religion 简单地传递给old 函数:

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

【讨论】:

    【解决方案2】:

    为了减少膨胀,您可以检查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>
    

    这使您可以将大部分逻辑保留在模型中并保持大部分整洁的视图(强烈推荐)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 2014-08-10
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      相关资源
      最近更新 更多