2012-10-14 77 views
0

按照教程,就可以办理通过应用程序/控制器/ 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); 
    } 
} 

此作品为“家” -page静态页面的所有要求,但我不例如,似乎无法调用views/pages /。

我试图为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] 

回答

2

正如你已经说了,你不需要为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规则,您应该能够看到about页面http://yourdomain.com/index.php/pages/view/about或仅与http://yourdomain.com/about

+0

+1,url应该是'domain/pages/about' –

+0

谢谢,现在有很多的清晰!尽管仍然有问题的URL,我只能通过domain.com/index.php/about/而不是domain.com/about或domain.com/pages/about – estrar

+0

@estrar,然后错误是在你的' .htaccess'。看看这里的工作'.htaccess':http://codeigniter.com/user_guide/general/urls.html – Zagorax