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