【问题标题】:How To Write Readable If Statements For Input's Validation?如何为输入的验证编写可读的 If 语句?
【发布时间】:2011-05-15 14:29:49
【问题描述】:

我遇到了愚蠢但仍然很严重的问题。我正在为类似“注册”的页面创建验证。我需要检查输入的值是否无害并且符合我的需要。感谢 Fuel 框架,这很容易。下一步...我还需要检查用户名或电子邮件是否未被占用。我已经编写了可以完成这项工作的方法。但是当我需要编写所有“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 步为假,则应用程序不需要进一步执行第 2 步。之后我需要包含错误消息的字符串,但是,你知道,每个步骤的消息都是不同的。然后我可以传递消息来显示它(如果有消息)!当然,我可以编写有效的代码,但我正在寻找最佳实践……而且我必须遵循 DRY(不要重复自己)和 KISS(保持简单,愚蠢!)原则来保持我的代码可读性强,易于理解和维护。

【问题讨论】:

标签: php if-statement readability code-readability


【解决方案1】:

我会使用 if then else if,这是我认为最有意义的。 这样,如果第一个 if 是真的,那就是它会做的一切, 否则将进入下一个。 我认为这是您想要的。

【讨论】:

    【解决方案2】:

    你为什么不用这些来制作验证方法?

    http://fuelphp.com/docs/classes/validation.html 在“Extending Validation class”下打勾,这样它们就会在运行验证时运行。您可以按照"Error Messages" 中的说明设置错误消息 (顺便说一句,您也可以添加任何类、当前控制器或模型,使用 $validation->add_callable('classname') 其中classname 可以是类名或对象实例)

    【讨论】:

    • 谢谢,杰尔默。将尝试这样做! =]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 2021-10-13
    相关资源
    最近更新 更多