<i id='H2vzN'><tr id='H2vzN'><dt id='H2vzN'><q id='H2vzN'><span id='H2vzN'><b id='H2vzN'><form id='H2vzN'><ins id='H2vzN'></ins><ul id='H2vzN'></ul><sub id='H2vzN'></sub></form><legend id='H2vzN'></legend><bdo id='H2vzN'><pre id='H2vzN'><center id='H2vzN'></center></pre></bdo></b><th id='H2vzN'></th></span></q></dt></tr></i><div id='H2vzN'><tfoot id='H2vzN'></tfoot><dl id='H2vzN'><fieldset id='H2vzN'></fieldset></dl></div>

    <small id='H2vzN'></small><noframes id='H2vzN'>

  1. <tfoot id='H2vzN'></tfoot>
        <bdo id='H2vzN'></bdo><ul id='H2vzN'></ul>
      <legend id='H2vzN'><style id='H2vzN'><dir id='H2vzN'><q id='H2vzN'></q></dir></style></legend>
    1. Codeigniter Routes 正则表达式 - 在控制器/方法名称中使用破折号

      Codeigniter Routes regex - using dashes in controller/method names(Codeigniter Routes 正则表达式 - 在控制器/方法名称中使用破折号)
        <bdo id='rwZqh'></bdo><ul id='rwZqh'></ul>

              <tbody id='rwZqh'></tbody>
              <legend id='rwZqh'><style id='rwZqh'><dir id='rwZqh'><q id='rwZqh'></q></dir></style></legend>
                <i id='rwZqh'><tr id='rwZqh'><dt id='rwZqh'><q id='rwZqh'><span id='rwZqh'><b id='rwZqh'><form id='rwZqh'><ins id='rwZqh'></ins><ul id='rwZqh'></ul><sub id='rwZqh'></sub></form><legend id='rwZqh'></legend><bdo id='rwZqh'><pre id='rwZqh'><center id='rwZqh'></center></pre></bdo></b><th id='rwZqh'></th></span></q></dt></tr></i><div id='rwZqh'><tfoot id='rwZqh'></tfoot><dl id='rwZqh'><fieldset id='rwZqh'></fieldset></dl></div>

              • <tfoot id='rwZqh'></tfoot>
              • <small id='rwZqh'></small><noframes id='rwZqh'>

                本文介绍了Codeigniter Routes 正则表达式 - 在控制器/方法名称中使用破折号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                我正在寻找一条单线路由,将虚线控制器和方法名称路由到实际的下划线控制器和方法名称.

                I'm looking for a one line route to route dashed controller and method names to the actual underscored controller and method names.

                例如网址

                /controller-name/method-name-which-is-long/
                

                将路由到

                /controller_name/method_name_which_is_long/
                

                参见:http://codeigniter.com/forums/viewreply/696690/给了我问的想法:)

                see: http://codeigniter.com/forums/viewreply/696690/ which gave me the idea to ask :)

                推荐答案

                这也正是我的要求,我使用了类似的路由

                That is exactly my requirement too and I was using routes like

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

                在我之前的项目中,我需要创建 300-400 条路由规则,其中大部分是由于破折号到下划线的转换.

                In my previous project I needed to create 300-400 routing rules, most of them are due to dash to underscore conversion.

                对于我的下一个项目,我急切地想避免它.我做了一些快速破解并对其进行了测试,虽然没有在任何实时服务器中使用过,但它对我有用.执行以下操作..

                For my next project I eagerly want to avoid it. I have done some quick hack and tested it, though have not used in any live server, its working for me. Do the following..

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

                Make sure the subclass_prefix is as follows in your system/application/config/config.php

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

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

                Then upload a file named MY_Router.php in system/application/libraries directory.

                <?php
                
                class 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 它将通过自动将破折号转换为下划线来调用正确的控制器和函数.

                Now you can freely use url like http://example.com/logued/presse-access and it will call the proper controller and function by automatically converting dash to underscore.

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

                Here is our Codeigniter 2 solution which overrides the new CI_Router functions:

                <?php
                
                class 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 在 application/config 中定义为 $config['subclass_prefix'] = 'MY_';/config.php

                Now one has to place this file like application/core/MY_Router.php and make sure he has subclass_prefix is defined as $config['subclass_prefix'] = 'MY_'; in application/config/config.php

                在方法_validate_request()中添加了几行额外的代码:

                Few extra lines of code has been added in method _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中调用它.如果没有必要,可以删除此代码,但对正常流程没有危害.

                It is used so that one can make use of multi-level subdirectory inside controllers directory, whereas normally we can use single level subdirectory inside controllers folder and can call it in url. One can remove this code if it not necessary but it has no harm on the normal flow.

                这篇关于Codeigniter Routes 正则表达式 - 在控制器/方法名称中使用破折号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                相关文档推荐

                DeepL的翻译效果还是很强大的,如果我们要用php实现DeepL翻译调用,该怎么办呢?以下是代码示例,希望能够帮到需要的朋友。 在这里需要注意,这个DeepL的账户和api申请比较难,不支持中国大陆申请,需要拥有香港或者海外信用卡才行,没账号的话,目前某宝可以
                PHP通过phpspreadsheet导入Excel日期,导入系统后,全部变为了4开头的几位数字,这是为什么呢?原因很简单,将Excel的时间设置问文本,我们就能看到该日期本来的数值,上图对应的数值为: 要怎么解决呢?进行数据转换就行,这里可以封装方法,或者用第三方的
                mediatemple - can#39;t send email using codeigniter(mediatemple - 无法使用 codeigniter 发送电子邮件)
                Laravel Gmail Configuration Error(Laravel Gmail 配置错误)
                Problem with using PHPMailer for SMTP(将 PHPMailer 用于 SMTP 的问题)
                Issue on how to setup SMTP using PHPMailer in GoDaddy server(关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题)

                  <bdo id='G7udi'></bdo><ul id='G7udi'></ul>
                • <legend id='G7udi'><style id='G7udi'><dir id='G7udi'><q id='G7udi'></q></dir></style></legend>

                  • <tfoot id='G7udi'></tfoot>

                        <tbody id='G7udi'></tbody>
                    • <small id='G7udi'></small><noframes id='G7udi'>

                      <i id='G7udi'><tr id='G7udi'><dt id='G7udi'><q id='G7udi'><span id='G7udi'><b id='G7udi'><form id='G7udi'><ins id='G7udi'></ins><ul id='G7udi'></ul><sub id='G7udi'></sub></form><legend id='G7udi'></legend><bdo id='G7udi'><pre id='G7udi'><center id='G7udi'></center></pre></bdo></b><th id='G7udi'></th></span></q></dt></tr></i><div id='G7udi'><tfoot id='G7udi'></tfoot><dl id='G7udi'><fieldset id='G7udi'></fieldset></dl></div>