'Widget_Ajax', 'login' => 'Widget_Login', 'logout' => 'Widget_Logout', 'register' => 'Widget_Register', 'upgrade' => 'Widget_Upgrade', 'upload' => 'Widget_Upload', 'service' => 'Widget_Service', 'xmlrpc' => 'Widget_XmlRpc', 'comments-edit' => 'Widget_Comments_Edit', 'contents-page-edit' => 'Widget_Contents_Page_Edit', 'contents-post-edit' => 'Widget_Contents_Post_Edit', 'contents-attachment-edit' => 'Widget_Contents_Attachment_Edit', 'metas-category-edit' => 'Widget_Metas_Category_Edit', 'metas-tag-edit' => 'Widget_Metas_Tag_Edit', 'options-discussion' => 'Widget_Options_Discussion', 'options-general' => 'Widget_Options_General', 'options-permalink' => 'Widget_Options_Permalink', 'options-reading' => 'Widget_Options_Reading', 'plugins-edit' => 'Widget_Plugins_Edit', 'themes-edit' => 'Widget_Themes_Edit', 'users-edit' => 'Widget_Users_Edit', 'users-profile' => 'Widget_Users_Profile' ); /** * 入口函数,初始化路由器 * * @access public * @return void * @throws Typecho_Widget_Exception */ public function execute() { /** 验证路由地址 **/ $action = $this->request->action; //兼容老版本 if (empty($action)) { $widget = trim($this->request->widget, '/'); $objectName = 'Widget_' . str_replace('/', '_', $widget); if (Typecho_Common::isAvailableClass($objectName)) { $widgetName = $objectName; } } else { /** 判断是否为plugin */ $actionTable = array_merge($this->_map, unserialize($this->widget('Widget_Options')->actionTable)); if (isset($actionTable[$action])) { $widgetName = $actionTable[$action]; } } if (isset($widgetName) && class_exists($widgetName)) { $reflectionWidget = new ReflectionClass($widgetName); if ($reflectionWidget->implementsInterface('Widget_Interface_Do')) { $this->widget($widgetName)->action(); return; } } throw new Typecho_Widget_Exception(_t('请求的地址不存在'), 404); } }