📄 controller.php
字号:
<?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 + -