Как я упрощаю Обработку Формы в PHP?

Самый элегантный и динамичный способ решения этой проблемы - использование рекурсии:

import re

a = "NAME_{1:2}_{3:5}"
b = "NAME_{1:2}"
c = "NAME"
d = "NAME_{1:2}_{3:4}_{7:8}"

def recure(myRanges, myString, varReference):

    if not myRanges:
        varReference.append(myString)
        return

    for i in myRanges[0]:
        tempVar = myRanges[:]
        del tempVar[0]
        recure(tempVar, myString + "_" + str(i), varReference)


def getMyList(myInput):
    myInputList = list(myInput)

    a = [i.start() for i in re.finditer('{', myInput)]

    try:
        myName = myInput[:a[0] - 1]
    except:
        myName = myInput

    myRanges = [range(int(myInputList[i + 1]), int(myInputList[i + 3]) + 1) for i in a]

    myList = []

    recure(myRanges, myName, myList)

    return myList

print(getMyList(a)) # -> ['NAME_1_3', 'NAME_1_4', 'NAME_1_5', 'NAME_2_3', 'NAME_2_4', 'NAME_2_5']
print(getMyList(b)) # -> ['NAME_1', 'NAME_2']
print(getMyList(c)) # -> ['NAME']
print(getMyList(d)) # -> ['NAME_1_3_7', 'NAME_1_3_8', 'NAME_1_4_7', 'NAME_1_4_8', 'NAME_2_3_7', 'NAME_2_3_8', 'NAME_2_4_7', 'NAME_2_4_8']

Оригинальный пост

.

a = "NAME_{1:2}_{3:5}"
aList = list(a)

myString = a[:a.find("_")]

startI = int(aList[a.find("{") + 1])
endI = int(aList[a.find("}") - 1]) + 1

startII = int(aList[a.rfind("{") + 1])
endII = int(aList[a.rfind("}") - 1]) + 1

myList = []

for i in range(startI, endI):
    for j in range(startII, endII):
        myList.append(myString + "_" + str(i) + "_" + str(j))

print(myList) # -> ['NAME_1_3', 'NAME_1_4', 'NAME_1_5', 'NAME_2_3', 'NAME_2_4', 'NAME_2_5']
8
задан Alix Axel 11 April 2009 в 15:09
поделиться

3 ответа

Вы можете создать абстрактный базовый класс для всех ваших форм, классы для типов полей и статический класс только для проверки правильности значения различных типов (validateString, validateHtml, validateEmail, validateNumber, date и т. д., только методы ..). Определяя форму, вы определяете, какие объекты полей она будет использовать, поэтому метод Form-> validate () вызовет Field-> validate () и вернет отфильтрованное значение или сообщение об ошибке. Укажите сообщения об ошибках по умолчанию для полей, но дайте возможность переопределить их при определении полей в вашем классе формы.

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

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

Еще один: как Джанго? Хорошо! Так что начните программировать Python на Django, вы действительно измените способ мышления, как выполнить свою работу.

или какую бы супер-пупер-валидацию форм вы ни написали, это не будет иметь смысла в последних проектах.

Еще один: как Django? Хорошо! Так что начните программировать Python на Django, вы действительно измените способ мышления, как выполнить свою работу.

или какую бы супер-пупер-валидацию форм вы ни написали, это не будет иметь смысла в последних проектах.

Еще один: как Django? Хорошо! Так что начните программировать Python на Django, вы действительно измените способ мышления, как выполнить свою работу.

1
ответ дан 5 December 2019 в 22:20
поделиться

ИМХО, попытка трактовать форму как единую концепцию - неудача. Если у вас есть какая-либо многоуровневая архитектура для вашего приложения, формы, скорее всего, пересекают их. Формы имеют логику приложения (уровень контроллера), они имеют визуальное представление (уровень представления), у них есть состояние (модель уровня приложения), и в конце они обычно вызывают какой-то транзакционный скрипт (уровень модели).

Я думаю, вам гораздо лучше отказаться от идеи «формы» как сущности, и вместо этого сосредоточиться на трех частях (обработка ввода, рендеринг и слой модели) как на совершенно разных вопросах, это просто может (или не может) случиться тесно связаны друг с другом. Это иногда называют паттерном MVC, хотя к настоящему моменту этот термин настолько сильно загружен, что может означать много вещей.

4
ответ дан 5 December 2019 в 22:20
поделиться

Я знаю, что это вы исключили, и я Я был таким же, как вы, еще год назад, когда я заставлял себя изучать что-то непонятное, например, Qcodo (php framework), и вот, сегодня я ничего не могу сделать без него. Просто замечательно снять с плеч много постоянно повторяющегося бремени. Почему Qcodo? В то время я хотел изучить самый продвинутый, так как я уже учусь, поэтому я искал самый широкий набор функций, который, казалось, предлагал Qcodo. Сегодня я не знаю, какой из них самый горячий, но для меня Qcodo все еще выполняет все мои потребности.

1
ответ дан 5 December 2019 в 22:20
поделиться
Другие вопросы по тегам:

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