使用带有Codeigniter的一个控制器路由所有页面

时间:2018-10-10 11:00:54

标签: php codeigniter

我是代码新手。

我正试图创建一个控制器来控制网站中的每个网址;我将解释我的意思:

我具有以下视图文件夹结构:

-front
--parts
    header.php
    footer.php
   index.php
   login.php
   register.php

因此,如果我要在我的网站example.com上登录页面,只需进入example.com/login

到目前为止,在controllers文件夹中,我每个页面都有一个控制器(HomeController.php,LoginController.php,RegisterController.php)。现在,我想更改策略并有一个控制器来控制我的所有页面。

在对Google和Stack溢出进行了一些研究之后,我发现了这个线程:

Strategy to route to pages in codeigniter

因此,我决定遵循这些提示,并构建了Pages.php控制器:

defined( 'BASEPATH' ) OR exit( 'No direct script access allowed' );

class Pages extends CI_Controller {

    function _remap( $method )
    {
        is_file( APPPATH . 'views/front/' . $method . '.php' ) OR show_404();
        $this->load->view( $method );
    }

}

和在我的route.php中:

$route['default_controller'] = 'welcome';
$route['pages'] = "pages/$1";
$route['(:any)'] = "pages/$1";

但是我无法使其正常工作。

简而言之,我想创建一个控制器,如果我在views/front文件夹中创建新文件,则会自动创建url。

我已经阅读了CI文档和有关StackOverflow的一堆问题,已经测试了不同的提示,也许还在某个地方找到了答案,但是我还没有找到。

几天来我对此感到麻烦,也许我在这个概念上缺少了一些重要的东西。

有人可以帮助我澄清这个过程吗?

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作

$route['default_controller'] = 'welcome';

$route['pages']="pages/index";
$route['pages/login']="pages/login";
$route['pages/register']="pages/register";

您的控制器将是这样的:

defined( 'BASEPATH' ) OR exit( 'No direct script access allowed' );

class Pages extends CI_Controller {

function _remap( $method )
{
    is_file( APPPATH . 'views/front/' . $method . '.php' ) OR show_404();
    $this->load->view( $method );
}

  public function index() {
    $this->load->view('front/index', $data);
}
public function login() {

}

public function register() {

}

}

您的index.php视图应如下所示:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>XYZ</title>
        <?php $this->load->view('front//header'); ?>
     </head>
     <body>

    <!-- topbar starts -->
    <?php $this->load->view('front/sections/top-nav.php'); ?>
    <!-- topbar ends -->

    <div class="ch-container">
        <div class="row">

            <!-- left menu starts -->
            <?php $this->load->view('front/sections/leftmenu.php'); ?>
            <!-- left menu ends -->


        </div><!--/fluid-row-->

        <!-- Ad ends -->
        <?php $this->load->view('front/sections/footer.php'); ?>
    </div><!--/.fluid-container-->

    <!-- external javascript -->
    <?php $this->load->view('front/sections/footerjs.php'); ?>
</body>

或者您可以加载:

public function index() {
     $this->load->view('front/header');
     $this->load->view('front/index', $data);
     $this->load->view('front/footer')
}