How to call models from other multi application site in single installation codeigniter 4 ?
The folder structure look like this :
- WebsiteFolder
-- Site1
--- app
--- public
--- tests
--- writeable
(.env, spark and other file)
-- Site2
--- app
--- public
--- tests
--- writeable
(.env, spark and other file)
-- system
This is my example code :
In Site1
Constants.php I have define a root directory to targeted the site2.
define('ROOTSOURCE', dirname(__DIR__,3) . '\site2');
This return :
E:\Project\website\site2
Autoload.php
I have setup PSR4.
public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config' => APPPATH . 'Config',
'Source\Models' => ROOTSOURCE . '/app/Models/'
];
Then I Run SPARK COMMAND :
php spark namespaces
And return
--------------- ----------------------------------------------------------------------------------------- --------
| Namespace | Path | Found? |
--------------- ----------------------------------------------------------------------------------------- --------
| CodeIgniter | E:\Project\DennisLiu\website\system | Yes |
| App | E:\Project\DennisLiu\website\site1\app | Yes |
| Config | E:\Project\DennisLiu\website\site1\app\Config | Yes |
| Source\Models | E:\Project\DennisLiu\website\site2\app\Models | Yes |
--------------- ----------------------------------------------------------------------------------------- --------
Then NameSpace Source\Models is Found. So far everything is okay.
Controller => Home.php
namespace App\Controllers;
use Source\Models;
class Home extends BaseController
{
public function index()
{
$setting = new \Source\Models\Setting();
return view('welcome_message');
}
When I run the controller I got :
Class "Source\Models\Setting" not found
Next,
In Site2
I have model "Setting" in Site2 Model Folder.
For Note :
Everything In Site 2 Is running properly.
My question is for the error I got "Class "Source\Models\Setting" not found" What is the proper setting to call the site 2 model in single application installation codeigniter 4 ?.
For Note : This is single installation codeigniter 4 for two website. And I shared the system folder.
CodePudding user response:
You can access models within your classes by creating a new instance or using the model() helper function.
example like this
// 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');
CodePudding user response:
It makes no real sense to me for different apps call each others models. If this was a HMVC structure where you had modules and they could talk to each other inside the same app, that would make sense. But since these are two different apps makes no sense because in the long run you're basically creating dependencies between them when they should work on their own.
Either way, if you really want to do that you may need to do that in a native way and not in a codeigniter way.
namespace App\Controllers;
require_once ROOTSOURCE . '/app/Models/UserModel.php';
class Home extends BaseController
{
public function index()
{
//Access the model like so:
$setting = new UserModel();
return view('welcome_message');
}
}