【问题标题】:CFWheels - Validate two different forms using the same modelCFWheels - 使用相同的模型验证两种不同的形式
【发布时间】:2012-04-17 11:13:49
【问题描述】:

我是车轮新手(我相信我会在这里发很多帖子)所以请耐心等待。

我在“用户”的控制器下有“注册”和“登录”两种形式。所以我的网址是这样的。

/用户/注册/ /用户/登录/

目前在我的模型文件夹中,我只是在 init 方法中使用 user.cfc 验证“注册”页面 - 这很好用。

所以本质上......我的问题是......关于我的登录表单的验证;我是否必须始终将验证放入 init 方法或其他方法中?如果是这样,我该怎么做?当然,每种形式都有不同的字段......所以我需要知道一些关于检测当前正在播放的形式的逻辑。

希望这是有道理的。作为参考,我的 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>

谢谢, 迈克尔。

【问题讨论】:

  • 在您的第一个验证规则中,您不需要property='userName'。它唯一需要的是 method 参数。

标签: model-view-controller coldfusion railo cfwheels


【解决方案1】:

迈克尔,

您确实需要将模型验证放入您的 init() 方法中;轮子需要这个。但是,我不确定您是否希望或需要对登录页面/调用使用模型验证。

除非我遗漏了什么,否则当用户登录网站时,您实际上并没有更改模型(即创建新用户或更新现有用户)。您只是根据您的数据库值对它们进行身份验证(检查他们的用户名/密码组合)。

如果是我,我会使用客户端验证进行登录(字段已完成等),并使用模型验证进行注册。

HTH! 克雷格

【讨论】:

  • 你是对的 Craig...我可能不需要验证登录,但是如果我想在“用户”下创建一个编辑页面或其他表单怎么办...它会使用相同的模型...这就是我卡住的地方。希望你明白我的意思。
  • 我想我知道,迈克尔。在我的轮子应用程序中,我在模型中使用了一个过滤器,以确保用户在尝试访问受限材料时经过身份验证。过滤器(“loginRequired”)检查用户是否登录,如果没有,将他们重定向到我的“登录”路由(在 config/routes.cfm 中设置),这只不过是一个简单的登录表单。我在此表单上运行 javascript 验证(确保填写了用户名/密码字段)。但是,在我的管理页面(和用户个人资料页面)中,用户可以编辑他们的帐户……该表单使用模型验证来确保用户数据在 save() 之前是正确的。
  • 同样的验证规则应该适用于update() 场景。您加载应该包含有效数据的对象,然后保存新更改的字段。如果您不相信我,请尝试一下。 :)
  • 谢谢大家...是的,更新表单可能与注册时的每个字段匹配,但可能有其他字段我不需要用户在注册时填写,例如传记或图片上传。我希望他们都使用相同的模型(user.cfc),但我不确定我需要什么逻辑来拆分验证。也许我只是没有得到它?我正在关注截屏教程(太棒了!),但我正在稍微改变一些东西。
  • 对于额外字段(即更新表单与注册表单上的额外字段),您认为您需要什么样的验证?似乎不需要额外的更新字段(即,它们允许在您的数据库表的列中使用空值),并且必要的验证将更多地验证数据类型或长度或类似这些行的东西。这个假设正确吗?
【解决方案2】:

转到此 URL 并向下滚动到:使用“when”、“condition”或“unless”来限制验证范围 http://cfwheels.org/docs/1-1/chapter/object-validation

对于您的情况,您可能会选择 when="onCreate"

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    相关资源
    最近更新 更多