📄 controller.php
字号:
* @return void
*/
function addModelPath( $path )
{
$this->_addPath( 'model', $path );
}
/**
* Gets the available tasks in the controller.
* @access public
* @return array Array[i] of task names.
* @since 1.5
*/
function getTasks()
{
return $this->_methods;
}
/**
* Get the last task that is or was to be performed.
*
* @access public
* @return string The task that was or is being performed.
* @since 1.5
*/
function getTask()
{
return $this->_task;
}
/**
* Method to get the controller name
*
* The dispatcher name by default parsed using the classname, or it can be set
* by passing a $config['name'] in the class constructor
*
* @access public
* @return string The name of the dispatcher
* @since 1.5
*/
function getName()
{
$name = $this->_name;
if (empty( $name ))
{
$r = null;
if ( !preg_match( '/(.*)Controller/i', get_class( $this ), $r ) ) {
JError::raiseError(500, "JController::getName() : Cannot get or parse class name.");
}
$name = strtolower( $r[1] );
}
return $name;
}
/**
* Method to get a reference to the current view and load it if necessary.
*
* @access public
* @param string The view name. Optional, defaults to the controller
* name.
* @param string The view type. Optional.
* @param string The class prefix. Optional.
* @param array Configuration array for view. Optional.
* @return object Reference to the view or an error.
* @since 1.5
*/
function &getView( $name = '', $type = '', $prefix = '', $config = array() )
{
static $views;
if ( !isset( $views ) ) {
$views = array();
}
if ( empty( $name ) ) {
$name = $this->_name;
}
if ( empty( $prefix ) ) {
$prefix = $this->_name . 'View';
}
if ( empty( $views[$name] ) )
{
if ( $view = & $this->_createView( $name, $prefix, $type, $config ) ) {
$views[$name] = & $view;
} else {
$result = JError::raiseError(
500, JText::_( 'View not found [name, type, prefix]:' )
. ' ' . $name . ',' . $type . ',' . $prefix
);
return $result;
}
}
return $views[$name];
}
/**
* Add one or more view paths to the controller's stack, in LIFO order.
*
* @static
* @param string|array The directory (string), or list of directories
* (array) to add.
* @return void
*/
function addViewPath( $path )
{
$this->_addPath( 'view', $path );
}
/**
* Register (map) a task to a method in the class.
*
* @access public
* @param string The task.
* @param string The name of the method in the derived class to perform
* for this task.
* @return void
* @since 1.5
*/
function registerTask( $task, $method )
{
if ( in_array( strtolower( $method ), $this->_methods ) ) {
$this->_taskMap[strtolower( $task )] = $method;
} else {
JError::raiseError( 404, JText::_( 'Method not found:' ) . $method );
}
}
/**
* Register the default task to perform if a mapping is not found.
*
* @access public
* @param string The name of the method in the derived class to perform if
* a named task is not found.
* @return void
* @since 1.5
*/
function registerDefaultTask( $method )
{
$this->registerTask( '__default', $method );
}
/**
* Sets the internal message that is passed with a redirect
*
* @access public
* @param string The message
* @return string Previous message
* @since 1.5
*/
function setMessage( $text )
{
$previous = $this->_message;
$this->_message = $text;
return $previous;
}
/**
* Set a URL for browser redirection.
*
* @access public
* @param string URL to redirect to.
* @param string Message to display on redirect. Optional, defaults to
* value set internally by controller, if any.
* @param string Message type. Optional, defaults to 'message'.
* @return void
* @since 1.5
*/
function setRedirect( $url, $msg = null, $type = 'message' )
{
$this->_redirect = $url;
if ($msg !== null) {
// controller may have set this directly
$this->_message = $msg;
}
$this->_messageType = $type;
}
/**
* Sets the access control levels.
*
* @access public
* @param string The ACO section (eg, the component).
* @param string The ACO section value (if using a constant value).
* @return void
* @since 1.5
*/
function setAccessControl( $section, $value = null )
{
$this->_acoSection = $section;
$this->_acoSectionValue = $value;
}
/**
* Method to load and return a model object.
*
* @access private
* @param string The name of the model.
* @param string Optional model prefix.
* @return mixed Model object on success; otherwise null
* failure.
* @since 1.5
*/
function &_createModel( $name, $prefix = '')
{
$result = null;
// Clean the model name
$modelName = preg_replace( '/[^A-Z0-9_]/i', '', $name );
$classPrefix = preg_replace( '/[^A-Z0-9_]/i', '', $prefix );
// Build the model class name
$modelClass = $classPrefix . $modelName;
if ( !class_exists( $modelClass ) )
{
jimport( 'joomla.filesystem.path' );
$path = JPath::find(
$this->_path['model'],
$this->_createFileName( 'model', array( 'name' => $modelName ) )
);
if ( $path )
{
require $path;
if ( !class_exists( $modelClass ) ) {
JError::raiseWarning(
0,
JText::_( 'Model class not found [class, file]:' )
. ' ' . $modelClass . ', ' . $path
);
return $result;
}
} else {
return $result;
}
}
$result = new $modelClass();
return $result;
}
/**
* Method to load and return a view object. This method first looks in the
* current template directory for a match, and failing that uses a default
* set path to load the view class file.
*
* Note the "name, prefix, type" order of parameters, which differs from the
* "name, type, prefix" order used in related public methods.
*
* @access private
* @param string The name of the view.
* @param string Optional prefix for the view class name.
* @param string The type of view.
* @param array Configuration array for the view. Optional.
* @return mixed View object on success; null or error result on failure.
* @since 1.5
*/
function &_createView( $name, $prefix = '', $type = '', $config = array() )
{
$result = null;
// Clean the view name
$viewName = preg_replace( '/[^A-Z0-9_]/i', '', $name );
$classPrefix = preg_replace( '/[^A-Z0-9_]/i', '', $prefix );
$viewType = preg_replace( '/[^A-Z0-9_]/i', '', $type );
// Build the view class name
$viewClass = $classPrefix . $viewName;
if ( !class_exists( $viewClass ) )
{
jimport( 'joomla.filesystem.path' );
$path = JPath::find(
$this->_path['view'],
$this->_createFileName( 'view', array( 'name' => $viewName, 'type' => $viewType) )
);
if ($path) {
require_once $path;
if ( !class_exists( $viewClass ) ) {
$result = JError::raiseError(
500, JText::_( 'View class not found [class, file]:' )
. ' ' . $viewClass . ', ' . $path );
return $result;
}
} else {
return $result;
}
}
$result = new $viewClass($config);
return $result;
}
/**
* Sets an entire array of search paths for resources.
*
* @access protected
* @param string The type of path to set, typically 'view' or 'model'.
* @param string|array The new set of search paths. If null or false,
* resets to the current directory only.
*/
function _setPath( $type, $path )
{
// clear out the prior search dirs
$this->_path[$type] = array();
// actually add the user-specified directories
$this->_addPath( $type, $path );
}
/**
* Adds to the search path for templates and resources.
*
* @access protected
* @param string The path type (e.g. 'model', 'view'.
* @param string|array The directory or stream to search.
* @return void
*/
function _addPath( $type, $path )
{
// just force path to array
settype( $path, 'array' );
// loop through the path directories
foreach ( $path as $dir )
{
// no surrounding spaces allowed!
$dir = trim( $dir );
// add trailing separators as needed
if ( substr( $dir, -1 ) != DIRECTORY_SEPARATOR ) {
// directory
$dir .= DIRECTORY_SEPARATOR;
}
// add to the top of the search dirs
array_unshift( $this->_path[$type], $dir );
}
}
/**
* Create the filename for a resource.
*
* @access private
* @param string The resource type to create the filename for.
* @param array An associative array of filename information. Optional.
* @return string The filename.
* @since 1.5
*/
function _createFileName( $type, $parts = array() )
{
$filename = '';
switch ( $type )
{
case 'view':
if ( !empty( $parts['type'] ) ) {
$parts['type'] = '.'.$parts['type'];
}
$filename = strtolower($parts['name']).DS.'view'.$parts['type'].'.php';
break;
case 'model':
$filename = strtolower($parts['name']).'.php';
break;
}
return $filename;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -