【问题标题】:A folder inside views folder, Routing and/or Controller error in CI?视图文件夹中的文件夹,CI 中的路由和/或控制器错误?
【发布时间】:2016-01-20 22:23:17
【问题描述】:

我是 CI 新手,我勉强创建了自己的网站并运行了一段时间,我将所有视图结构作为 CI 指南,但后来我想放置一个名为 igniel 的 php 文件。 php 在名为“vcard”的文件夹中 inside pages 文件夹。

问题是,当我尝试使用完整路径加载它时:

http://example.com/application/views/pages/vcard/igniel.php

它显示得很好,但是一旦我使用了

http://example.com/igniel (without the php) 

它会显示 404 错误。

这是我的 Pages.php 内容:

<?php
class Pages extends CI_Controller {

        public function view($page = 'home')
        {
             if ( ! file_exists(APPPATH.'/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');
        $this->load->view('templates/nav');
        $this->load->view('pages/'.$page);
        $this->load->view('templates/footer');
        }
}

这是我的 routes.php 内容:

$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1/$2';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

我尝试在谷歌上搜索并使用一些建议,但仍然没有运气......

非常感谢。

最好的,

【问题讨论】:

    标签: php codeigniter controller routes


    【解决方案1】:

    您不应该调用查看文件。相反,您应该通过控制器发出请求,该控制器旨在调用特定文件。所以你永远不想打电话(我也不确定你是如何通过那个 URL 成功请求的):

    http://example.com/application/views/pages/vcard/igniel.php
    

    但是

    http://example.com/pages/view/igniel
    

    (没有扩展名)。

    您应该遵循 CI 文档中的基本示例。在您的情况下,这意味着您正在尝试在不符合您需求的控制器中使用具有相同代码的子目录 vcard。

    class Pages extends CI_Controller
    {
        public function view($page = 'home')
        {
            if ( ! file_exists(APPPATH.'/views/pages/'.$page.'.php'))
            {
                // Whoops, we don't have a page for that!
                show_404();
            }
            elseif ( $page == 'igniel' )// your page is in subdirectory
            {
                $data['title'] = ucfirst($page); // Capitalize the first letter
    
                $this->load->view('templates/header');
                $this->load->view('templates/nav');
                $this->load->view('pages/vcard/'.$page);
                $this->load->view('templates/footer');
            }
            else
            {
                $data['title'] = ucfirst($page); // Capitalize the first letter
    
                $this->load->view('templates/header');
                $this->load->view('templates/nav');
                $this->load->view('pages/'.$page);
                $this->load->view('templates/footer');
            }
        }
    }
    

    但是,如果你想这样称呼它:

    http://example.com/igniel
    

    您必须更改控制器中的行以将该文件包含在其路径中,如elseif 行中所述。 路由应该像这样发生:

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

    如果您有更多子目录,则必须在控制器中安装代码以接近我在此处为您描述的那些。

    【讨论】:

    • 这只是将我的主页更改为 igniel.php 哈哈...我的意思是,我需要通过键入 example.com/igniel 来访问我在 pages/vcard 中的 igniel.php 文件...
    • 当您在 url 中输入 http://example.com/application/views/pages/vcard/igniel.php 时,您能否再次确认您看到的是常规页面?
    • 我已经添加了一个路由到 $route['(:any)'] = 'pages/view/vcard/$1';但还是 404 错误...
    • 您是否将自己的$route['(:any)'] = 'pages/view/$1/$2'; 更改为$route['(:any)'] = 'pages/view/$1';
    • 您的 CI 安装出了点问题,因为没有人应该获得该 URL。 base_url('application/views/vcard/igniel.php') 无法在 CI 的正确安装中实现。再次检查General Topics
    猜你喜欢
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2013-07-23
    • 2017-05-08
    相关资源
    最近更新 更多