1

私はばかげていますが、それでも重大な問題に遭遇しました。「サインアップ」のようなページの検証を作成しています。入力した値が有害でなく、自分のニーズに合っているかどうかを確認する必要があります。Fuelフレームワークのおかげで、それは十分に簡単です。次へ...ユーザー名または電子メールがまだ取得されていないことも確認する必要があります。私はその仕事をするメソッドを書きました。しかし、私の問題は、すべての「ifステートメント」を記述する必要があるときに発生します。

これは私が今まさに持っているものです。それが正しい方法かどうかはわかりません。私はそれをすべて「if」と多くのレベル(ネスト、私は推測する)で書くことができました。そこで「if/else..if」を使用できます。何を使いますか?

if ( $validation->run() === true ) {

    if ( Diesel::usernameExists( $username ) === false ) {

        $error = 'This username is already taken! Try again...';

    }

    if ( Diesel::emailExists( $email ) === false ) {

        $error = 'This e-mail is already taken! Try again...';

    }


    if ( !isSet( $error ) ) {

        Diesel::signUp( $username, sha1( $password ), $email );


        Session::set_flash( 'notification', 'You have been successfully signed-up! Thanks...' );
        Session::set_flash( 'location', 'sign-in' );

        $this->response->redirect( 'notification' );

    }

} else {

    Session::set_flash( 'error', 'There was something wrong with validation! Try again...' );

    $this->response->redirect( 'sign-up' );

}

言い換えれば、私の目標は次のとおりです。

1)入力したコンテンツが有害でなく、私のニーズに合っていることを確認します($validation->run())、

2)ステップバイステップ...ユーザー名はすでに取得されていませんか(usernameExists())?

3)メールはもう取られていませんか(emailExists())?

4)もっとあるかもしれません...

たとえば、ステップ1がfalseの場合、アプリケーションはステップ2に進む必要はありません。その後、エラーメッセージを含む文字列が必要になりますが、各ステップのメッセージは異なります。次に、メッセージを渡して表示することができます(メッセージがある場合)。もちろん、機能するコードを書くことはできますが、ベストプラクティスを探しています...そして、コードを維持するには、DRY(Do n't Repeat Yourself)とKISS(Keep It Simple、Stupid!)の原則に従う必要があります。読みやすく、理解しやすく、保守も簡単です。

4

2 に答える 2

3

I would use if then else if, that would make the most sense I think. That way if the first if is true that is all it will do, otherwise it will go to the next. Which I think is what you want.

于 2011-05-15T14:34:49.040 に答える
1

それらから検証方法を作ってみませんか?

http://fuelphp.com/docs/classes/validation.html「ExtendingValidationclass」の下でチェックしてください。そうすれば、検証を実行するときに実行されます。「エラーメッセージ」で説明されているようにエラーメッセージを設定できます(ところで、クラス名またはオブジェクトインスタンスの両方を使用$validation->add_callable('classname')し て、任意のクラス、現在のコントローラ、またはモデルを追加できます)classname

于 2011-05-19T15:10:07.550 に答える