В чем профит от создания html форм в php классах ?

Зачем создавать формы в php классах и тамже описывать их каждое поле?
Не понимаю в чем профит, если тоже самое спокойно пишется на html, разве что если писать формы "руками" страничка веб-приложения загрузится чуть быстрее.
  • Вопрос задан
  • 3115 просмотров
Пригласить эксперта
Ответы на вопрос 6
nobodynoone
@nobodynoone
Самый простой пример, это быстрая и удобная валидация, например в django это делается так

class AuthenticationForm(forms.Form):
    username = forms.CharField(max_length=254)
    password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)


Можно в коде использовать так

form = AuthenticationForm(request.POST) #передаю в форму POST запросы, можно и GET и вообще все что угодно. 
if AuthenticationForm.is_valid(): # если форма прошла валидацию, то делаем что то 
    pass


Это самый простой и понятный пример, который возможно вас не уговорит использовать формы, но тем не менее, это даст вам понять, что формы делаются не для того, чтобы были.

Вообще, в django формы это как и модели незаменимая вещь, которая довольно часто экономит десятки строк кода.

Если есть возможность использовать формы, используйте их!
Ответ написан
rdifb0
@rdifb0
Программист, реалист
Для автоматизации это делается, ведь форма еще должна проверятся сохранятся и/или отправляться. В этом случае руками только описывается форма, а все остальное автоматом.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Причины банальны - у вас есть форма в HTML - считай слой представления, и бизнес логика - модельки и сервисы. Формы в виде классов - мост между двумя слоями. Он берет на себя все эти нудные штуки как привязка значений, биндинг значений формы на модели, трансформация данных из формата модели в формат представления (скажем поле модели date можно трансформировать в несколько инпутов для выбора даты и времени). Обычно эти все штуки можно реюзать из проекта в проект, за счет чего ценность подобных штуковин резко повышается. Ну и да, логика обработки форм в этом плане никак не зависит от представления.

Я увы не вкурсе реализации форм в фалконе, работал в плотную только с Symfony Forms из того что посерьезнее. Типичное мнение о подобных компонентах примерно как у вас, зачем, сложно, слишком усложнили простые вещи... Но когда дело доходит до того, что спустя год разработки нужно быстренько добавить какой-то функционал во все формы, например... недавно тут спрашивали - как сохранять предыдущее значение и делать это автоматически, такие штуки спасают. Можно реализовать один простенький экстеншен, по сути декоратор над инпутами, указать для каких типов его применять и там уже городить свою логику. В результате время на внедрение нового функционала сокращается пропорционально размерам приложения. На серьезных проектах без подобных штук жизнь вообще тяжка и грустна.

Словом, выбирая простоту реализации и отказ от всех этих ненужных форм билдеров вы теряете контроль над гибкостью системы и увеличиваете сроки добавления нового функционала в будущем.
Ответ написан
Причина банальна - меньше писанины. Хоть и в классах её тоже не мало, но всё таки меньше и проще модификация.
Ответ написан
Комментировать
Roquie
@Roquie Автор вопроса
в чем экономия времени если для сложных форм придется создавать свои элементы в спец классах?
docs.phalconphp.com/ru/latest/reference/tutorial-i...
https://github.com/phalcon/invo/blob/master/app/li...

Да и как например с помощью этого
https://github.com/phalcon/vokuro/blob/master/app/...

Создать такую простую форму
getbootstrap.com/css/#forms

__
это я к тому, что сделать обычный скелет из тегов форм, с помощью таких решений реально просто, быстро и удобно. Но дальше скелета формы куда-то продвигаться сложнее нежели ее написать на html.

Например, результат выполнения
https://github.com/phalcon/vokuro/blob/master/app/...
будет таким (примерно ...):
<form action="/" method="post">
        <label for="email">Email</label>
        <input type="text" name="email" placeholder="Email"/>
        <label for="password">Password</label>
        <input type="password" name="password" placeholder="Password"/>
        <label for="remember">
            <input type="checkbox" name="remember" checked/>
            Remember
        </label>

        <input type="hidden" name="csrf" value="token ..."/>
        <input type="submit" name="go" class="btn btn-success"/>
</form>


Это обычный стандартный каркас.
А если форма будет на подобие как в бутстрапе
<form role="form">
  <div class="form-group">
    <label for="exampleInputEmail1">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email">
  </div>
  <div class="form-group">
    <label for="exampleInputPassword1">Password</label>
    <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
  </div>
  <div class="form-group">
    <label for="exampleInputFile">File input</label>
    <input type="file" id="exampleInputFile">
    <p class="help-block">Example block-level help text here.</p>
  </div>
  <div class="checkbox">
    <label>
      <input type="checkbox"> Check me out
    </label>
  </div>
  <button type="submit" class="btn btn-default">Submit</button>
</form>


то как я понимаю div'ы внутри формы придется дописывать строками в классе, что усложняет поддержку кода, нежели упрощает.

Как быть?
Ответ написан
@mistergonza
PHP6 evangelist
Отвечу одним словом - "Наследование".
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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