【问题标题】:Issue with URI routing so links doesn't work with CodeIgniterURI 路由问题,因此链接不适用于 CodeIgniter
【发布时间】:2015-06-27 22:53:30
【问题描述】:

我是 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);    
}

提前感谢您的帮助!

【问题讨论】:

    标签: php codeigniter controller url-routing href


    【解决方案1】:

    只需调用控制器和方法

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

    如果不行

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

    试试这个

    【讨论】:

    • 感谢您的回答!我解决了:一定是 index.php/login
    【解决方案2】:

    当你扩展一个有构造函数的类时,你需要从你扩展它的类中调用那个构造函数......即

    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 URL 的格式为 domainname.com/controller/method

    如果您不提供控制器/方法(即仅 domainname.com),则 default_controller 是浏​​览器将被重定向到的位置。使用您的默认控制器路由,您将重定向到您的 pages 控制器并访问 view 方法。按照你的代码去应该没问题。

    如果您访问 domainname.com/login 作为您的 url,您的登录路径也应该没问题 - 这将被发送到您的登录控制器、查看方法并作为页面名称传入 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 - 它指向您的 home 控制器,它是 index 方法。

    那我们就到这里

    <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 方法。

    【讨论】:

      【解决方案3】:
      <li><a href="index.php/login/login">Inloggen</a></li>
      

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

      【讨论】:

      • 感谢您的回答!我解决了,一定是index.php/login
      【解决方案4】:

      如果您不使用 url 的完整路径,即以http[s]:// 开头,则始终是带有前斜杠的智能开始链接:

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

      您可以使用 CI url 帮助程序,如果您在使用 .htaccess 和 index.php 时遇到困难,可以更加安全:

      echo base_url('pages/about')
      

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

      $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 数组都将被传递给所有视图文件,您将能够输出这些文件。 也许你发现它有用一次。 ;)

      【讨论】:

      • 谢谢你的回答和额外的信息! :)
      猜你喜欢
      • 2018-03-16
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多