我正在将我的项目从 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 pp\Config\App.php 中的常量表达式包含无效操作
所以字面上我只能这样做:
public $baseURL = "http://localhost/my_project/"
如何使用
$_SERVER['HTTP_HOST']
动态设置我的基本 url 或者这里有任何解决方法吗?
感谢您的帮助!
我不知道确切的解决方案,但我向你分享了我的解决方案 转到应用程序/配置/Constants.php
$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https://'.$_SERVER['HTTP_HOST'] : 'http://'.$_SERVER['HTTP_HOST'];
defined('BASE') || define('BASE',$protocol);
在应用程序/Config/App.php
public $baseURL = BASE;
希望这有帮助
转到 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;
这将帮助您添加目录(如果有),并且还将添加尾部斜杠。当您在本地主机以及在线(即 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;
改进了 Boominathan 的答案
应用程序/配置/常量.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);
在应用程序/Config/App.php中
public $baseURL = BASEURL;
转到
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;
检查并适用于动态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;