PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Saturday, March 5, 2022

[FIXED] How to define baseURL based on ENVIRONMENT in CodeIgniter 4

 March 05, 2022     codeigniter, codeigniter-4, php     No comments   

Issue

Upgraded from CodeIgniter 3 to CodeIgniter 4 and at the begining I found a problem I cannot resolve. In CI3 I had a switch statement in application/config/config.php to set the $config['base_url']. It's like

$localFolder = "localfolder";

switch (ENVIRONMENT) {
    case 'development':
        $config['base_url'] = "http://$localFolder.loc";
        break;

    default:
        $config['base_url'] = "http://testserver.com/$localFolder";
        break;
}

But in CI4 the app/Config/App.php is now a class and I haven't figured out how could I define the public $baseURL = "samplefolder"; based on the ENVIRONMENT variable.

Calling a function immediately not working:

public $baseURL = (function(){
        switch (ENVIRONMENT) {
            case 'development':
                $this->baseURL = "http://$localFolder.loc";
                break;

            default:
                $this->baseURL = "http://testserver.com/$localFolder";
                break;
        }
    })();

Error:

Fatal error: Constant expression contains invalid operations

Also, calling the function after declaring with $this-> produces error:

public $baseURL = "";

public function baseURL($localFolder)
    {
        switch (ENVIRONMENT) {
            case 'development':
                $this->baseURL = "http://$localFolder.loc";
                break;

            default:
                $this->baseURL = "http://testserver.com/$localFolder";
                break;
        }
    }

$this->baseURL("localfolder");

Error:

Parse error: syntax error, unexpected '$this' (T_VARIABLE), expecting function (T_FUNCTION) or const (T_CONST)

I would appreciate any help!


Solution

Good question and as I haven't yet looked into doing something similar for my own sites, now is as good as time as any to look into this...

This isn't the greatest of solutions but something to consider.

You could add (append) the following to you App.php to contain...

    protected $localFolder = 'localfolder';

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

        $this->setBaseUrl(); // Set the Base URL
    }

    protected function setBaseUrl() {
        switch ($_ENV['CI_ENVIRONMENT']) {
            case 'development':
                $this->baseURL = "http://$this->localFolder.loc";
                break;
            default:
                $this->baseURL = "http://testserver.com/$this->localFolder";
                break;
        }
    }
} // End of APP Class

So changing your CI_ENVIRONMENT Value in your .env file will switch your $baseURL.

A Better way

You might be better off setting your $localFolder as a ENV value so you can control this from the one location.

LOCAL_FOLDER = 'localfolder'

Within your .env file

#--------------------------------------------------------------------
# ENVIRONMENT
#--------------------------------------------------------------------

# CI_ENVIRONMENT = production
CI_ENVIRONMENT = development
LOCAL_FOLDER = 'localfolder'

Then the setBaseUrl method would become

protected function setBaseUrl() {
    switch ($_ENV['CI_ENVIRONMENT']) {
        case 'development':
            $this->baseURL = "http://{$_ENV['LOCAL_FOLDER']}.loc";
                break;
        default:
            $this->baseURL = "http://testserver.com/{$_ENV['LOCAL_FOLDER']}";
                break;
    }
}

Hoepfully that gives you a few ideas.



Answered By - TimBrownlaw
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing