【问题标题】:URI routing from controller to view - codeigniter从控制器到视图的 URI 路由 - codeigniter
【发布时间】:2017-07-28 16:19:49
【问题描述】:

我是 codeigniter 的新手,

我想将登录页面请求重定向到该路由

$route['login'] = 'TravelApi/login/';

所以现在http://localhost.com/codeigniter/login 请求应该通过控制器/TravelApi.php 的 TravelApi 类的 login() 函数进行路由。

控制器

public function login(){

        $contents['login_url'] = $this->googleplus->loginURL();
        $this->load->view('frontend/login',$contents);
}

我的问题是:

当请求通过上面的控制器路由然后转到frontend/login.php —— login.php 文件被加载但没有页眉和页脚。

但是当我从 config/routes.php 中删除这条路由时

$route['login'] = 'TravelApi/login/';

然后请求不会通过控制器路由,而是直接转到 frontend/login.php 。并在这里加载带有页眉和页脚的 login.php 文件。

但我需要从控制器路由。并加载带有页眉页脚的视图文件。

那么为什么它在通过我的控制器功能路由时不加载页眉页脚?

编辑:

我在默认控制器welcome.php中找到了一个函数

public function pages($alias=NULL)
{   
    $page='frontend/'.$alias;
    $this->load->view('frontend/common/head'); // For Head Scripts
    $this->load->view('frontend/common/header', $this->common_menu('TopMenu')); // For Header Content
    $this->load->view('frontend/common/menus', $this->common_menu('MainMenu')); // For Menus
    $this->load->view($page);  
    $this->load->view('frontend/common/footer'); // For Footer Content
    $this->load->view('frontend/common/foot'); // For Footer Scripts

}

但仍然不清楚为什么它在通过我的控制器功能路由时不加载页眉页脚?

【问题讨论】:

  • 你的页眉和页脚文件分开了吗?
  • 是的,这个文件是views/frontend/common/header.php。我刚刚发现核心控制器中有一个加载页眉和页脚的函数。我正在编辑我的问题

标签: php codeigniter routing


【解决方案1】:

您可以在编辑中回答自己的问题。页眉和页脚位于单独的视图文件中,您也需要加载它们。所以这样的事情应该可以工作:

public function login(){

    $contents['login_url'] = $this->googleplus->loginURL();
    $this->load->view('frontend/common/head'); // For Head Scripts
    $this->load->view('frontend/common/header', $this->common_menu('TopMenu')); // For Header Content
    $this->load->view('frontend/common/menus', $this->common_menu('MainMenu')); 

    $this->load->view('frontend/login',$contents);

// For Menus
    $page='frontend/'.$alias;
    $this->load->view($page);  
    $this->load->view('frontend/common/footer'); // For Footer Content
    $this->load->view('frontend/common/foot'); // For Footer Scripts
}

注意:$this->load->view($page); 行看起来可能是其他页面的主要内容,这里主要内容应该是 $this->load->view('frontend/login',$contents);,如果是这种情况,请删除 $page 视图加载。

【讨论】:

  • 页脚视图正在正确加载。但菜单未加载并显示错误。因为菜单是动态的并且从数据库中获取数据。但还有一个问题是,如果我从 config/routes.php 中删除这条路线,那么它会直接转到 view/login.php 并很好地加载页眉页脚。那么从哪里来?
  • 我刚刚注意到之前在welcome.php 中定义了$page 变量,但它仍然留下了您必须定义的$alias 变量。如果你删除路由,那么它必须正在加载 frontend/login.php
  • $alias 应该包含什么?
  • 在 Welcome 控制器中默认为 null,并接受通过 URL 传入的参数。但这似乎不是登录页面的最佳方法,因为如果有人访问 domain.com/login,您的 $page 将被设置为 'frontend/',这会产生错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多