Appelez plusieurs modèles d'application à partir d'un site partagé dans une seule installation de Codeigniter 4
P粉653045807
P粉653045807 2023-08-31 22:44:08
0
2
522
<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>
P粉653045807
P粉653045807

répondre à tous(2)
P粉493534105

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

// 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

J'ai trouvé le problème. C'est la bonne façon de procéder.

Structure des dossiers

- 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

Contrôleur - 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'        
    ];

Constantes.php

define('ROOTSOURCE', dirname(__DIR__,3));

DBSetting.php

Modèle de partage d'espace de noms ; Utilisez CodeIgniterModel ;

Modèle d'extension de classe DBSetting{

function __construct()
{       
    parent::__construct();                  
}


public function save() {    
    return true;
}

}

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal