Laravel 6中的数据屏蔽

问题描述 投票:0回答:1

[如何在laravel刀片中输出某些输入之前掩盖它们?我在App \ helpers.php中创建了一个函数,用于在刀片中输出电子邮件时屏蔽电子邮件ID。因为我有会员站点,所以会根据特定条件对用户应用字符掩码。

function mask_email($email, $masks = 15) {
    $array = explode("@", $email);
    $string_length = strlen($array[0]);
    if ($string_length < $masks)
        $masks = $string_length;
    $result = substr($array[0], 0, -$masks) . str_repeat('x', $masks);
    return $result."@".$array[1];
}

是否有任何有效的doind = g方法而不是我在做什么?

php laravel data-masking
1个回答
0
投票

1)遮罩

所以我假设您要尝试的是将@之前的每个字符替换为x

您可以使用Str帮助程序类来完成此操作>

$prefix       = Str::before($user->email, '@');
$replacement  = str_repeat('x', strlen($prefix));
$domain       = Str::after($user->email, '@');
$masked_email = $replacement . '@' . $domain;

2)演示

您可能会发现有用的便捷包是Laracasts/Presenter,它充当模型的表示层。

User模型为例,您可以在UserPresenter中执行类似的操作>

namespace App\Presenters;

use Laracasts\Presenter\Presenter;

class UserPresenter extends Presenter
{
    public function maskedEmail()
    {
        $prefix       = Str::before($user->entity->email, '@');
        $replacement  = str_repeat('x', strlen($prefix));
        $domain       = Str::after($user->entity->email, '@');
        $masked_email = $replacement . '@' . $domain;

        return $masked_email ;
    }
}

如果要显示给定用户的电子邮件,则可以在刀片服务器模板中执行此操作:

{{ $user->present()->maskedEmail }}

3)摘要演示者

如果您有多个演示者使用相同的方法,则可能需要考虑制作AbstractPresenter,如下所示:

AbstractPresenter.php

namespace App\Presenters;

use Laracasts\Presenter\Presenter;

abstract class AbstractPresenter extends Presenter
{
    public function maskedEmail()
    {
        ...
    }
}

namespace App\Presenters;

use App\Presenters\AbstractPresenter;

class AbstractPresenter extends AbstractPresenter
{

}

© www.soinside.com 2019 - 2024. All rights reserved.