【问题标题】:Setting Dynamic base URL in CodeIgniter 4.0.2在 CodeIgniter 4.0.2 中设置动态基本 URL
【发布时间】:2020-06-19 18:10:17
【问题描述】:

我正在将我的项目从 CodeIgniter 3 迁移到 CodeIgniter 4。我对框架的新结构感到困惑。所以这是我的问题,

我将 App.php 中的基本网址设置为:

protected $proj_root= "http://".$_SERVER['HTTP_HOST'];
protected $proj_root2  = str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
protected $mybase= $proj_root.$proj_root2;
public $baseURL =  $mybase;

但我收到这样的错误:

致命错误:常量表达式在第 26 行的 D:\xampp\htdocs\delivery_dashboard\app\Config\App.php 中包含无效操作

所以从字面上看,我只能这样做:

public $baseURL = "http://localhost/my_project/"

如何使用$_SERVER['HTTP_HOST'] 动态设置我的基本网址,或者这里有什么解决方法?

感谢您的帮助!

【问题讨论】:

    标签: codeigniter php-7 base-url codeigniter-4


    【解决方案1】:

    我不知道确切的解决方案,但我与您分享了我的解决方案 转到 app/Config/Constants.php

        $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https://'.$_SERVER['HTTP_HOST'] : 'http://'.$_SERVER['HTTP_HOST'];
        defined('BASE') || define('BASE',$protocol);
    

    在 app/Config/App.php

     public $baseURL    = BASE;
    

    希望对你有帮助

    【讨论】:

    • 将基本 url 定义为常量的最佳方法是什么?
    • 这工作得很好。但是使用起来安全吗?
    【解决方案2】:

    转到 app/Config/Constants.php 并在您的 IDE 中打开它。然后将下面的代码放在文件末尾。

    if ( (! empty($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] == 'https') ||
         (! empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ||
         (! empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443') ) {
        $protocole = 'https://';
    } else {
        $protocole = 'http://';
    }
    
    $host = $_SERVER['HTTP_HOST'] . '/';
    $project = explode('/', $_SERVER['REQUEST_URI']);
    $baseurl = $protocole . $host . $project[1];
    $myappBaseUrl = $baseurl.'/';
    defined('BASESEURL') || define('BASESEURL',$myappBaseUrl);
    

    现在打开 app/Config/App.php 并替换 这个

    public $baseURL = 'http://localhost:8080/';
    

    public $baseURL = BASESEURL;
    

    【讨论】:

      【解决方案3】:

      Boominathan 的改进答案

      app/Config/Constants.php

      $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https://'.$_SERVER['HTTP_HOST'] : 'http://'.$_SERVER['HTTP_HOST']."".str_replace(basename($_SERVER['SCRIPT_NAME']), "", $_SERVER['SCRIPT_NAME']);
      defined('BASEURL') || define('BASEURL',$protocol);
      

      在 app/Config/App.php 中

      public $baseURL = BASEURL;
      

      【讨论】:

        【解决方案4】:

        转到app/Config/Constants.php 并在文件末尾添加以下代码行。

        $base_url = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || isset($_ENV['FORCE_HTTPS'])) ? 'https' : 'http';
        $base_url .= '://' . $_SERVER['HTTP_HOST'];
        $base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']), '',   $_SERVER['SCRIPT_NAME']);
        defined('BASESEURL') || define('BASESEURL', $base_url);
        

        然后进入app/Config/App.php,将BASESEURL应用到$baseURL变量

         public $baseURL = BASESEURL;
        

        【讨论】:

          【解决方案5】:

          已检查并适用于动态 baseURL 和 PHP spark 服务

          defined('BASE_URL') OR define('BASE_URL', (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off'  ? 'https://'.$_SERVER['HTTP_HOST'] : 'http://') . $_SERVER['HTTP_HOST'] . dirname($_SERVER['SCRIPT_NAME']) . '/');
          $config['base_url'] = BASE_URL;
          

          【讨论】:

          • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
          猜你喜欢
          • 1970-01-01
          • 2021-08-22
          • 1970-01-01
          • 2018-05-19
          • 1970-01-01
          • 2020-02-28
          • 2022-01-22
          • 1970-01-01
          相关资源
          最近更新 更多