php - laravel 6 中的数据屏蔽
问题描述
如何在 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];
}
有没有比我正在做的更有效的方法?
解决方案
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
{
}
推荐阅读
- git - gitignore 有什么用?
- javascript - 在我将 angualr 5 更新为 7 之后,同时在 angular 1.x 中运行 angular 5 时,无法实例化模块 $$UpgradeModule?
- magento-1.9 - magento 1.9 版 Transactional Email 模板内容大小限制
- node.js - 如何在对话流中制作水平轮播?
- in-app-purchase - 实施自动更新订阅
- java - 如何使用可分页和对象创建缓存键?
- swift - Swift:在 Mac 上检索文件图标时出现问题
- flutter - 如何检查用户名是否已存在于数据库中并验证没有空格的用户名
- javascript - 如何让用户的 gmail 使用我的应用程序脚本?
- scala - 如何读取带有分隔符 /u0001 的 .dat 文件并记录下一条记录将通过 scala 中的下一行分隔