Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, tenho um sistema só, onde tenho varios clientes. Gostaria de saber se é possivel adicionar mais um parametro na url, algo assim:
meusite.com/cliente01
meusite.com/cliente02
Assim esse parametro me dirá qual o cliente deve buscar as informações.
Meu sistema tem modulos, entao para um cliente editar um projeto dele ficaria algo assim
meusite.com/cliente01/admin/projeto/form
sacaram? =D
assim sei que devo adicionar um projeto para o cliente01, e só ele pode ver esse projeto =)
é possivel?
valeu gente
Opa Matias tudo bom?
Olha, se desse pra te pontuar, você ganhava um 10, mas acertou em cheio, e da forma mais simples que eu ja vi, achei cada gambiarra na internet.
Valeu mesmo.
To com um problema sério em escrever as urls agora, ta muito grande, tem alguma dica pra mim?
http://localhost/site/cliente01/admin/auth/login
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="pt-BR">
<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form action="{$client}/{$module}/auth/login" method="post">
Usuário<br />
<input type="text" name="username" /><br />
Senha<br />
<input type="password" name="password" /><br />
<br />
<input type="submit" value="Entrar" />
</form>
</body>
</html>
meu controller
<?php
class Admin_AuthController extends Zend_Controller_Action {
public function indexAction() {
// Busca o cliente e modulo
$client = $this->_getParam("cliente");
$module = $this->_getParam("module");
// Redireciona para o login
$this->_redirect($client . "/" . $module . "/auth/login");
}
public function loginAction() {
// Desabilita o layout
$this->_helper->layout->disableLayout();
// Busca o cliente e modulo
$client = $this->_getParam("cliente");
$module = $this->_getParam("module");
$this->view->assign("client", $client);
$this->view->assign("module", $module);
// Verifica se foi submetido via POST
if(!$this->_request->isPost()) {
return FALSE;
}
}
}
Viu só? ficou meio ruim manipular tudo isso auhahe, pensei em assinar o cliente, modulo, controle e acao tudo no bootstrap, assim todos os meus templates vai ter eles, ou ainda fazer um método pra facilitar, algo como gerarURL("auth", "login"); ai ele me retorna CLIENTE/MODULO/auth/login
sei la, o zend deve ter algo pra facilitar não tem não?
Valeu.
>
sei la, o zend deve ter algo pra facilitar não tem não?
Tem sim. Tem o helper url(). No controller ele funciona assim (nunca precisei usar):
$this->_helper->url($action, $controller, $module, array $params);
Para redirecionar você pode usar o helper redirector, que recebe os mesmos parâmetros do helper URL, na mesma ordem ($this->_helper->redirector()).
Na view o helper é diferente (uso sempre este).
<?php echo $this->url(array('controller' => 'nomeDoController', 'action' => 'nomeDoAction', 'module' => 'nomeDoModulo', 'cliente' => 'nomeDoCliente', 'outroParametro' => 'valorDoOutroParametro'), 'nomeDaRota', $reset, $encode);?>
Agora um pequena explicação sobre ele. $reset recebe true ou false. O padrão é false. Caso não seja passado ele mantém os parâmetros existentes na URL no momento da criação. Um exemplo:
// imaginando que estamos em controller => auth, module => admin, action => login, cliente => cliente01
<?php echo $this->url(array(), 'default') // /site/cliente01/admin/auth/login ?>
<?php echo $this->url(array('action' => 'logout'), 'default') // /site/cliente01/admin/auth/logout?>
<?php echo $this->url(array('action' => 'logout'), 'default', true) // /site/default/index/index/logout?>
Então, no seu formulário você teria:
<form action="<?php echo $this->url(array('controller' => 'auth', 'action' => 'login'), 'default')?>" method="post">
No seu Controller:
<?php
class Admin_AuthController extends Zend_Controller_Action {
public function indexAction() {
// Redireciona para o login
$this->_helper->redirector('login', null, null, $this->_request->getAllParams());
}
public function loginAction() {
// Desabilita o layout
$this->_helper->layout->disableLayout();
// Verifica se foi submetido via POST
if(!$this->_request->isPost()) {
return FALSE;
}
}
}
Veja se funciona como você espera e qualquer dúvida só perguntar.
Carlos Eduardo
Caramba, perfeito, como uso smarty, me fez concretizar o pensamento de assinar o view, agora tenho as funcionalidades do smarty tambem. Ficou assim
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="pt-BR">
<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form action="{$this->url(["controller"=>"auth", "action"=>"login"], "default")}" method="post">
Usuário<br />
<input type="text" name="username" /><br />
Senha<br />
<input type="password" name="password" /><br />
<br />
<input type="submit" value="Entrar" />
</form>
</body>
</html>
Muito bom, valeu =D
Sobre a reescrita da URL, você pode criar uma rota que sobrescreva a rota default. Algo assim:
resources.router.routes.default.route = ":cliente/:module/:controller/:action"
resources.router.routes.default.defaults.module = default
resources.router.routes.default.defaults.controller = index
resources.router.routes.default.defaults.action = index
resources.router.routes.default.defaults.cliente = default
Aí neste caso o nome do cliente ficaria como sendo o primeiro parâmetro, podendo ser resgatado dentro do controller em $this->_getParam('cliente'). Os valores ali definidos como defaults são os valores que serão passados caso não seja passado algum dos parâmetros.
Carlos Eduardo