Rufen Sie mehrere Anwendungsmodelle von einer gemeinsamen Site in einer einzigen Installation von Codeigniter 4 auf
P粉653045807
P粉653045807 2023-08-31 22:44:08
0
2
497
<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>
P粉653045807
P粉653045807

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

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage