Skip to content
Advertisement

Mutli Application Calling Model From Shared Site In Single Installation Codeigniter 4

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:Projectwebsitesite2

Autoload.php

I have setup PSR4.

 public $psr4 = [
        APP_NAMESPACE => APPPATH, // For custom app namespace
        'Config'      => APPPATH . 'Config',        
        'SourceModels' => ROOTSOURCE . '/app/Models/'
    ];

Then I Run SPARK COMMAND :

php spark namespaces

And return

+---------------+-----------------------------------------------------------------------------------------+--------+
| Namespace     | Path                                                                                    | Found? |
+---------------+-----------------------------------------------------------------------------------------+--------+
| CodeIgniter   | E:ProjectDennisLiuwebsitesystem                                         | Yes    |
| App           | E:ProjectDennisLiuwebsitesite1app        | Yes    |
| Config        | E:ProjectDennisLiuwebsitesite1appConfig | Yes    |
| SourceModels | E:ProjectDennisLiuwebsitesite2appModels           | Yes    |
+---------------+-----------------------------------------------------------------------------------------+--------+

Then NameSpace SourceModels is Found. So far everything is okay.

Controller => Home.php

namespace AppControllers;
use SourceModels;


class Home extends BaseController
{
    public function index()
    {                
        
        $setting = new SourceModelsSetting();                                                    

        return view('welcome_message');
        
    }

When I run the controller I got :

Class “SourceModelsSetting” 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 “SourceModelsSetting” 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.

Advertisement

Answer

I found the problem. This is the correct way to do this.

Folder Structure

- 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

Controller – Home.php

namespace AppControllers;
use sharedModelsDBSetting;



class Home extends BaseController
{
    public function index()
    {                
        
        $db = new sharedModelsDBSetting();                

        return view('welcome_message');
        
    }
}

Autoload.php

 public $psr4 = [
        APP_NAMESPACE   => APPPATH, // For custom app namespace
        'Config'        => APPPATH . 'Config',               
        'sharedModels' => ROOTSOURCE . '/shared/Models'        
    ];

Constants.php

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

DBSetting.php

namespace sharedModels; use CodeIgniterModel;

class DBSetting extends Model {

function __construct()
{       
    parent::__construct();                  
}


public function save() {    
    return true;
}   

}

We can also call the model in site 2. Just set the correct path in Autoload.php to refer to models in site 2.

Note : If the model in site 2 content another model or link, if we call from the site 1 then codeigniter 4 system will read the link, model from site 1. So make sure to call the plain model in site 2. Or just create a share model folder like above.

8 People found this is helpful
Advertisement