Rufen Sie mehrere Anwendungsmodelle von einer gemeinsamen Site in einer einzigen Installation von Codeigniter 4 auf
P粉653045807
2023-08-31 22:44:08
<p>Wie rufe ich Modelle von anderen Standorten mit mehreren Anwendungen in einer einzigen Installation von Codeigniter 4 auf? </p>
<p>Die Ordnerstruktur sieht folgendermaßen aus: </p>
<pre class="brush:php;toolbar:false;">- WebsiteFolder
--Site1
---ca
---öffentlich
--- Tests
--- beschreibbar
(.env, spark und andere Dateien)
--Site2
---ca
--- öffentlich
--- Tests
--- beschreibbar
(.env, spark und andere Dateien)
-- system</pre>
<p>Hier ist mein Beispielcode: </p>
<p><strong>Am Standort 1</strong></p>
<hr />
<p><strong>Constants.php</strong>
Ich habe ein Stammverzeichnis definiert, um site2 zu finden. </p>
<pre class="brush:php;toolbar:false;">define('ROOTSOURCE', dirname(__DIR__,3) . 'site2');</pre>
<p>Dies gibt Folgendes zurück: </p>
<p><em>E:Projectwebsitesite2</em></p>
<p><strong>Autoload.php</strong></p>
<p>Ich habe PSR4 eingerichtet. </p>
<pre class="brush:php;toolbar:false;">public $psr4 = [
APP_NAMESPACE => APPPATH, // Für benutzerdefinierten App-Namespace
'Config' => APPPATH .
'SourceModels' => ROOTSOURCE . '/app/Models/'
];</pre>
<p>Dann führe ich den SPARK-Befehl aus: </p>
<pre class="brush:php;toolbar:false;">php spark namespaces</pre>
<p>und return</p>
<pre class="brush:php;toolbar:false;">+------------------+------------- --- ------------------ --- --------+--------+
|. Namensraum |. Pfad |
+----+----------------------------- ---- ---------------------------------------------- ---- ------+--------+
|. CodeIgniter |. E:ProjectDennisLiuwebsitesystem |
|. App |. E:ProjectDennisLiuwebsite1app |
|. Config |. E:ProjectDennisLiuwebsite1appConfig |
|. SourceModels |. E:ProjectDennisLiuwebsite2appModels |
+----+----------------------------- ---- ---------------------------------------------- ---- ------+--------+</pre>
<p>Suchen Sie dann den Namespace <strong>SourceModels</strong>. So weit, ist es gut.</p>
<p>Controller=> <strong>Home.php</strong></p>
<pre class="brush:php;toolbar:false;">namespace AppControllers;
Verwenden Sie SourceModels.
Die Klasse Home erweitert BaseController
{
öffentliche Funktion index()
{
$setting = new SourceModelsSetting();
return view('welcome_message');
}</pre>
<p>Wenn ich den Controller starte, erhalte ich Folgendes: </p>
<blockquote>
<p><strong>Klasse „SourceModelsSetting“ nicht gefunden</strong></p>
</blockquote>
<p>Nächster Schritt,</p>
<p><strong>Am Standort 2</strong></p>
<p>Ich habe das Modell <strong>Einstellungen</strong> im Site2-Modellordner. </p>
<p><strong>Hinweis: </strong></p>
<p>In Site 2 funktioniert alles einwandfrei. </p>
<p>Meine Frage ist die Fehlermeldung „Klasse <strong>'SourceModelsSetting' nicht gefunden“</strong>Was ist die richtige Einstellung zum Aufrufen von Site-2-Modellen in einer einzelnen App-Installation von Codeigniter 4? . < /p>
<p><strong>Hinweis: </strong>
Dies ist eine einzelne Installation von Codeigniter 4 für beide Websites. Ich habe den Systemordner freigegeben. </p>
您可以通过创建新实例或使用 model() 辅助函数来访问类中的模型。
像这样的例子
我发现了问题。这是执行此操作的正确方法。
文件夹结构
控制器 - Home.php
Autoload.php
Constants.php
DBSetting.php
命名空间共享\模型; 使用 CodeIgniter\Model;
类 DBSetting 扩展模型{
}
我们也可以调用站点2中的模型。只需在Autoload.php中设置正确的路径即可引用站点2中的模型。
注意: 如果站点 2 中的模型包含另一个模型或链接,如果我们从站点 1 调用,则 codeigniter 4 系统将读取来自站点 1 的链接、模型。因此,请确保调用站点 2 中的普通模型。或者只是创建一个共享模型文件夹如上。