1

在我的“链接”模型中,我进行了一些基本验证,其中之一是检查用户提交的链接是否已经在数据库中。

如果链接已经提交到数据库,我想让他们知道并将他们转发到之前提交的链接(基本上是一个 URL)。

我怎样才能做到这一点?到目前为止,我的模型看起来像这样:

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

    <cffunction name="init">

        <cfset validatesPresenceOf( property='linkURL') />
        <cfset validatesFormatOf( property='linkURL', type='url', message="Your link isn't a valid URL.") />
        <cfset validatesUniquenessOf( property='linkURL') />

    </cffunction>

</cfcomponent>

很基础。validatesUniquenessOf() 效果很好,但我想在我的验证逻辑中做更多的事情。如果我在没有框架的情况下这样做......我当然会做一些标准逻辑,但我想按照轮子需要我的方式工作。

再次感谢 CFWHEELS!

4

2 回答 2

1

这不属于 的一般用例validatesUniquenessOf(),但有一些方法可以使用addErrorand errorsOn

我会在模型中这样做:

<cfcomponent extends="Model">

    <cffunction name="init">
        <cfset validatesPresenceOf( property='linkURL') />
        <cfset validatesFormatOf( property='linkURL', type='url', message="Your link isn't a valid URL.") />
        <cfset validate("validateUniqueUrl") />
    </cffunction>

    <cffunction name="validateUniqueUrl" access="private">
        <cfscript>
            if (this.exists(where="linkURL='#this.linkURL#'")) {
                this.addError(property="linkURL", name="linkExists", message="The link you entered already exists.");
            }
        </cfscript>
    </cffunction>

</cfcomponent>

我这样做的原因是您将在控制器中检查一个命名错误(称为linkExists)。

然后在你的控制器中:

<cfcomponent extends="Controller">

    <cffunction name="create">
        <cfscript>
            link = model("link").new(params.link);

            local.linkExistsErrors = link.errorsOn(property="linkURL", name="linkExists");

            if (link.save()) {
                // Whatever you want to do on success
            }
            else if (ArrayLen(local.linkExistsErrors)) {
                flashInsert(error=local.linkExistsErrors[1].message);
                Location(url=link.linkURL, addToken=false); // Need to use Location or cflocation for hard-coded URLs
            }
            else {
                // Whatever you want to do on other types of validation failures
            }
        </cfscript>
    </cffunction>

</cfcomponent>

API 资源

于 2012-04-19T22:07:46.703 回答
1

您不能在 validatesUniquenessOf() 的消息属性中提供提交的 url 作为链接吗?这样,用户将收到错误消息,并能够访问消息中的链接。否则,如果 validatesUniquenessOf() 函数返回 false,我认为您将需要使用 cflocation 将用户发送到 linUrl 值。

于 2012-04-19T17:51:46.370 回答