7.4 验证表单

为了让用户登陆到系统中,你需要在页面中放置一个表单来接受用户的用户名和密码。Solar视图(Solar_View)中可用的表单辅助类(Solar_View_Helper_Form)可以非常轻松地在任何视图或布局中添加表单。

[Note]Note

要了解如何操作视图和布局,请复习第五章视图和布局

下面介绍一下用户验证表单的逻辑:

Figure 7.1. 使用HTML表单时的验证逻辑

使用HTML表单时的验证逻辑

如果用户没有登陆,则显示登陆表单。如果用户已经登陆,用户将会看到一个欢迎页面,而且页面里有一个“退出”按钮(注销表单)。在登陆表单和注销表单下面会显示状态消息,如:“欢迎回来!”或是“您的用户名或密码错误,请再尝试一次。”。

上面的逻在视图中用代码实现如下(假设公共属性$user是视图可用的一个Solar_User对象):

<div id="user">
<?php
    
    if ($this->user->auth->isValid()) {
    
        // the user is logged in, show a logout form
        
        echo "<div>\n"
           . $this->getText('TEXT_AUTH_USERNAME') . "\n"
           . $this->escape($this->user->auth->handle) . "\n"
           . "</div>\n";
        
        echo $this->form()
                  ->addProcess('logout')
                  ->decorateAsDivs()
                  ->fetch();

    } else {
    
        // the user is not logged in, show a login form
        
        echo $this->form()
                  ->text(array(
                      'name'    => 'handle',
                      'label'   => 'LABEL_HANDLE',
                  ))
                  ->password(array(
                      'name'    => 'passwd',
                      'label'   => 'LABEL_PASSWD',
                  ))
                  ->addProcess('login')
                  ->decorateAsDivs()
                  ->fetch();
    }
    
    // always show the authentication status
    $status = $this->user->auth->getStatusText();
    if ($status) {
        echo '<div class="status">'
           . $this->escape($status)
           . "</div>\n";
    }
?>
</div>

因此,如果用户已经登陆(根据$this->user->auth->isValid()方法调用的结果可以判断),就会显示一个“Signed in as ...”消息,消息下面会显示一个“注销”按钮。除此之外,任何状态消息(如:“欢迎回来!”)都会显示在“注销”按钮下面。(这些状态消息是Solar_Auth适配器根据登陆和注销过程成功或失败自动产生的。)

如果用户没有登陆,或验证请求失败,那么将会显示登陆表单,表单下面将会显示相关的状态消息。来看一下示例图片:

上面这张图片显示一次成功登陆。注意看下注销表单上面的欢迎消息和下面的状态消息。

上面这张图片显示一次失败登陆。注意看下登陆表单下面的状态消息。