为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 CodeIgniter 4 中基于 ENVIRONMENT 定义 baseURL

如何在 CodeIgniter 4 中基于 ENVIRONMENT 定义 baseURL

PHP
呼如林 2022-12-23 12:22:54
从 CodeIgniter 3 升级到 CodeIgniter 4,一开始我发现了一个我无法解决的问题。在 CI3 中,我有一个 switch 语句application/config/config.php来设置$config['base_url']. 就像是$localFolder = "localfolder";switch (ENVIRONMENT) {    case 'development':        $config['base_url'] = "http://$localFolder.loc";        break;    default:        $config['base_url'] = "http://testserver.com/$localFolder";        break;}但是在 CI4 中,app/Config/App.php现在是一个类,我还没有弄清楚如何public $baseURL = "samplefolder";根据ENVIRONMENT变量定义。立即调用函数不起作用:public $baseURL = (function(){        switch (ENVIRONMENT) {            case 'development':                $this->baseURL = "http://$localFolder.loc";                break;            default:                $this->baseURL = "http://testserver.com/$localFolder";                break;        }    })();错误:Fatal error: Constant expression contains invalid operations此外,在声明 with 后调用该函数$this->会产生错误:public $baseURL = "";public function baseURL($localFolder)    {        switch (ENVIRONMENT) {            case 'development':                $this->baseURL = "http://$localFolder.loc";                break;            default:                $this->baseURL = "http://testserver.com/$localFolder";                break;        }    }$this->baseURL("localfolder");错误:Parse error: syntax error, unexpected '$this' (T_VARIABLE), expecting function (T_FUNCTION) or const (T_CONST)我将不胜感激任何帮助!
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

更好的做法是为每个环境创建一个唯一的 .env 文件。然后将您的 conf 设置到那些 .env 文件中。例如,你可以有一个像这样的 .env 文件:


#--------------------------------------------------------------------

# ENVIRONMENT

#--------------------------------------------------------------------


CI_ENVIRONMENT = development


#--------------------------------------------------------------------

# APP

#--------------------------------------------------------------------


app.baseURL = 'http://localfolder.loc'

另一个与app.baseURL = 'http://testserver.com/localfolder'.


去检查关于它的 CI4 文档:https ://codeigniter.com/user_guide/general/configuration.html#handling-different-environments


查看完整回答
反对 回复 2022-12-23
?
守着一只汪

TA贡献1872条经验 获得超3个赞

好问题,因为我还没有考虑为我自己的网站做类似的事情,现在是时候研究这个了......


这不是最好的解决方案,但需要考虑。


您可以将以下内容添加(附加)到您的 App.php 以包含...


    protected $localFolder = 'localfolder';


    public function __construct() {

        parent::__construct();


        $this->setBaseUrl(); // Set the Base URL

    }


    protected function setBaseUrl() {

        switch ($_ENV['CI_ENVIRONMENT']) {

            case 'development':

                $this->baseURL = "http://$this->localFolder.loc";

                break;

            default:

                $this->baseURL = "http://testserver.com/$this->localFolder";

                break;

        }

    }

} // End of APP Class

因此,更改 .env 文件中的 CI_ENVIRONMENT 值将切换 $baseURL。


更好的方法


您最好将 $localFolder 设置为 ENV 值,这样您就可以从一个位置进行控制。


LOCAL_FOLDER = '本地文件夹'


在你的 .env 文件中


#--------------------------------------------------------------------

# ENVIRONMENT

#--------------------------------------------------------------------


# CI_ENVIRONMENT = production

CI_ENVIRONMENT = development

LOCAL_FOLDER = 'localfolder'

然后 setBaseUrl 方法将变为


protected function setBaseUrl() {

    switch ($_ENV['CI_ENVIRONMENT']) {

        case 'development':

            $this->baseURL = "http://{$_ENV['LOCAL_FOLDER']}.loc";

                break;

        default:

            $this->baseURL = "http://testserver.com/{$_ENV['LOCAL_FOLDER']}";

                break;

    }

}

希望这能给你一些想法。


查看完整回答
反对 回复 2022-12-23
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

另一种方法是通过注册商


这种方法的好处是您可以在一个地方覆盖任何配置。您只需创建一个 Config/Registrar.php 文件,然后像这样覆盖配置:


namespace Config;


class Registrar

{

    public static function App(): array {

        return [

            'production' => ['baseURL' => 'https://example.com'],

            'development' => ['baseURL' => 'https://dev.example.com']

        ][$_ENV['CI_ENVIRONMENT']];

    }

}


查看完整回答
反对 回复 2022-12-23
  • 3 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信