Вход Регистрация
Файл: 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) > )
        {
            
$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) < )
        {
            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 === )
            {
                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 === )
            {
                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 === )
            {
                
$dispatchAttrs['action'] = UTIL_String::delimiterToCaps($uriArray[$i], '-');
                continue;
            }

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

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