Вход Регистрация
Файл: core/default_route.php
Строк: 129
<?php

class PEEP_DefaultRoute
{
    private 
$controllerNamePrefix = 'CTRL';

    
/**
     * @return string
     */
//    public function getControllerNamePrefix()
//    {
//        return $this->controllerNamePrefix;
//    }
//
//    /**
//     * @param string $controllerNamePrefix
//     */
//    public function setControllerNamePrefix( $controllerNamePrefix )
//    {
//        $this->controllerNamePrefix = $controllerNamePrefix;
//    }

    /**
     * Generates URI using provided params.
     *
     * @throws InvalidArgumentException
     * @param string $controller
     * @param string $action
     * @param array $params
     * @return string
     */
    
public function generateUri( $controller, $action = null, array $params = array() )
    {
        if ( empty(
$controller) || ( empty($action) && !empty($params) ) )
        {
            throw new 
InvalidArgumentException("Can't generate uri for empty controller/action !");
        }

        
$ctrlParts = explode('_', $controller);
        
$moduleNamePrefix = str_replace('ctrl', '', strtolower($ctrlParts[1]));

        if ( 
strlen($moduleNamePrefix) > 0 )
        {
            
$moduleNamePrefix .= '-';
        }

        
$controller = trim($controller);
        
$action = ( $action === null ) ? null : trim($action);

        
$paramString = '';

        foreach ( 
$params as $key => $value )
        {
            
$paramString .= trim($key) . '/' . urlencode(trim($value)) . '/';
        }

        
$className = str_replace(PEEP::getAutoloader()->getPackagePointer($controller) . '_', '', $controller);

        
$plugin = PEEP::getPluginManager()->getPlugin(PEEP::getAutoloader()->getPluginKey($controller));

        if ( 
$action === null )
        {
            return 
strtolower($plugin->getModuleName()) . '/' . substr(UTIL_String::capsToDelimiter($className, '-'), 1);
        }

        return 
$moduleNamePrefix . strtolower($plugin->getModuleName()) . '/' . substr(UTIL_String::capsToDelimiter($className, '-'), 1) . '/' . UTIL_String::capsToDelimiter($action, '-') . '/' . $paramString;
    }

    
/**
     * Returns dispatch params (controller, action, vars) for provided URI.
     * 
     * @throws Redirect404Exception
     * @param string $uri
     * @return array
     */
    
public function getDispatchAttrs( $uri )
    {
//TODO check if method is in try/catch
        
$uriString = UTIL_String::removeFirstAndLastSlashes($uri);

        
$uriArray = explode('/', $uriString);

        if ( 
sizeof($uriArray) < 2 )
        {
            throw new 
Redirect404Exception('Invalid uri was provided for routing!');
        }

        
$controllerNamePrefixAdd = '';

        if ( 
strstr($uriArray[0], '-') )
        {
            
$uriPartArray = explode('-', $uriArray[0]);
            
$uriArray[0] = $uriPartArray[1];
            
$controllerNamePrefixAdd = strtoupper($uriPartArray[0]);
        }

        
$dispatchAttrs = array();

        
$classPrefix = null;

        
$arraySize = sizeof($uriArray);

        for ( 
$i = 0; $i < $arraySize; $i++ )
        {
            if ( 
$i === 0 )
            {
                try
                {
                    
$classPrefix = strtoupper(PEEP::getPluginManager()->getPluginKey($uriArray[$i])) . '_' . $controllerNamePrefixAdd . $this->controllerNamePrefix;
                }
                catch ( 
InvalidArgumentException $e )
                {
                    throw new 
Redirect404Exception('Invalid uri was provided for routing!');
                }

                continue;
            }

            if ( 
$i === 1 )
            {
                if ( 
$classPrefix === null )
                {
                    throw new 
Redirect404Exception('Invalid uri was provided for routing!');
                }

                
$ctrClass = $classPrefix . '_' . UTIL_String::delimiterToCaps('-' . $uriArray[$i], '-');

                if ( !
file_exists(PEEP::getAutoloader()->getClassPath($ctrClass)) )
                {
                    throw new 
Redirect404Exception('Invalid uri was provided for routing!');
                }

                
$dispatchAttrs['controller'] = $ctrClass;
                continue;
            }

            if ( 
$i === 2 )
            {
                
$dispatchAttrs['action'] = UTIL_String::delimiterToCaps($uriArray[$i], '-');
                continue;
            }

            if ( 
$i % 2 !== 0 )
            {
                
$dispatchAttrs['vars'][$uriArray[$i]] = null;
            }
            else
            {
                
$dispatchAttrs['vars'][$uriArray[$i - 1]] = $uriArray[$i];
            }
        }

        return 
$dispatchAttrs;
    }
}
Онлайн: 1
Реклама