【问题标题】:Controller & routes控制器和路由
【发布时间】:2023-03-22 18:40:02
【问题描述】:

根据教程,可以通过application/controllers/pages.php处理所有对静态页面的请求

class Pages extends CI_Controller {

    public function view($page = 'home')
    {
        if( ! file_exists('application/views/pages/'.$page.'.php'))
        {
            // Whoops, we don't have a page for that!
            show_404();
        }

        $data['title'] = ucfirst($page); // Capitalize the first letter

        $this->load->view('templates/header', $data);
        $this->load->view('templates/nav', $data);
        $this->load->view('pages/'.$page, $data);
        $this->load->view('templates/aside_right', $data);
        $this->load->view('templates/bottom', $data);
    }
}

这适用于“主页”页面,但我似乎无法调用 view/pages/about 例如。

我尝试为 about-page 创建一个单独的控制器。它有效,但感觉有点不对。

应用程序/控制器/about.php

class About extends CI_Controller {

    public function index()
    {
        $this->load->view('templates/header');
        $this->load->view('templates/nav');
        $this->load->view('pages/about');
        $this->load->view('templates/aside_right');
        $this->load->view('templates/bottom');
    }
} 

我的 htaccess 文件或路由文件也有问题。使用上面编写的 About 控制器,我只能通过键入 domain.com/index.php/about 来访问该页面。我希望它是 domain.com/about 等。

这就是我的 routes.php 的样子:

$route['about'] = 'about';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';

我的 Htaccess:

RewriteEngine on
RewriteBase /
# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

【问题讨论】:

    标签: .htaccess codeigniter controller routes


    【解决方案1】:

    正如您已经说过的,您不需要为about 页面使用另一个控制器。你的问题是你的routes.php

    $route['about'] = 'about';
    $route['(:any)'] = 'pages/view/$1';
    $route['default_controller'] = 'pages/view';
    

    这样,它会搜索一个名为“about”的控制器,但没有找到该控制器。如果你删除第一行:

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

    它应该工作。在这种情况下,当您请求任何页面时,例如about,它将调用pages/view/about,其中pages 是控制器,view 是函数,about 是传递给函数的参数(替换默认的$page = home)。

    我还发现了您的逻辑中的另一个错误。你写的

    这适用于“主页”页面,但例如我似乎无法调用views/pages/about。

    您不必致电view/pages/about。您必须致电pages/view/about。请记住,语法始终相同Controller/Function/Variable1/Variable2/Variable3。因此,如果您的 routes.php 中有 $route['(:any)'] = pages/view/$1 规则,您应该能够看到带有 http://yourdomain.com/index.php/pages/view/about 或仅带有 http://yourdomain.com/aboutabout 页面。

    【讨论】:

    • 谢谢,现在很清楚了!不过,URL 仍然存在问题,我只能通过 domain.com/index.php/about/ 而不是 domain.com/about 或 domain.com/pages/about
    • @estrar,那么错误在您的.htaccess 中。看看这里的工作.htaccesscodeigniter.com/user_guide/general/urls.html
    猜你喜欢
    • 2023-03-27
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    相关资源
    最近更新 更多