⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controller.php

📁 完美的在线教育系统
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php/* vim: set expandtab tabstop=4 shiftwidth=4: */// +----------------------------------------------------------------------+// | PHP version 4.0                                                      |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2003 The PHP Group                                |// +----------------------------------------------------------------------+// | This source file is subject to version 2.0 of the PHP license,       |// | that is bundled with this package in the file LICENSE, and is        |// | available at through the world-wide-web at                           |// | http://www.php.net/license/2_02.txt.                                 |// | If you did not receive a copy of the PHP license and are unable to   |// | obtain it through the world-wide-web, please send a note to          |// | license@php.net so we can mail you a copy immediately.               |// +----------------------------------------------------------------------+// | Authors: Alexey Borzov <avb@php.net>                                 |// |          Bertrand Mansion <bmansion@mamasam.com>                     |// +----------------------------------------------------------------------+//// $Id: Controller.php 6184 2005-09-07 10:08:17Z bmol $require_once 'HTML/QuickForm/Page.php';/** * The class representing a Controller of MVC design pattern. *  * This class keeps track of pages and (default) action handlers for the form, * it manages keeping the form values in session, setting defaults and  * constants for the form as a whole and getting its submit values. *  * Generally you don't need to subclass this. * * @author  Alexey Borzov <avb@php.net> * @package HTML_QuickForm_Controller * @version $Revision: 6184 $ */class HTML_QuickForm_Controller{   /**    * Contains the pages (HTML_QuickForm_Page objects) of the miultipage form    * @var array    */    var $_pages = array();   /**    * Contains the mapping of actions to corresponding HTML_QuickForm_Action objects    * @var array    */    var $_actions = array();   /**    * Name of the form, used to store the values in session     * @var string    */    var $_name;   /**    * Whether the form is modal      * @var bool    */    var $_modal = true;   /**    * The action extracted from HTTP request: array('page', 'action')    * @var array    */    var $_actionName = null;   /**    * Class constructor.    *     * Sets the form name and modal/non-modal behaviuor. Different multipage    * forms should have different names, as they are used to store form     * values in session. Modal forms allow passing to the next page only when    * all of the previous pages are valid.    *    * @access public    * @param  string  form name    * @param  bool    whether the form is modal    */    function HTML_QuickForm_Controller($name, $modal = true)    {        $this->_name  = $name;        $this->_modal = $modal;    }   /**    * Returns a reference to a session variable containing the form-page     * values and pages' validation status.    *     * This is a "low-level" method, use exportValues() if you want just to    * get the form's values.    *     * @access public    * @param  bool      If true, then reset the container: clear all default, constant and submitted values    * @return array    */    function &container($reset = false)    {        $name = '_' . $this->_name . '_container';        if (!isset($_SESSION[$name]) || $reset) {            $_SESSION[$name] = array(                'defaults'  => array(),                'constants' => array(),                'values'    => array(),                'valid'     => array()            );        }        foreach (array_keys($this->_pages) as $pageName) {            if (!isset($_SESSION[$name]['values'][$pageName])) {                $_SESSION[$name]['values'][$pageName] = array();                $_SESSION[$name]['valid'][$pageName]  = null;            }        }        return $_SESSION[$name];    }   /**    * Processes the request.    *    * This finds the current page, the current action and passes the action    * to the page's handle() method.    *    * @access public    */    function run()    {        // the names of the action and page should be saved        list($page, $action) = $this->_actionName = $this->getActionName();        return $this->_pages[$page]->handle($action);    }   /**    * Registers a handler for a specific action.    *    * @access public    * @param  string    name of the action    * @param  object HTML_QuickForm_Action   the handler for the action    */    function addAction($actionName, &$action)    {        $this->_actions[$actionName] =& $action;    }   /**    * Adds a new page to the form    *    * @access public    * @param  object HTML_QuickForm_Page    */    function addPage(&$page)    {        $page->controller =& $this;        $this->_pages[$page->getAttribute('id')] =& $page;    }   /**    * Returns a page    *    * @access public    * @param  string    Name of a page    * @return object    HTML_QuickForm_Page     A reference to the page    */    function &getPage($pageName)    {        if (!isset($this->_pages[$pageName])) {            return PEAR::raiseError('HTML_QuickForm_Controller: Unknown page "' . $pageName . '"');        }        return $this->_pages[$pageName];    }   /**    * Handles an action.    *    * This will be called if the page itself does not have a handler    * to a specific action. The method also loads and uses default handlers    * for common actions, if specific ones were not added.    *     * @access public    * @param  object HTML_QuickForm_Page    The page that failed to handle the action    * @param  string    Name of the action    */    function handle(&$page, $actionName)    {        if (isset($this->_actions[$actionName])) {            return $this->_actions[$actionName]->perform($page, $actionName);        }        switch ($actionName) {            case 'next':            case 'back':            case 'submit':            case 'display':            case 'jump':                include_once 'HTML/QuickForm/Action/' . ucfirst($actionName) . '.php';                $className = 'HTML_QuickForm_Action_' . $actionName;                $this->_actions[$actionName] =& new $className();                return $this->_actions[$actionName]->perform($page, $actionName);                break;            default:                return PEAR::raiseError('HTML_QuickForm_Controller: Unhandled action "' . $actionName . '" in page "' . $page->getAttribute('id') . '"');        } // switch    }   /**    * Checks whether the form is modal.    *     * @access public    * @return bool    */    function isModal()    {        return $this->_modal;    }   /**    * Checks whether the pages of the controller are valid    *     * @access public    * @param  string    If set, check only the pages before (not including) that page    * @return bool    */    function isValid($pageName = null)    {        $data =& $this->container();        foreach (array_keys($this->_pages) as $key) {            if (isset($pageName) && $pageName == $key) {                return true;            } elseif (!$data['valid'][$key]) {                // We should handle the possible situation when the user has never                // seen a page of a non-modal multipage form                if (!$this->isModal() && null === $data['valid'][$key]) {                    $page =& $this->_pages[$key];                    // Use controller's defaults and constants, if present                    $this->applyDefaults($key);                    $page->isFormBuilt() or $page->BuildForm();                    // We use defaults and constants as if they were submitted                    $data['values'][$key] = $page->exportValues();                    $page->loadValues($data['values'][$key]);                    // Is the page now valid?                    if (true === ($data['valid'][$key] = $page->validate())) {                        continue;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -