$this(当不在constants.php中的对象上下文中时)

$this(当不在constants.php中的对象上下文中时),php,codeigniter,Php,Codeigniter,当我尝试使用define('LANG',$this->uri->rsegment(2))在constants.php中,我遇到了以下错误: 在constants.php中不在对象上下文中时使用$this 我不知道为什么。我对codeIgniter非常陌生,我想定义一个常量,从URI中获取语言。我已经使用REQUEST_URI做了类似的事情,但是使用URI->segment;这将更容易。按照codeigniter的体系结构,您不能在config.php中使用$this,因为所有框架资源都不是通过加

当我尝试使用
define('LANG',$this->uri->rsegment(2))
constants.php
中,我遇到了以下错误:

在constants.php中不在对象上下文中时使用$this


我不知道为什么。我对codeIgniter非常陌生,我想定义一个常量,从URI中获取语言。我已经使用
REQUEST_URI
做了类似的事情,但是使用
URI->segment
;这将更容易。

按照codeigniter的体系结构,您不能在config.php中使用
$this
,因为所有框架资源都不是通过加载time常量加载的。php是加载的

为了完成您需要的工作,您应该执行以下操作:

创建一个新的自定义配置文件,比如app_config.php(你可以随意调用它)

将此代码添加到app_配置文件:

$ci = &get_instance();
define('LANG', $ci->uri->rsegment(2));
将此文件放在config文件夹中(config.php所在的文件夹)

在autoload.php中,将要自动加载的配置文件的名称添加为:

/*
| -------------------------------------------------------------------
|  Auto-load Config files
| -------------------------------------------------------------------
| Prototype:
|
|   $autoload['config'] = array('config1', 'config2');
|
| NOTE: This item is intended for use ONLY if you have created custom
| config files.  Otherwise, leave it blank.
|
*/

$autoload['config'] = array('app_config');

现在您可以在整个应用程序中访问常量LANG了。

您知道这是什么吗?它可能会帮助您找出问题所在。您是否尝试过
$CI=&get_instance()$CI->uri->R段(2)?是的,我尝试了
$CI
,但它不起作用…:s
$此
用于调用codeIgniter的已加载函数。@arxanas
=&
?这是什么,PHP4?@DaveRandom我不知道,这是CodeIgniter之间的惯例,或者我收集到的。这似乎是对的,但我还有另一个错误…
未定义的属性:CI\u Config::$uri
在app\u Config:
$CI=&get\u instance()中使用此代码;定义('LANG',$ci->uri->rsegment(2))我已经相应地更新了答案是的,它正在工作!但是我还需要像这样添加
$config['LANG']
$config['LANG']=define('LANG',$ci->uri->rsegment(2))“注意:如果创建自己的配置文件时使用与主配置文件相同的格式,则将项目存储在名为$config的数组中。CodeIgniter将智能地管理这些文件,以便即使数组具有相同的名称(假设数组索引的名称与另一个索引的名称不同),也不会发生冲突。”《用户指南》([)您对评论所做的编辑是错误的。它应该是
$config['LANG']=$ci->uri->rsegment(2);