URI路由问题,因此链接不适用于CodeIgniter

时间:2015-04-21 00:56:38

标签: php codeigniter controller url-routing href

我是CodeIgniter的新手。我有一个主页链接。我知道如何将主页链接到另一个页面,但我认为我在routes.php中做错了什么 我查看了教程,但仍然无法找到问题。我尝试用不同的方式编写路线。有人能帮我吗?

查看home.php

 <ul>
          <li><a href="home.php">Homepagina</a></li>
            <li><a href="about.php">Over</a></li>
            <li><a href="<?php echo site_url('login/login'); ?>">Inloggen</a></li>
            <li><a href="register.php">Registreren</a></li>
            <li><a href="<?php echo site_url('myprofile/myuserprofile'); ?>">Profiel</a></li>
            <li><a href="matches.php">Matches</a></li>
            <li><a href="config.php">Config</a></li>
        </ul>

home.php的控制器

class Pages extends CI_Controller {
public function view($home ='home')
{
    $this->load->helper('html');
    $this->load->helper('url');

    if (! file_exists(APPPATH.'views/pages/'.$home.'.php'))
    {

        show_404();
    }
    $data['title'] = ucfirst($home);

    $this->load->view('templates/header',$data);
    $this->load->view('templates/slideshow', $data);
    $this->load->view('pages/'.$home, $data);
    $this->load->view('templates/footer',$data);

} }

routes.php文件

$route['default_controller'] ='pages/view';
$route['login'] = 'login/view/login';

登录控制器

class Login extends CI_Controller {
public function view($login ='login')
{
    $this->load->helper('html');
    $this->load->helper('url');


    if (! file_exists(APPPATH.'views/pages/'.$login.'.php'))
    {

        show_404();
    }
    $data['title'] = ucfirst($login);

    $this->load->view('templates/header',$data);
    $this->load->view('pages/'.$login, $data);
    $this->load->view('templates/footer',$data);    
}

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

只需调用控制器和方法

<li><a href="login/login">Inloggen</a></li>

如果不起作用

<li><a href="index.php/login/login">Inloggen</a></li>

试试这个

答案 1 :(得分:0)

扩展具有构造函数的类时,需要从要扩展它的类中调用该构造函数...即

class Controller_name extends CI_Controller {
public function __construct(){
    parent::__construct(); // Call the CI_Controller __construct();
}

请注意,__实际上是两个下划线,但在此处显示为一行。

使用您的路线

<强> routes.php文件

$route['default_controller'] ='pages/view';
$route['login'] = 'login/view/login';

请记住CI网址的格式为domainname.com/controller/method

如果您不提供控制器/方法,则default_controller是浏览器重定向到的位置,即 - 只是domainname.com。使用默认控制器路由,您将重定向到页面控制器并访问视图方法。你的代码应该没问题。

如果您将domainname.com/login作为您的网址访问,您的登录路线也应该没问题 - 这将被发送到您的登录控制器,查看方法并将登录作为页面名称传递。

<强> home.php

 <ul>
   <li><a href="home.php">Homepagina</a></li>
   <li><a href="about.php">Over</a></li>
   <li><a href="<?php echo site_url('login/login'); ?>">Inloggen</a></li>
   <li><a href="register.php">Registreren</a></li>
   <li><a href="<?php echo site_url('myprofile/myuserprofile'); ?>">Profiel</a></li>
   <li><a href="matches.php">Matches</a></li>
   <li><a href="config.php">Config</a></li>
 </ul>

通过指向home.php的链接,您可能希望创建一个名为Home.php的控制器并定义index()方法。所以改变

<a href="home.php">Homepagina</a>

<a href="home">Homepagina</a>

然后该链接变为domainname.com/home - 指向主页控制器及其索引方法。

然后我们来到这个

<a href="<?php echo site_url('login/login');

这将创建 domainname.com/login/login 。您的登录路线仅寻找 domainname.com/login 。因此,当前链接 domainname.com/login/login 正在寻找一个名为login的Controller,其方法名为login。

您与myprofile / myuserprofile的链接将寻找名为 myprofile 的控制器和名为 myuserprofile 的方法。你的routes.php中没有任何东西可以解决这个问题。因此,如果这不起作用,则与路线无关。

所以这一切都指向你(可能)没有像我在开始时讨论的那样定义__construct方法。

答案 2 :(得分:0)

<li><a href="index.php/login/login">Inloggen</a></li>

如果可行,您可以删除index.php。 请按照此文档删除index page

答案 3 :(得分:0)

如果你没有使用url的完整路径,即以http[s]://开头,那么它始终是带有前斜线的智能启动链接:

<li><a href="/pages/about">Over</a></li>

你可以使用CI网址助手,如果你正在努力与.htaccess和index.php一起使用,那么你会更加安全:

echo base_url('pages/about')

另外,练习静态页面教程,注意文档的Loader lybrary页面,这样你就可以找到如何将所有数据传递给所有视图页面,让它查看文件,在这种情况下你不需要设置第二个参数在这里:

$this->load->vars($data);

$this->load->view('templates/header');
$this->load->view('templates/slideshow');
$this->load->view('pages/'.$home);
$this->load->view('templates/footer');

所有$ data数组都将传递给所有视图文件,您将能够输出这些数据。 也许你发现它有用一次。 ;)