Saber qual controlador chamou

14 views
Skip to first unread message

Douglas J.A.M

unread,
May 8, 2012, 7:15:07 AM5/8/12
to Kohana Php
Bom dia pessoal, eu gostaria de saber se há como saber qual o evento
chamador/anterior a action atual, por exemplo:

Tenho as actions:

novo()
editar()
salvar()

No salvar eu faço uma validação, e caso dê errado, eu gostaria de
redirecionar para a action que chamou o salvar, existe algum metódo
para isso, no momento faço a gambis de um input hidden informando de
onde vem..
Há como?

Obrigado.

Daniel Ribeiro Gomes

unread,
May 8, 2012, 7:18:40 AM5/8/12
to kohan...@googlegroups.com
Você pode redirecionar o fluxo da aplicação com $this->request->redirect($newUrl).

Att,

Daniel Ribeiro Gomes Pereira
iPhone: +55 (48) 9111-0931




--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para kohana-php+...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/kohana-php?hl=pt-BR.


Douglas J.A.M

unread,
May 8, 2012, 7:24:25 AM5/8/12
to kohan...@googlegroups.com
Não, a dúvida é se existe algo do kohana que guarde na requisição atual, qual a origem, tipo um 

response.redirect('javascript:history.go(-1)', $_POST, $erros);

onde no salvar, eu válido os dados, e em caso de erro, eu chamo quem chamou (novo registro/editar registro) adicionando os erros e o POST submetido...

Daniel Ribeiro Gomes

unread,
May 8, 2012, 7:29:37 AM5/8/12
to kohan...@googlegroups.com
Olha, a princípio, não há nada no core que te permita fazer isso.

Uma ideia de implementação seria um BaseController da sua aplicação implementar um método para guardar o histórico de navegação, ex:

class Controller_Base extends Controller
{
    protected $_history;

    public function action_before()
    {
        $this->_history[] = Url::current();
    }
}

E fazer com que todos os seus controllers sejam implementações de Controller_Base.

Assim, em qualquer momento, você pode acessar o _history e saber o histórico de navegação.

Essa é uma solução paleativa, e com certeza devem haver soluções com design melhor.

Att,

Daniel Ribeiro Gomes Pereira
iPhone: +55 (48) 9111-0931



Diego Viana

unread,
May 8, 2012, 7:42:40 AM5/8/12
to kohan...@googlegroups.com
Douglas, pq não tenta fazer a validação do form direto pelo model, ou seja, defina as regras de validação nos campos do model, chama o método de validação no controller e na view vc faz a condição, se tiver algum campo com erro, exiba o erro, entende. Não tem como eu te dar exemplos agora, mas tem na documentação como fazer...

Bernardo - Sudeste Hosting

unread,
May 8, 2012, 7:42:57 AM5/8/12
to kohan...@googlegroups.com

Veja o $this->request->referrer(); ou Request::initial()->referrer()

Mais aqui: http://stackoverflow.com/questions/7389623/kohana-3-2-get-referrer-uri
Atenciosamente,
Bernardo Sepulveda de Castro
------- ------- ------- -------- -------- --------
Sudeste Hosting...
Ideias e Soluções Web
www.sudestehosting.com.br
(21)3305-3105

Douglas J.A.M

unread,
May 8, 2012, 7:46:01 AM5/8/12
to kohan...@googlegroups.com
Estou fazendo a validação no model, mas é no action save que eu tento salvar, aí minha idéia é redirecionar para o (NOVO/EDITAR) com o $_POST e $erros.
Fiz aqui uns input hidden no form indicando qual a action advinda, acho que vai quebrar o galho.

Estou tentando fazer o sistema mais genérico possível, acham que existe maneira melhor?

public function action_salvar() {

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

$grupo = ORM::Factory('grupo', $_POST['id']);
$id = $_POST['id'];

try {
unset($_POST['id']);
$grupo->values($_POST);
$grupo->save();
Helper_URL::redirectLista();
} catch(ORM_Validation_Exception $e){
$grupo->id = $id;
$erros = $e->errors('models');
if($_POST['action'] == 'novo'){
$this->action_novo($grupo, $erros);
} else {
$this->action_editar($grupo, $erros);

Douglas J.A.M

unread,
May 8, 2012, 7:50:00 AM5/8/12
to kohan...@googlegroups.com
Achei o metódo:

    $this->request->referrer();

Társis Lima

unread,
May 8, 2012, 10:02:52 AM5/8/12
to kohan...@googlegroups.com
Já pensou em usar ajax? Se vc chamar o action salvar via ajax nem precisa voltar pois ja vai estar na página, basta pegar o retorno e mostrar na tela.
Também gosto de implementar soluções genéricas.
Reply all
Reply to author
Forward
0 new messages