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

时间:2015-10-21 19:18:53

标签: php codeigniter controller routes

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

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

http://example.com/igniel (without the 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');
        }
}

它会显示404错误。

这是我的Pages.php内容:

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

这是我的routes.php内容:

{{1}}

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

提前多多感谢。

最佳,

1 个答案:

答案 0 :(得分: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';

如果你有更多的子目录,你必须在控制器中安装代码,以满足我在这里为你描述的那些代码。