Maison  >  Questions et réponses  >  le corps du texte

Appelez plusieurs modèles d'application à partir d'un site partagé dans une seule installation de Codeigniter 4

<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粉653045807P粉653045807437 Il y a quelques jours483

répondre à tous(2)je répondrai

  • P粉493534105

    P粉4935341052023-09-01 20:04:17

    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');

    répondre
    0
  • P粉722409996

    P粉7224099962023-09-01 10:37:48

    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.

    répondre
    0
  • Annulerrépondre