0

有很多问题涉及是否使用异常作为用户消息,似乎有和没有派系都有坚定的拥护者,我不希望这个问题添加到该工作中。 只是 stackexchange 中的一个示例。

我是 PHP OOP 的新手,我有一个在类中返回 TRUE/FALSE 的 validate 方法,但是当为 false 时,我想在没有 javascript 的情况下将失败的验证消息返回给用户,并用 in 显示该消息具有某些 css 格式的页面(不在顶部等)。

如果出于某些圣经原因,该方法不应生成用户消息/文本-我对此表示同意-我只想了解原因并在可能的情况下使用一个好的替代方法。

我可能会为不显示更严重级别错误的自定义消息扩展异常类 - 所以这可能是解决方案的一部分,也可能不是解决方案的一部分,但仍不能解决用户输出问题。

我还要承认,这可能只是试图将 10 磅的东西塞进 1 磅的袋子里。这是本质:

class MyClass {
function validate_name($newname){
    try {    

     //some code to validate that test for a normal failure conddition

     throw new Exception('a user friendly message')

     }
     catch (Exception $e) { // Report the error!

        echo '<p class=0"error">An error occurred: ' . $e->getMessage() . '</p>';
            }//end catch

      }//end validate_name
    }//end Class

然后在页面中是:

$obj =  new MyClass();

if (isset($_POST['item'])) {

    $obj->set_new_cat($_POST['item1'],$_POST['item2']);


}//end if isset post 




<form name="form1" method="post" action="">
    Name: <br/><input name="item1" type="text" />
    Description (optional): 
    <input name="item2" type="text" />
    <br/>
<?php ???how to display error messages here???>

     <button id="submit" type="submit" name="action" >Add Category</button>
</form>

在之前的程序变体中,我在页面上使用了一个 $errors 数组,并从数组中提取了消息,但是使用类中的方法,我不确定如何获取返回值或消息,因为“echo $e ->getMessage" 不会像我想要的那样输出。

感觉好像我在这里错过了一些简单的东西,但我对此很陌生......

4

1 回答 1

0

调整您的异常处理程序,以便在您无法解决它的事件中抛出异常。

class MyClass {
    function validate_name($newname){
        try {    
            //some code to validate that test for a normal failure conddition
            throw new Exception('a user friendly message');
        }
        catch (Exception $e) { // Report the error!
            throw new Exception('<p class="error">An error occurred: ' . $e->getMessage() . '</p>');
        }//end catch    
    }
}

然后当你输出。

$obj =  new MyClass();
$error = "";
if (isset($_POST['item'])) {
    try{
        // assuming this calls validate_name at some point
        $obj->set_new_cat($_POST['item1'],$_POST['item2']);
    } catch(Exception $e) {
        $error = $e->getMessage();
    }

}//end if isset post 

?>
<form name="form1" method="post" action="">
    Name: <br/><input name="item1" type="text" />
    Description (optional): 
    <input name="item2" type="text" />
    <br/>
    <?= $error ?>
    <button id="submit" type="submit" name="action" >Add Category</button>
</form>
于 2013-06-06T22:14:17.597 回答