开发者

How To Write Readable If Statements For Input's Validation?

I'm encountered silly, but still significant problem. I'm creating validation for "Sign Up"-like page. I need to check that inputted values aren't harmful and fit my needs. Thanks to Fuel framework it's easy enough. Next... I need to check also that username or e-mail isn't already taken. I have written methods that do the job. But my problem comes when I need to write all "if statements".

This is what I have exactly right now. I'm not sure that's the correct way. I could write it all with "if's" and a lot of levels (nesting, I guess). I could use "if/else..if" there. What would you use?

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

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

        $error = 'This username is already taken!开发者_如何学Python 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' );

}

My goal, in other words, is to:

1) Check that inputted content aren't harmful and fits my needs ($validation->run()),

2) Step by step... isn't username already taken (usernameExists())?

3) Isn't e-mail already taken (emailExists())?

4) There could be more...

Application don't need to go further to step #2 if step #1 is false, for example. After that I need to have string that contains error message, but, you know, each step's message is different. Then I could pass the message to display it (if there is a message)! Of course, I can write code that works, but I'm looking for best-practices... and I have to follow DRY (Don't Repeat Yourself) and KISS (Keep It Simple, Stupid!) principles to keep my code readable and easy to understand and maintain.


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.


Why don't you make validation methods out of those?

http://fuelphp.com/docs/classes/validation.html check under "Extending Validation class", that way they'll be run when running validation. You can set the error messages as is described under "Error Messages" (Btw you can add any class, the current controller or a model as well, using $validation->add_callable('classname') where classname can be both a class name or an object instance)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜