Php Codeigniter超越自己的控制器
我正在开发一个部署在不同位置的应用程序 根据位置的不同,某些控制器/模型/视图中的某些功能工作方式不同,是否有方法覆盖/扩展此类?(我不想直接更改代码库,因为这会在将来的版本中导致问题) 我正在寻找一种类似于核心类/函数的MY_uu覆盖的方法 由于我无法展示实际的代码,下面是一个我想要实现的简单示例: 与大多数部署中一样使用的普通基本控制器:Php Codeigniter超越自己的控制器,php,codeigniter,Php,Codeigniter,我正在开发一个部署在不同位置的应用程序 根据位置的不同,某些控制器/模型/视图中的某些功能工作方式不同,是否有方法覆盖/扩展此类?(我不想直接更改代码库,因为这会在将来的版本中导致问题) 我正在寻找一种类似于核心类/函数的MY_uu覆盖的方法 由于我无法展示实际的代码,下面是一个我想要实现的简单示例: 与大多数部署中一样使用的普通基本控制器: class SomeController extends CI_Controller { ... public function inde
class SomeController extends CI_Controller {
...
public function index()
{
$data['var'] = 10;
$this->load->view('someview',$data);
}
...
}
以下是一个用于现场的特殊控制器的外观:
class SomeController extends CI_Controller {
...
public function index()
{
$data['var'] = 5;
$this->load->view('someview',$data);
}
...
}
(在这种情况下,唯一的更改是var值)如果您只更改变量,那么请尝试使用环境变量,而不是基于
位置重写您的类。为此,我建议通过composer使用库
composer require vlucas/phpdotenv
安装后,在加载引导文件之前,将其添加到底部的index.php
index.php
require_once './vendor/autoload.php';
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();
/*
* --------------------------------------------------------------------
* LOAD THE BOOTSTRAP FILE
...
设置完成后,可以使用getEnv()
函数检索变量:
.env示例
CONTROLLER_VAR=5
DB_HOST=localhost
DB_PORT=3306
...
SomeController
class SomeController extends CI_Controller {
...
public function index()
{
$data['var'] = getEnv("CONTROLLER_VAR");
$this->load->view('someview',$data);
}
...
}
另外,请确保Composer是自动加载的。您可能想显示一些代码,并解释“某些控制器的工作方式不同”的含义?只是,某些函数将有一些不同的结果-根据参数,我可以预测它们将发生变化(因此将所有内容都放在配置文件中不是一个解决方案),这对我们毫无帮助。你在说什么方法?在什么情况下会发生这种情况?你说的“不同结果”是什么意思?请用一些真实的信息更新您的问题。使用环境变量如何?如果您不想根据不同的位置更改每个不同部署的应用程序代码,我认为这是一个很好的选择:这意味着什么?不同的url,不同的登录,还是什么?