Welcome Guest, Not a member yet? Register   Sign In
Case insensitivity for controller URI segments
#1

[eluser]Phil Sturgeon[/eluser]
At work I needed a way to allow controller names to be called up insensitive of case. I found a way to do it but it seems a little over the top.

Either add this one-liner to systems/libraries/Router.php at the start of _validate_request()...

Code:
$segments[0] = strtolower($segments[0]);

... or create application/libraries/MY_Router.php and put the code below in the new file.

Code:
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
* An open source application development framework for PHP 4.3.2 or newer
*
* @package        CodeIgniter
* @author        ExpressionEngine Dev Team
* @copyright    Copyright (c) 2008, EllisLab, Inc.
* @license        http://ellislab.com/codeigniter/user-guide/license.html
* @link        http://codeigniter.com
* @since        Version 1.0
* @filesource
*/

// ------------------------------------------------------------------------

/**
* Router Class
*
* Parses URIs and determines routing
*
* @package        CodeIgniter
* @subpackage    Libraries
* @author        ExpressionEngine Dev Team
* @category    Libraries
* @link        http://ellislab.com/codeigniter/user-guide/general/routing.html
*/
class MY_Router extends CI_Router {

    /**
     * Validates the supplied segments.  Attempts to determine the path to
     * the controller.
     *
     * @access    private
     * @param    array
     * @return    array
     */    
    function _validate_request($segments)
    {
        $segments[0] = strtolower($segments[0]);
        // 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]);
    }
    

}
// END Router Class

/* End of file Router.php */
/* Location: ./system/libraries/Router.php */

I believe a config option for this should be added, as while it may not be handy for everyone there are certain circumstances in which this could be useful.


Messages In This Thread
Case insensitivity for controller URI segments - by El Forum - 06-23-2009, 10:40 AM
Case insensitivity for controller URI segments - by El Forum - 06-23-2009, 10:48 AM
Case insensitivity for controller URI segments - by El Forum - 06-23-2009, 11:32 AM
Case insensitivity for controller URI segments - by El Forum - 06-23-2009, 11:50 AM
Case insensitivity for controller URI segments - by El Forum - 06-23-2009, 11:57 AM
Case insensitivity for controller URI segments - by El Forum - 06-23-2009, 12:18 PM
Case insensitivity for controller URI segments - by El Forum - 06-23-2009, 12:32 PM
Case insensitivity for controller URI segments - by El Forum - 06-24-2009, 06:44 AM
Case insensitivity for controller URI segments - by El Forum - 06-24-2009, 06:47 AM
Case insensitivity for controller URI segments - by El Forum - 06-24-2009, 07:46 AM



Theme © iAndrew 2016 - Forum software by © MyBB