在单一安装的Codeigniter 4中,从共享站点调用多个应用程序模型
P粉653045807
P粉653045807 2023-08-31 22:44:08
[PHP讨论组]

如何在单个安装的 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。我共享了系统文件夹。

P粉653045807
P粉653045807

全部回复(2)
P粉493534105

您可以通过创建新实例或使用 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');
P粉722409996

我发现了问题。这是执行此操作的正确方法。

文件夹结构

- 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 中的普通模型。或者只是创建一个共享模型文件夹如上。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号