Welcome Guest, Not a member yet? Register   Sign In
Automagically convert hyphens into underscores for class/method calls in URI
#1

[eluser]derrin[/eluser]
I was really getting sick of having to create route exceptions for every controller that I wanted to separate words with hyphens in the URI(since class and method names only allow underscores...).

The only part I updated was the _validate_request method in the Router class and added the _strip_hyphens method. Pretty simple.

See code below.

Code:
<?
    class MY_Router extends CI_Router {
        
        function MY_Router() {
            parent::CI_Router();
        }
        
        function _validate_request($segments) {
            
            $segments[0]    = $this->_strip_hyphens(@$segments[0]);
            $segments[1]    = $this->_strip_hyphens(@$segments[1]);
            
            // Does the requested controller exist in the root folder?
            if (file_exists(APPPATH.'controllers/'.$segments[0].EXT))
            {
                return $segments;
            }
            
            
            // Is the controller in a sub-folder?
            if (is_dir(APPPATH.'controllers/'.$segments[0]))
            {        
                // Set the directory and remove it from the segment array
                $this->set_directory($segments[0]);
                $segments = array_slice($segments, 1);
                
                if (count($segments) > 0)
                {
                    // Does the requested controller exist in the sub-folder?
                    if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments[0].EXT))
                    {
                        show_404($this->fetch_directory().$segments[0]);
                    }
                }
                else
                {
                    $this->set_class($this->default_controller);
                    $this->set_method('index');
                    
                    // Does the default controller exist in the sub-folder?
                    if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT))
                    {
                        $this->directory = '';
                        return array();
                    }
                    
                }
                
                return $segments;
            }

            // Can't find the requested controller...
            show_404($segments[0]);
        }
        
        function _strip_hyphens($string) {
            
            if (strstr($string, '-')) {
                return str_replace('-', '_', $string);
            }
            
            return $string;
        }
        
    }
?>

I just thought I would share since it took a bit of time to figure out. Hope it's helpful.


Messages In This Thread
Automagically convert hyphens into underscores for class/method calls in URI - by El Forum - 01-26-2010, 05:54 PM



Theme © iAndrew 2016 - Forum software by © MyBB