codeigniter - CodeIgniter:基于文件夹和子文件夹的URL结构

标签 codeigniter

我当前的CodeIgniter有点问题。我有一个带有“页面” Controller 的CI安装程序,该 Controller 可从/ views加载静态文件,但它最多只能包含1个子文件夹,而我正在向其添加另一个子文件夹。

它几乎可以执行以下操作:

  • 如果请求的URL段(例如site.com/url)作为文件(例如/views/url.php)位于/ views中,它将从那里加载它,但是如果URL段(例如url)实际上是文件夹在/ views内部,它将从该文件夹加载index.php(例如,在URL仍为site.com/url时,/ views / url / index.php)。
  • 上面带有其他文件名,不仅限于index.php。如果我有site.com/url/buy,它将从/ views / url文件夹加载buy.php文件。

  • 我想要实现的是在此结构中添加一个新的子文件夹:
  • 如果我进入site.com/url/buy/faq以从/ views / url / buy加载faq.php文件,依此类推。.

  • 当前的Pages.php Controller 如下:
    class Pages extends CI_Controller {
    
    public function view($page = 'index', $sub_page = 'index') {
    
        if ($page == 'index') {
            $path = $page . '.php';
        } else {
            $path = $page . '/' . $sub_page . '.php';
        }       
    
        if (!file_exists('application/views/pages/' . $path)) {
            if (!file_exists('application/views/pages/' . $page . '.php')) {
                show_404();
            } else {
                $path = $page . '.php';
            }
        }
    
        // $this->output->cache(60);
        // $this->output->enable_profiler(TRUE);
    
        $data['title'] = ucfirst($page);
        $data['url'] = lcfirst($page);
    
        $this->load->view('pages/modules/header', $data);
        $this->load->view('pages/'. $path, $data);
        $this->load->view('pages/modules/footer', $data);
    
    }
    }
    

    你们有什么建议吗?

    提前致谢!

    最佳答案

    首先,请确保您具有正确的路由。在config/routes.php中:

    $route['default_controller'] = "pages";
    

    您必须在 Controller 的constuct方法中编写代码,否则您需要在url中添加方法名称。在Pages.php中:
    class Pages extends CI_Controller {
    
         public function __construct() {
             parent::__construct();
             $this->view(); 
         }
    
         private function view() {
    
            $url_string = $this->uri->uri_string(); //get all parameters form url
    
            if(!file_exist(APPPATH . 'views/pages'. $url_string. '/index.php') {
                 if (!file_exists(APPPATH . 'views/pages/' . $url_string . '.php')) {
                      show_404();
                 } else {
                      $path = 'pages/' . $url_string . '.php';
                 }
            }
            else {
               $path = 'pages/' . $url_string . '/index.php';   
           }
         }
    
        //here codes continue ...
    }
    

    关于codeigniter - CodeIgniter:基于文件夹和子文件夹的URL结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10136827/

    相关文章:

    php - 选择查询未在 codeigniter 中执行?

    php - 是否有可能 foreach $this->input->post();在代码点火器中?

    php - 在 codeigniter 中显示带有连接表的数据

    codeigniter 事件记录获取最后 10 条记录并排序 ASC

    php - 添加安全层以尽可能防止 AJAX 僵尸程序

    codeigniter - 基于一对多关系动态添加表单字段 - 有哪些框架替代方案?

    php - 如何使用 Codeigniter 创建自定义页面,而不是作为 Controller

    javascript - 在 CodeIgniter 中将 javascript 移动到底部的策略?

    php - 为什么我的 css 或 html 在 codeigniter 中加载?

    php - 在数据不可用时显示年度报告(CI、PHP、MySQL)