CFWheels — проверка двух разных форм с использованием одной и той же модели

Я новичок в колесах (и я уверен, что буду много писать здесь), так что терпите меня.

У меня есть две формы "регистрация" и "логин" под контроллером "пользователя". Итак, мой URL-адрес выглядит так.

/пользователь/регистрация/ /пользователь/логин/

На данный момент в папке моих моделей у меня просто есть user.cfc с проверкой страницы «регистрации» внутри метода инициализации — это работает просто отлично.

Итак, по сути... мой вопрос... относительно проверки моей формы входа; мне всегда нужно помещать проверку в метод инициализации или в другой? Если да, то как мне это сделать? Каждая форма, конечно, имеет разные поля... поэтому мне нужно знать некоторую логику определения того, какая форма в данный момент находится в игре.

Надеюсь, это имеет смысл. Для справки, моя модель user.cfc в настоящее время выглядит так:

<cfcomponent extends="Model" output="true">

    <cffunction name="init">

        <cfset validate( property='userName', method='validateAlphaNumeric') />
        <cfset validatesPresenceOf( properties='userName') />
        <cfset validatesUniquenessOf( properties='userName') />

        <cfset validatesFormatOf( property='userEmail', type='email', message="Email address is not in a valid format.") />
        <cfset validatesPresenceOf( properties='userEmail') />
        <cfset validatesUniquenessOf( properties='userEmail') />

        <cfset validatesPresenceOf( properties='userPassword') />
        <cfset validatesConfirmationOf( property='userPassword') />

        <cfset validatesLengthOf( property="userToken", allowBlank=true) />

    </cffunction>

    <cffunction name="validateAlphaNumeric" access="private">
        <cfif REFind("[^A-Za-z0-9]", this.userName, 1)>
            <cfset addError( property="userName", message="User name can only contain letters and numbers." ) />
        </cfif>
    </cffunction>

</cfcomponent>

Спасибо, Майкл.


person Michael Giovanni Pumo    schedule 17.04.2012    source источник
comment
В вашем самом первом правиле проверки вам не нужно property='userName'. Единственное, что ему нужно, это аргумент method.   -  person Chris Peters    schedule 18.04.2012


Ответы (2)


Майкл,

Вам нужно поместить проверки модели в метод init(); Колеса требуют этого. Однако я не уверен, что вы захотите или вам понадобится использовать проверку модели для страницы входа/вызова.

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

Если бы это был я, я бы использовал проверку на стороне клиента для входа в систему (поля заполнены и т. д.) и проверку модели для регистрации.

ХТХ! Крейг

person craig.kaminsky    schedule 17.04.2012
comment
Вы правы, Крейг... Мне может не понадобиться проверка для входа в систему, но что, если я захочу создать страницу редактирования или какую-то другую форму под пользователем... она будет использовать ту же модель... и вот где я получаю застрявший. Надеюсь, вы понимаете, что я имею в виду. - person Michael Giovanni Pumo; 17.04.2012
comment
Думаю, да, Майкл. В моих приложениях для колес у меня есть фильтр, который я использую в своих моделях, чтобы гарантировать, что пользователи аутентифицируются, когда они пытаются получить доступ к материалам с ограниченным доступом. Фильтр (loginRequired) проверяет, вошел ли пользователь в систему, и, если нет, перенаправляет его на мой маршрут входа (установленный в config/routes.cfm), который представляет собой не что иное, как простую форму входа. Я запускаю проверку javascript в этой форме (убедившись, что поля имени пользователя/пароля заполнены). Но на моей странице администратора (и странице профиля пользователя) пользователь может редактировать свою учетную запись... эта форма использует проверку модели, чтобы гарантировать правильность данных пользователя до сохранения (). - person craig.kaminsky; 17.04.2012
comment
Тем не менее, те же самые правила проверки должны применяться к сценарию update(). Вы загружаете объект, который должен содержать действительные данные, а затем сохраняете только что измененные поля. Если вы мне не верите, просто попробуйте. :) - person Chris Peters; 18.04.2012
comment
Спасибо, ребята ... да, форма обновления может соответствовать каждому полю, как и при регистрации, но могут быть дополнительные поля, которые я не требовал от пользователя заполнять при регистрации, например, биографию или загрузку изображения. Я хочу, чтобы все они использовали одну и ту же модель (user.cfc), но я не уверен, какая логика мне понадобится, чтобы разделить проверку. Может я просто не догоняю?? Я следую руководствам по скринкастам (они потрясающие!), но я немного меняю некоторые вещи. - person Michael Giovanni Pumo; 18.04.2012
comment
Для дополнительных полей (т. е. дополнительных полей в форме обновления по сравнению с регистрационной формой) какая проверка, по вашему мнению, вам потребуется? Казалось бы, дополнительные поля обновления не потребуются (т. Е. Они допускают нули в столбцах вашей таблицы БД) и что необходимая проверка будет больше проверять тип или длину данных или что-то в этом роде. Верно ли это предположение? - person craig.kaminsky; 19.04.2012
comment
Я как бы застрял на той же проблеме. У меня есть модель user.cfc, которая проверяет длину/тип пароля, а затем проверяет его на подтверждение пароля, но я не хочу заставлять людей всегда вводить свои пароли в форму редактирования. Так как они уже вошли в систему. Итак, как мне с этим справиться? Я хочу иметь отдельную страницу для обновления пароля, и снова мне нужно запустить его через Users.cfc, но на этот раз я не хочу проверять какие-либо другие поля, КРОМЕ полей пароля. Как это сделать? Одна вещь, о которой я могу думать, это скрытое поле в форме, а затем cfif. - person Amir; 22.01.2013

Перейдите по этому URL-адресу и прокрутите вниз до: Используйте «когда», «условие» или «если», чтобы ограничить область проверки http://cfwheels.org/docs/1-1/chapter/object-валидация

В вашем случае вы, вероятно, могли бы использовать when="onCreate"

person cleegp    schedule 17.03.2014