php - 被调用的控制器不能访问任何东西
问题描述
在 codeigniter 我有我的主控制器:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Main extends CI_Controller
{
public function index()
{
$this->load->library('../controllers/forum');
$obj = new $this->forum();
$obj->test();
}
}
和我试图访问的控制器:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Forum extends CI_Controller
{
function __construct()
{
echo "testing1";
$this->load->library('session');
parent::__construct();
$this->load->database();
$this->load->model('model_forum');
}
public function index(){
}
public function test(){
echo "testing2";
$this->data['forums'] = $this->model_forum->getForums();
$this->load->view('homepage', $this->data);
}
}
我的 model_forum.php 文件一切正常,因为如果我将所有代码放在主控制器中,它就可以工作。但是,如果我试图访问论坛控制器,则没有任何效果,只有“testing1”回显通过。错误图片:
任何人都知道我做错了什么?我是 PHP 和 codeigniter 的新手,所以我有点挣扎。提前致谢。
解决方案
您不能从 CI 中的控制器加载控制器 - 除非您使用 HMVC 或其他东西。
你应该考虑一下你的架构。如果您需要从另一个控制器调用控制器方法,那么您可能应该将该代码抽象到帮助程序或库中,并从两个控制器中调用它。
更新
再次阅读您的问题后,我意识到您的最终目标不一定是 HMVC,而是 URI 操作。如果我错了,请纠正我,但似乎您正在尝试以第一部分为方法名称来完成 URL,而完全省略了控制器名称。
如果是这种情况,您可以通过对路线进行创意来获得更清洁的解决方案。
对于一个非常基本的示例,假设您有两个控制器,controller1
并且controller2
. Controller1
有一个方法method_1
- 并且controller2
有一个方法method_2
。
您可以像这样设置路线:
$route['method_1'] = "controller1/method_1";
$route['method_2'] = "controller2/method_2";
然后,您可以使用类似的 URL 调用方法 1,http://example.com/method_1
使用http://example.com/method_2
.
尽管这是一个硬编码的、非常基本的示例 - 但如果您需要做的只是从 URL 中删除控制器,它可以让您到达您需要的位置。
您也可以重新映射您的控制器。
来自文档:“如果您的控制器包含一个名为 _remap() 的函数,无论您的 URI 包含什么,它都会被调用。”:
public function _remap($method)
{
if ($method == 'some_method')
{
$this->$method();
}
else
{
$this->default_method();
}
}
推荐阅读
- if-statement - 突变 ifelse 链不适用于某些源变量
- python - 如何将二维矩阵划分为块并将每个块乘以其中心元素?
- javascript - 使用 CDN 进行 babel 和 react 时如何解决 require 未定义?
- python-3.x - discord.py 重写 - 如何实现分片
- c# - 如何在 C# 中将插入的行捕获到一个巨大的表中?
- java - 如何打印与现在发出的方式相反的简单多行数字模式?
- keycloak - 设置 Nginx 的良好参考:在 Wildfly18(+Adapter) 中运行的应用程序与 Linux (Ubuntu) 上的本地 Keycloak9(Wildfly) 交谈
- swift - 为什么创建 Struct Image 实例的 init 方法位于 Image 的扩展而不是 Struct Image?
- javascript - 如何使此滑块自动播放?
- c# - 标签文本周围的绿色像素