Как проверить строку в laravel - PullRequest
0 голосов
/ 07 мая 2020

У меня есть текстовое поле, в котором пользователь может массово добавлять клиентов. В текстовое поле они добавили бы таких клиентов

client 1,client1@domain.com,client username 1
client 2,client2@domain.com,client username 2
client 3,client3@domain.com,client username 3

Вот что у меня есть

    public function bulkClients()
    {
        $bulk =  request('bulk_clients');
        $split = explode("\n",$bulk);

        foreach($split as $row)
        {
            $split_row = explode(",", $row);
            $name = $split_row[0];
            $email = $split_row[1];
            $username = $split_row[2];

            $validate = Validator::make($email, [
                $email => 'email',
                $username => 'unique:App\User,username'
            ]);

            if($validate->fails())
            {
                $messages = $validate->messages();

                return response()->json([
                    'messages' => $messages
                ]);
            }
        }
    }

Я хотел бы знать, как я могу проверить это $email это электронное письмо или что $username уникален.

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

Вы найдете все доступные правила в документах :

$validate = Validator::make([ 'email' => $split_row[1],
                             'username' => $split_row[2]
               ], [
                'email' => 'string',
                'username' => 'unique:App\User,username'
            ]);

Однако для электронной почты я бы предпочел проверить, является ли это действительным адресом электронной почты, а не строкой. Таким образом, рекомендуется использовать

'email' => 'email'

.

0 голосов
/ 07 мая 2020

Я бы предложил использовать валидатор для всего массива вместо того, чтобы проверять его построчно:

$clients = Str::of(request()->get('bulk_clients'))
    ->explode("\n")
    ->map(fn ($value) => Str::of($value)->explode(','))
    ->toArray();

$validator = Validator::make(compact('clients'), [
    'clients'     => 'array',
    'clients.*.0' => 'required|string',
    'clients.*.1' => 'required|email',
    'clients.*.2' => 'required|unique:App\User,username',
]);
0 голосов
/ 07 мая 2020

Первый параметр Validator :: make должен быть массивом, а второй - правилами для ключей массива.

    public function bulkClients()
    {
        $bulk =  request('bulk_clients');
        $split = explode("\n",$bulk);

        foreach($split as $row)
        {
            $split_row = explode(",", $row);
            $client['name'] = $split_row[0];
            $client['email'] = $split_row[1];
            $client['username'] = $split_row[2];

            $validate = Validator::make($client, [
                'email' => 'email',
                'username' => 'unique:App\User,username'
            ]);

            if($validate->fails())
            {
                $messages = $validate->messages();

                return response()->json([
                    'messages' => $messages
                ]);
            }
        }
    }
...