如何在单个安装的 Codeigniter 4 中从其他多应用程序站点调用模型?
文件夹结构如下所示:
- WebsiteFolder
-- Site1
--- app
--- public
--- tests
--- writeable
(.env, spark and other file)
-- Site2
--- app
--- public
--- tests
--- writeable
(.env, spark and other file)
-- system
这是我的示例代码:
在站点 1
Constants.php 我已经定义了一个根目录来定位 site2。
define('ROOTSOURCE', dirname(__DIR__,3) . '\site2');
此返回:
E:\Project\website\site2
Autoload.php
我已经设置了 PSR4。
public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config' => APPPATH . 'Config',
'Source\Models' => ROOTSOURCE . '/app/Models/'
];
然后我运行 SPARK 命令:
php spark namespaces
并返回
+---------------+-----------------------------------------------------------------------------------------+--------+ | Namespace | Path | Found? | +---------------+-----------------------------------------------------------------------------------------+--------+ | CodeIgniter | E:\Project\DennisLiu\website\system | Yes | | App | E:\Project\DennisLiu\website\site1\app | Yes | | Config | E:\Project\DennisLiu\website\site1\app\Config | Yes | | Source\Models | E:\Project\DennisLiu\website\site2\app\Models | Yes | +---------------+-----------------------------------------------------------------------------------------+--------+
然后找到命名空间Source\Models。到目前为止一切都还好。
控制器=> Home.php
namespace App\Controllers;
use Source\Models;
class Home extends BaseController
{
public function index()
{
$setting = new \Source\Models\Setting();
return view('welcome_message');
}
当我运行控制器时,我得到:
找不到类“Source\Models\Setting”
下一步,
在站点2
我在 Site2 模型文件夹中有模型“设置”。
注意事项:
站点 2 中的一切都运行正常。
我的问题是我收到的错误“未找到类“Source\Models\Setting””在单个应用程序安装 codeigniter 4 中调用站点 2 模型的正确设置是什么?。< /p>
注意事项: 这是两个网站的单个安装 codeigniter 4。我共享了系统文件夹。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
您可以通过创建新实例或使用 model() 辅助函数来访问类中的模型。
像这样的例子
// Create a new class manually $userModel = new \App\Models\UserModel(); // Create a new class with the model function $userModel = model('App\Models\UserModel', false); // Create a shared instance of the model $userModel = model('App\Models\UserModel');我发现了问题。这是执行此操作的正确方法。
文件夹结构
- WebsiteFolder -- Site1 --- app --- public --- tests --- writeable (.env, spark and other file) -- Site2 --- app --- public --- tests --- writeable (.env, spark and other file) -- shared/Models (DBSetting.php) -- system控制器 - Home.php
namespace App\Controllers; use shared\Models\DBSetting; class Home extends BaseController { public function index() { $db = new \shared\Models\DBSetting(); return view('welcome_message'); } }Autoload.php
public $psr4 = [ APP_NAMESPACE => APPPATH, // For custom app namespace 'Config' => APPPATH . 'Config', 'shared\Models' => ROOTSOURCE . '/shared/Models' ];Constants.php
define('ROOTSOURCE', dirname(__DIR__,3));DBSetting.php
命名空间共享\模型; 使用 CodeIgniter\Model;
类 DBSetting 扩展模型{
function __construct() { parent::__construct(); } public function save() { return true; }}
我们也可以调用站点2中的模型。只需在Autoload.php中设置正确的路径即可引用站点2中的模型。
注意: 如果站点 2 中的模型包含另一个模型或链接,如果我们从站点 1 调用,则 codeigniter 4 系统将读取来自站点 1 的链接、模型。因此,请确保调用站点 2 中的普通模型。或者只是创建一个共享模型文件夹如上。