[如何在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方法而不是我在做什么?
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 { }