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
402

Comment appeler des modèles depuis d'autres sites multi-applications dans une seule installation de Codeigniter 4 ?

La structure des dossiers ressemble à ceci :

- WebsiteFolder --Site1 --- application --- publique ---essais --- inscriptible (.env, spark et autres fichiers) --Site2 --- application --- publique ---essais --- inscriptible (.env, spark et autres fichiers) -- système

Voici mon exemple de code :

Sur le site 1

Constants.php J'ai défini un répertoire racine pour localiser le site2.

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

Ceci renvoie :

E:Projectwebsitesite2

Autoload.php

J'ai configuré PSR4.

public $psr4 = [ APP_NAMESPACE => APPPATH, // Pour l'espace de noms d'application personnalisé 'Config' => APPPATH 'Config', 'SourceModels' => ROOTSOURCE '/app/Modèles/'. ];≪/pré> 

Ensuite, j'exécute la commande SPARK :

espaces de noms php spark

et retour

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

Recherchez ensuite l'espace de noms SourceModels. Jusqu'ici, tout va bien.

Contrôleur=> Home.php

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

Lorsque j'exécute le contrôleur, j'obtiens :

Classe 'SourceModelsSetting' introuvable

Étape suivante,

Sur le site 2

J'ai le modèle Paramètres dans le dossier des modèles Site2.

Remarque :

Tout fonctionne correctement sur le site 2.

Ma question est l'erreur que j'obtiens : "Classe 'SourceModelsSetting' introuvable"Quel est le paramètre correct pour appeler les modèles du site 2 dans une seule installation d'application de codeigniter 4 ? . ≪ /p>

Remarque : Il s'agit d'une installation unique de codeigniter 4 pour les deux sites Web. J'ai partagé le dossier système.

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
      À propos de nous Clause de non-responsabilité Sitemap
      Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!