Маскировка данных в laravel 6 - PullRequest
0 голосов
/ 10 марта 2020

Как замаскировать определенные входы, прежде чем они будут выведены в laravel блейд? Я создал функцию в App \ helpers. php для маскировки идентификатора электронной почты при выводе его в блейд. Маска символов будет применяться на основании указанного c условия в отношении пользователя, поскольку у меня есть сайт участника.

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 Ответ

0 голосов
/ 10 марта 2020

1) Маскировка

Поэтому я предполагаю, что вы пытаетесь заменить все символы перед @ на x?

You может сделать это с помощью 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
{

}

...