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
{
}