1

私の「リンク」モデルには、いくつかの基本的な検証があります。その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

送信されたURLをvalidatesUniquenessOf()のメッセージ属性のリンクとして指定できませんか?このようにして、ユーザーはエラーを受け取り、メッセージ内のリンクをたどることができます。それ以外の場合、validatesUniquenessOf()関数がfalseを返す場合は、cflocationを使用してユーザーをlinUrl値に送信する必要があると思います。

于 2012-04-19T17:51:46.370 に答える
1

これは、の一般的なユースケースから外れvalidatesUniquenessOf()ますが、とを使用する方法はいくつかありaddErrorます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 に答える