Ларавел 5.8. Как обрезать http во время проверки и проверить уникальность в таблице? - PullRequest
0 голосов
/ 24 мая 2019
  1. есть таблица магазинов, в которой мы храним URL с уже отрезанными HTTP и https.Например: rozetka.ua, comfy.ua
  2. с фронта до запроса на проверку, URL, который еще не был обработан, приходит с HTTP или https.Например http://rozetka.ua
  3. Как проверить сайт на уникальность?Проверка с проверкой URL, опция с предварительным HTTP не подходит.
  4. Поскольку сайт уже настроен на работу с ошибками и перехватом переднего и обратного подтверждения, необходимо добитьсяусловие, что при проверке запроса это ошибка, как будто уникальная.Это состояние 422 и соответствующий объект ошибки.

До сих пор я оставался на этой опции:

return [
    'url' => [
        'required',
        'string',
        'url',
        'max:255',
        function ($attribute, $value, $fail) {
           $url = parse_url($value, PHP_URL_HOST);
           if (Store::where('url', $url)->count() > 0) {
              $fail('The ' . $attribute . ' has already been taken.');
           }
        },
    ],
]

1 Ответ

1 голос
/ 24 мая 2019

Попробуйте:

return [
    'url' => [
        'required',
        'string',
        'url',
        'max:255',
        'unique:NAME_OF_THE_TABLE,NAME_OF_THE_COLUMN',
    ],
]

Ссылка

Или вы можете создать собственное правило:

php artisan make:rule UniqueUrl
//UniqueUrl class

public function passes($attribute, $value)
{
    $url = str_replace(parse_url($value, PHP_URL_SCHEME) . '://', '', $value);
    return Store::where('url', $url)->count === 0; //true if there is no such url, false if there is at least one
}

и использоватьэто:

return [
    'url' => [
        'required',
        'string',
        'url',
        'max:255',
        new UniqueUrl,
    ],
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...