Domanda

Ho una domanda in cui ogni abbonato riceve la propria cartella 'app' all'interno del loro proprio URL ad es.

www.domain.com/1234 subscriber1
www.domain.com/2345 subscriber2

Ora la connessione db è configurato in una classe in config / database.php. Voglio essere in grado di cambiare il database utilizzato in base l'URL (ad es. / 1234 = db_1234).

Come faccio a ottenere questo?

Grazie

A proposito sto utilizzando CakePHP 2.0

È stato utile?

Soluzione

La mia soluzione precedente era un carico di rifiuti. Così ho pensato di attaccare il problema da una diversa angolazione. Il mio DATABASE_CONFIG della classe (/ app / config / database.php) appare come segue:

class DATABASE_CONFIG {

  public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => '127.0.0.1',
    'login' => 'xxxx',
    'password' => 'xxxx',
    'database' => 'xxxx',
    'prefix' => '',
    'encoding' => 'utf8',
  );

  public $site_one = array(
    'datasource' => 'Database/Mysql',
    'host' => '127.0.0.1',
    // ...  
  );

  public $site_two = array(
    'datasource' => 'Database/Mysql',
    'host' => '127.0.0.1',
    // ...
  );

  public function __construct()
  {
    if (strpos(env('HTTP_HOST'), 'site_one') !== false) {      

      // use site_one database config
      $this->default = $this->site_one;

    // elseif site_two
    } elseif (strpos(env('HTTP_HOST'), 'site_two') !== false) {

      // use site_two database config
      $this->default = $this->site_two;
    }
  }

}

Quando carichi torta, il costrutto è ora chiamato automaticamente, e questo imposta la connessione al database 'default' dipende dal host.

Altri suggerimenti

Ah ho capito ora,

Ho pensato DATABASE_CONFIG è stato chiamato in modo statico in modo da non pensare di utilizzare il costrutto.

www.domain.com/12345678

function __construct() {
    // get folder
    if(substr(php_sapi_name(), 0, 3) == "cli") {
        $j = explode("/", $_SERVER['PWD']);
        $this->default['database'] = "sa_".$j[count($j)-1];
    } else {
        $j = explode("/", $_SERVER['REQUEST_URI']);
        $this->default['database'] = "sa_".$j[1];
    }
}

ma a riga di comando deve essere fatto cuocere nella cartella esempio. 12345678 /

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top