亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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條經驗 獲得超4個贊

好問題,因為我還沒有考慮為我自己的網站做類似的事情,現在是時候研究這個了......


這不是最好的解決方案,但需要考慮。


您可以將以下內容添加(附加)到您的 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 關注
  • 133 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號