栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Codeigniter路由正则表达式

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Codeigniter路由正则表达式

这也正是我的要求,而且我使用了类似

$route['logued/presse-access'] = "logued/presse_access";

在我之前的项目中,我需要创建300-400路由规则,其中大多数是由于短划线到下划线的转换。

对于我的下一个项目,我热切希望避免。尽管没有在任何实时服务器中使用它,但我已经对其进行了一些快速的修改并对其进行了测试,但是它对我有用。请执行下列操作..

确保您的system / application / config / config.php中的subclass_prefix如下所示

$config['subclass_prefix'] = 'MY_';

然后在system / application / libraries目录中上传一个名为MY_Router.php的文件。

<?phpclass MY_Router extends CI_Router {     function set_class($class)     {        //$this->class = $class;        $this->class = str_replace('-', '_', $class);        //echo 'class:'.$this->class;    }    function set_method($method)     {//      $this->method = $method;        $this->method = str_replace('-', '_', $method);    }    function _validate_request($segments)    {        // Does the requested controller exist in the root folder?        if (file_exists(APPPATH.'controllers/'.str_replace('-', '_', $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().str_replace('-', '_', $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]);    }}

现在,您可以自由使用网址,例如http://example.com/logued/presse-
access
,它将通过自动将破折号转换为下划线来调用适当的控制器和功能。

编辑: 这是我们的Codeigniter 2解决方案,它将覆盖新的CI_Router函数:

<?phpclass MY_Router extends CI_Router {     function set_class($class)     {        $this->class = str_replace('-', '_', $class);    }    function set_method($method)     {        $this->method = str_replace('-', '_', $method);    }    function set_directory($dir) {        $this->directory = $dir.'/';    }    function _validate_request($segments)    {        if (count($segments) == 0)        { return $segments;        }        // Does the requested controller exist in the root folder?        if (file_exists(APPPATH.'controllers/'.str_replace('-', '_', $segments[0]).'.php'))        { 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); while(count($segments) > 0 && is_dir(APPPATH.'controllers/'.$this->directory.$segments[0])) {     // Set the directory and remove it from the segment array     $this->set_directory($this->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().str_replace('-', '_', $segments[0]).'.php'))     {         if ( ! empty($this->routes['404_override']))         {  $x = explode('/', $this->routes['404_override']);  $this->set_directory('');  $this->set_class($x[0]);  $this->set_method(isset($x[1]) ? $x[1] : 'index');  return $x;         }         else         {  show_404($this->fetch_directory().$segments[0]);         }     } } else {     // Is the method being specified in the route?     if (strpos($this->default_controller, '/') !== FALSE)     {         $x = explode('/', $this->default_controller);         $this->set_class($x[0]);         $this->set_method($x[1]);     }     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.'.php'))     {         $this->directory = '';         return array();     } } return $segments;        }        // If we've gotten this far it means that the URI does not correlate to a valid        // controller class.  We will now see if there is an override        if ( ! empty($this->routes['404_override']))        { $x = explode('/', $this->routes['404_override']); $this->set_class($x[0]); $this->set_method(isset($x[1]) ? $x[1] : 'index'); return $x;        }        // Nothing else to do at this point but show a 404        show_404($segments[0]);    }}

现在必须放置该文件,例如application / core /
MY_Router.php,并确保他具有subclass_prefix的定义如

$config['subclass_prefix'] ='MY_';
在application / config / config.php中

在方法中添加了几行额外的代码

_validate_request()

while(count($segments) > 0 && is_dir(APPPATH.'controllers/'.$this->directory.$segments[0])){    // Set the directory and remove it from the segment array    $this->set_directory($this->directory . $segments[0]);    $segments = array_slice($segments, 1);}

它用于使人可以使用controllers目录内的多层子目录,而通常我们可以在controllers文件夹内使用单层子目录并可以在url中调用它。如果不需要,可以删除此代码,但对正常流程没有危害。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374366.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号