社区系统的功能页面通过路由功能都实现了,但是页面上的表单、表单处理方法却还没有解决

继续看Typecho源码,会发现默认的表单操作都是使用action路由的,而action路由对应的组件为Widget_Do,查看Widget_Do文件中的路由映射,很容易就能够知道每个action所对应的组件了

实现了Widget_Interface_Do中的接口的才是动作

路由到动作

Widget_Do的路由映射中新增一个映射:

'setting' => 'Widget_Users_Setting'

这时链接http://siteUrl/action/setting则会使用Widget_Users_Setting组件来处理请求

新建Widget_Users_Setting文件:

class Widget_Users_Setting extends Widget_Abstract_Users implements Widget_Interface_Do
{
    public function action(){
        if (!$this->user->hasLogin()) {
            $this->response->goBack();
        }
        //上传头像
        $this->on($this->request->is('do=avatar'))->doAvatar();
        //发送验证码
        $this->on($this->request->is('do=sendverify'))->sendVerify();
        //保存个人信息
        $this->on($this->request->is('do=profile'))->saveProfile();
        //修改邮箱
        $this->on($this->request->is('do=changemail'))->changeMail();
        //修改密码
        $this->on($this->request->is('do=changepass'))->changePwd();
    }
}

action就是默认动作执行的方法(与组件中execute方法类似,都会自动调用)。

提交的数据通过动作中action的处理,把不同的数据交给相应的方法去处理,再通过Typecho_Response返回处理结果或做跳转

不同的动作对应的一个组件中数据处理的集合,把相似或统一组件的功能放在一个动作里面,方便开发以及维护

未完不知道有没有续……