Uma area administrativa e diversos sites (One backend, many sites)
Imagine que você tenha 2~3 blogs e cada um sobre um assunto diferente. Entretanto, a estrutura deles é semelhante, ou seja, mesmos modulos, schema, etc. Acontece que, muitas das vezes um post serve tanto para um blog quanto para o outro, ou para os 3. Qual a melhor solução nesse caso? Colocar o mesmo post 3 vezes ? Não.
Aqui, mostrarei uma possível solução para essa situação.
Editar o arquivo databases.yml para suportar os respectivos bancos de dados:
# Mysql – mysql://
# Postgres – pgsql://
# SQL Server – sqlserver:// ou mssql:// # testei
# SQLite – sqlite:// – oracle://
# ODBC/JDBC – odbc:// ~ jdbc://
all:
db_blog01:
class: sfPropelDatabase
param:
dsn: pgsql://login:senha@host/nome_do_db1
db_blog02:
class: sfPropelDatabase
param:
dsn: pgsql://login:senha@host/nome_do_db2
db_blog02:
class: sfPropelDatabase
param:
dsn: pgsql://login:senha@host/nome_do_db3
Sendo assim, no form para criar o post do blog, coloque os 3 checkboxes dos bancos de dados em questao.
Receba os parametros e verifique em quais bancos será feita a inclusão do post.
$article = new Article();
$article->setTitle("Test article");
$article->setBody("Blah blah blah");
if($this->getRequestParameter("blog01")) {
$con = Propel::getConnection(db_blog01);
$article->save($con);
} elseif ($this->getRequestParameter("blog02")) {
$con = Propel::getConnection(db_blog02);
$article->save($con);
} elseif ($this->getRequestParameter("blog03")) {
$con = Propel::getConnection(db_blog03);
$article->save($con);
}
Caso queira compartilhar imagens, uma solução é utilizar o tipo de campo BLOB. O propel até hoje funcionou bem com BLOB e base Postgres 8.
