Nikolino
@Nikolino

Как делать валидацию форм в PHP(MVC)?

Пишу простой Url Shortener используя ООП и MVC (для тренировки). Чувствую что где-то навелосипедил. Вроде как не правильно писать всё в одном методе и лучше разделять на методы отвечающие за конкретное действие, но чувствую что неправильно в валидаторе кучу exit'ов и include'ов. Новичок еще, подскажите как правильно или как сделали бы вы.

Модель:
public function validateUrl($request)
    {
        if(isset($request['addurl'])) {
            if(!empty($request['url'])) {
                if (strpos($request['url'],'http') === false) {
                    $error = 'Введите корректный URL начинающийся с http(s)';
                    include_once (ROOT . '/app/Views/index.phtml');
                    exit();
                } else {
                    return $this;
                }
            } else {
                $error = 'Вы ничего не ввели, введите URL адрес';
                include_once (ROOT . '/app/Views/index.phtml');
                exit();
            }
        }
    }

    public function addUrl($request)
    {
        $this->validateUrl($request);
        $randomString = bin2hex(random_bytes(6));
        $this->checkIfUrlExists($request['url'], $randomString);
        include_once (ROOT . '/app/Views/index.phtml');


View:
<body>
<div class="container">
<h1 class="mt-4">Сокращатель ссылок</h1>
    <h5 class="mt-4">Введите URL адрес и получите короткую ссылку:</h5>
    <form action="/addurl/" method="post" class="form-group">
        <div class="form-group">
            <input type="text" name="url" placeholder="Введите url" class="form-control" <? echo !empty($request['url']) ? "value=\"" . $request['url'] . "\"" : null ?>>
        </div>
        <input type="submit" name="addurl">
    </form>
    <p><? if (!empty($error)) echo $error; ?></p>
</div>
</body>
  • Вопрос задан
  • 380 просмотров
Пригласить эксперта
Ответы на вопрос 1
customtema
@customtema
arint.ru
Норм.

Если смущает, поделите на контроллер и две модели.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы