在CodeIgniter 4.0.2中设置动态基本URL

3

我正在将我的项目从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;

但我遇到了这样的错误:

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

所以我只能这样做:

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

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

感谢您的帮助!

6个回答

13
我不知道确切的解决方案,但我向您分享了我的解决方法 前往应用程序/配置/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定义为常量是最好的方法吗? - Roshan
这很好用。但是使用它安全吗? - Sohan Arafat

0

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;

0

这将帮助您添加目录(如果有),并添加尾随斜杠。当您在本地主机和在线环境中工作时,这非常有用,例如CI/CD。

app/Config/Constants.php

$base_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . dirname($_SERVER['SCRIPT_NAME']) . (substr(dirname($_SERVER['SCRIPT_NAME']), -1) == '/' ? '' : '/');

defined('BASE_URL') || define('BASE_URL', $base_url);

app/Config/App.php

public $baseURL = BASE_URL;

0

已验证并适用于动态baseURL和PHP spark serve

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;

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0
前往 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;

0

前往 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;

1
为什么这段代码这么大?你能解释一下吗? - Sohan Arafat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接