视图文件夹中的文件夹,CI中的路由和/或控制器错误


A folder inside views folder, Routing and/or Controller error in CI?

我是CI的新手,我几乎没有设法开始我自己的网站,并让它运行了一段时间了,我有所有的视图结构作为CI指南,但后来我想把一个名为ignielp .php的php文件放在一个名为"vcard" 的文件夹内的页面文件夹。

问题是,当我尝试使用完整路径加载它时,如:
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;

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

提前感谢。

,

您不反对调用view file。相反,你应该通过控制器发出请求,这意味着调用特定的文件。因此,您永远不想调用(我也不确定您如何成功地使用该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';

如果你有更多的子目录,你必须在控制器中插入代码来处理它们,就像我在这里描述的那样