Panggil berbilang model aplikasi daripada tapak kongsi dalam satu pemasangan Codeigniter 4
P粉653045807
P粉653045807 2023-08-31 22:44:08
0
2
498
<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粉653045807
P粉653045807

membalas semua(2)
P粉493534105

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');
P粉722409996

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan