cari

Rumah  >  Soal Jawab  >  teks badan

Panggil berbilang model aplikasi daripada tapak kongsi dalam satu pemasangan Codeigniter 4

<p>Bagaimana untuk memanggil model dari tapak berbilang aplikasi lain dalam satu pemasangan Codeigniter 4? </p> <p>Struktur folder kelihatan seperti ini: </p> <pre class="brush:php;toolbar:false;">- WebsiteFolder --Tapak1 --- aplikasi --- awam --- ujian --- boleh ditulis (.env, spark dan fail lain) --Tapak2 --- aplikasi --- awam --- ujian --- boleh ditulis (.env, spark dan fail lain) -- sistem</pra> <p>Berikut ialah kod sampel saya: </p> <p><strong>Di tapak 1</strong></p> <hr /> <p><strong>Constants.php</strong> Saya telah menentukan direktori akar untuk mencari tapak2. </p> <pre class="brush:php;toolbar:false;">define('ROOTSOURCE', dirname(__DIR__,3) . 'site2');</pre> <p>Ini kembali: </p> <p><em>E:Laman web Projek2</em></p> <p><strong>Autoload.php</strong></p> <p>Saya telah menyediakan PSR4. </p> <pre class="brush:php;toolbar:false;">public $psr4 = [ APP_NAMESPACE => APPPATH, // Untuk ruang nama aplikasi tersuai 'Config' => APPPATH . 'SourceModels' => ROOTSOURCE '/app/Models/' ];</pre> <p>Kemudian saya menjalankan arahan SPARK: </p> <pre class="brush:php;toolbar:false;">php spark namespaces</pre> <p>dan kembalikan</p> <pre class="brush:php;toolbar:false;">+------------------+------------- --------------------------------------------------- -------------------------+--------+ |. Ruang nama | +--------------------------------+-------------------------------- ---- ------------------------------------------------ ---- ------+--------+ |. CodeIgniter | |. Apl |. E:ProjectDennisLiuwebsite1app | |. E:ProjectDennisLiuwebsite1appConfig | |. SourceModels | +--------------------------------+-------------------------------- ---- ------------------------------------------------ ---- ------+--------+</pre> <p>Kemudian cari ruang nama <strong>SourceModels</strong>. Setakat ini baik.</p> <p>Pengawal=> <strong>Home.php</strong></p> <pre class="brush:php;toolbar:false;">namespace AppControllers; gunakan SourceModels; Kelas Utama memanjangkan BaseController { indeks fungsi awam () { $setting = new SourceModelsSetting(); return view('welcome_message'); }</pre> <p>Apabila saya menjalankan pengawal, saya mendapat: </p> <blockquote> <p><strong>Kelas 'SourceModelsSetting' tidak ditemui</strong></p> </blockquote> <p>Langkah seterusnya,</p> <p><strong>Di tapak 2</strong></p> <p>Saya mempunyai model <strong>Tetapan</strong> dalam folder model Site2. </p> <p><strong>Nota: </strong></p> <p>Semuanya berfungsi dengan baik dalam Tapak 2. </p> <p>Soalan saya ialah ralat yang saya perolehi "Tetapan <strong>'SourceModelsSetting' tidak ditemui"</strong>Apakah tetapan yang betul untuk memanggil model tapak 2 dalam pemasangan apl tunggal codeigniter 4? . < /p> <p><strong>Nota: </strong> Ini adalah pemasangan tunggal codeigniter 4 untuk kedua-dua tapak web. Saya berkongsi folder sistem. </p>
P粉653045807P粉653045807485 hari yang lalu525

membalas semua(2)saya akan balas

  • P粉493534105

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

    Anda boleh mengakses model dalam kelas dengan mencipta tika baharu atau menggunakan fungsi pembantu model().

    Contoh seperti ini

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

    balas
    0
  • P粉722409996

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

    Saya jumpa masalahnya. Ini adalah cara yang betul untuk melakukan ini.

    Struktur folder

    - 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

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

    Model perkongsian ruang nama; Gunakan CodeIgniterModel

    Model sambungan Penetapan DBSeting Kelas{

    function __construct()
    {       
        parent::__construct();                  
    }
    
    
    public function save() {    
        return true;
    }

    }

    Kami juga boleh memanggil model di tapak 2. Hanya tetapkan laluan yang betul dalam Autoload.php untuk merujuk model di tapak 2.

    Nota: Jika model dalam tapak 2 mengandungi model atau pautan lain, jika kami memanggil dari tapak 1, sistem pencucuh kod 4 akan membaca pautan, model dari tapak 1. Jadi pastikan untuk memanggil model biasa di tapak 2. Atau buat sahaja folder model kongsi seperti di atas.

    balas
    0
  • Batalbalas