Appelez plusieurs modèles d'application à partir d'un site partagé dans une seule installation de Codeigniter 4
P粉653045807
2023-08-31 22:44:08
<p>Comment appeler des modèles depuis d'autres sites multi-applications dans une seule installation de Codeigniter 4 ? </p>
<p>La structure des dossiers ressemble à ceci : </p>
<pre class="brush:php;toolbar:false;">- WebsiteFolder
--Site1
--- application
--- publique
---essais
--- inscriptible
(.env, spark et autres fichiers)
--Site2
--- application
--- publique
---essais
--- inscriptible
(.env, spark et autres fichiers)
-- système</pre>
<p>Voici mon exemple de code : </p>
<p><strong>Sur le site 1</strong></p>
<heure />
<p><strong>Constants.php</strong>
J'ai défini un répertoire racine pour localiser le site2. </p>
<pre class="brush:php;toolbar:false;">define('ROOTSOURCE', dirname(__DIR__,3) . 'site2');</pre>
<p> Ceci renvoie : </p>
<p><em>E:Projectwebsitesite2</em></p>
<p><strong>Autoload.php</strong></p>
<p>J'ai configuré PSR4. </p>
<pre class="brush:php;toolbar:false;">public $psr4 = [
APP_NAMESPACE => APPPATH, // Pour l'espace de noms d'application personnalisé
'Config' => APPPATH 'Config',
'SourceModels' => ROOTSOURCE '/app/Modèles/'.
];≪/pré>
<p>Ensuite, j'exécute la commande SPARK : </p>
<pre class="brush:php;toolbar:false;">espaces de noms php spark</pre>
<p>et retour</p>
<pre class="brush:php;toolbar:false;">+-----------------------+------------- --- ----------------------------------------------- --- -------------+--------+
| Espace de noms | Chemin |
+------------------+------------------------------ ---- ----------------------------------------------- ---- ------+--------+
| CodeIgniter | Système de site Web E:ProjectDennisLiu Oui |
| Application | E:ProjetDennisLiuwebsite1app Oui |
| Configuration | E:ProjetDennisLiuwebsite1appConfig Oui |
| Modèles sources | E:ProjectDennisLiuwebsite2appModels Oui |
+------------------+------------------------------ ---- ----------------------------------------------- ---- ------+--------+</pré>
<p>Recherchez ensuite l'espace de noms <strong>SourceModels</strong>. Jusqu'ici, tout va bien.</p>
<p>Contrôleur=> <strong>Home.php</strong></p>
<pre class="brush:php;toolbar:false;">espace de noms AppControllers;
utiliser des modèles sources ;
la classe Home étend BaseController
{
index de fonction publique()
{
$setting = nouveau SourceModelsSetting();
return view('welcome_message');
}</pré>
<p>Lorsque j'exécute le contrôleur, j'obtiens : </p>
<blockquote>
<p><strong>Classe 'SourceModelsSetting' introuvable</strong></p>
</blockquote>
<p>Étape suivante,</p>
<p><strong>Sur le site 2</strong></p>
<p>J'ai le modèle <strong>Paramètres</strong> dans le dossier des modèles Site2. </p>
<p><strong>Remarque : </strong></p>
<p>Tout fonctionne correctement sur le site 2. </p>
<p>Ma question est l'erreur que j'obtiens : "Classe <strong>'SourceModelsSetting' introuvable"</strong>Quel est le paramètre correct pour appeler les modèles du site 2 dans une seule installation d'application de codeigniter 4 ? . ≪ /p>
<p><strong>Remarque : </strong>
Il s'agit d'une installation unique de codeigniter 4 pour les deux sites Web. J'ai partagé le dossier système. </p>
Vous pouvez accéder au modèle dans une classe en créant une nouvelle instance ou en utilisant la fonction d'assistance model().
Des exemples comme celui-ci
J'ai trouvé le problème. C'est la bonne façon de procéder.
Structure des dossiers
Contrôleur - Home.php
Autoload.php
Constantes.php
DBSetting.php
Modèle de partage d'espace de noms ; Utilisez CodeIgniterModel ;
Modèle d'extension de classe DBSetting{
}
On peut aussi appeler le modèle du site 2. Définissez simplement le chemin correct dans Autoload.php pour référencer le modèle dans le site 2.
Remarque : Si un modèle du site 2 contient un autre modèle ou lien, si nous appelons depuis le site 1, le système codeigniter 4 lira le lien, modèle du site 1. Assurez-vous donc d'appeler le modèle normal sur le site 2. Ou créez simplement un dossier de modèle partagé comme ci-dessus.