Controllers e Programação em Geral

Gravatar de hevertonhlt hevertonhlt Tópico publicado em
22/08/2009, 15:49:46

Mensagens sistema (sucesso, aviso, erro)

Eai pessu,
Tipo gostaria de saber como faço para retornar mensagens para página como:

Ex: (Após um cadastro) -> Mensagem: Usuario cadastrado com sucesso!

Tenho que declarar um variavel tipo: $this->set(“mensagem”, $string) ?

Obrigado pela atenção.

ATT: Heverton L. Tasssinari

Gravatar de wemago wemago Resposta publicada em
23/08/2009, 03:16:11

Mensagens sistema (sucesso, aviso, erro)

eu usualmente uso sessions para fazer tal coisa,
tenho uma classe que produzi que tem flash messages,
que sao mesmo isso, strings ou arrays que passam para o
request seguinte e depois é destruido, ou seja so existem para
o proximo request e mais nenhum. É o ideal para esse tipo de
messagens.Em breve irei postar aqui no forum.

Gravatar de wemago wemago Resposta publicada em
23/08/2009, 03:20:09

Mensagens sistema (sucesso, aviso, erro)

funciona assim

$this->SessionComponent->setFlash(“message”, “Your page was successfully created.”);

para fixar a variavel,
depois para usar a variavel usamos, aplicamos no beforeFilter()

if( $message = $this->SessionComponent->getFlash(“message”) ): $this->set(“message”, $message); endif;

para mim este é o melhor método para ter este tipo de mensagens.

Gravatar de hevertonhlt hevertonhlt Resposta publicada em
23/08/2009, 11:37:46

Mensagens sistema (sucesso, aviso, erro)

Olá wemago,
então estava analisando o modo q tu faz, mas não compreendi uma coisa.
Vc usa o beforeFilter() ? Sua ação vai ser executada antes de executar o action?
Desta forma como irá saber qual msg pegar?
Não deveria usar o beforeRender(), que executar depois do action e antes de renderizar a view?

Obrigado pela atenção.

Gravatar de wemago wemago Resposta publicada em
23/08/2009, 21:39:26

Mensagens sistema (sucesso, aviso, erro)

Sabes a mensagem que utilizas atraves do controller, por exemplo tens
controller para login, terás 3 erros.

1º – login inválido, utilizador nao registado 2º – login inválido, erro ou no username ou password 3º – login com sucesso

isso será executado com condições, dentro dessas condições defines
a mensagem erro que utilizas.

na 1ª situação ele utiliza o erro que aconteceu sendo redireccionado para a mesma página. na 2ª situação acontece o mesmo que o primeiro. na 3ª é redireccionado para uma página desejada apresentando a mensagem definida no controller.

Percebi que preferias especificar o tipo de mensagem a ser utilizado e fiquei pensando
que se pode passar uma 3 opção para a sessão flash, mas esta 3ª opção só serve
para definir o CSS da área onde aparece a mensagem, assim teriamos por exemplo

$this->SessionComponent->setFlash(“mensagem”, “uma mensagem de erro”, “error”);

no html teriamos

<div class="mensagem error" >
    <?=$mensagem;?>
</div>

tenho é que pensar como posso passar a informação consoante o tipo de flash session
para poder seleccionar o css, para o html.

a sessão flash só existe uma vez, depois de utilizada é apagada, para não ocupar
espaço na sessão.

Não sou muito bom a explicar, espero que tenhas consigo perceber.

Gravatar de Klawdyo Klawdyo Resposta publicada em
24/08/2009, 08:14:12

Mensagens sistema (sucesso, aviso, erro)

wemago, posso dar uma sugestão?

No component, coloque o método initialize().

public function initialize(&$controller){
   $this->controller = $controller;
}

Agora noo método setFlash(), faça assim:

public function setFlash($var, $message){
    $this->controller->set($var, $message);
}

Dessa forma, você automatiza o envio das mensagens para a view, para não precisar de usar o beforeFilter, beforeRender, etc.

É só uma sugestão.

Gravatar de wemago wemago Resposta publicada em
24/08/2009, 09:08:25

Mensagens sistema (sucesso, aviso, erro)

klawdyo boa sugestão, nao tinha pensado nisso.

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
16/06/2010, 09:58:42

Mensagens sistema (sucesso, aviso, erro)

A questão é: Onde ta esse component?

Gravatar de Julio Greff Julio Greff Resposta publicada em
16/06/2010, 10:57:17

Mensagens sistema (sucesso, aviso, erro)

Não é necessário mais components, o Session do core já faz isso com Session::writeFlash("name", "value") e Session::flash("name")

Gravatar de Klawdyo Klawdyo Resposta publicada em
16/06/2010, 11:56:49

Mensagens sistema (sucesso, aviso, erro)

Julio. Em uma das versões, foi removido o writeFlash, e o flash() ficou responsável por ler e alterar, caso o parâmetro $value fosse passado ou não.
Mas novamente voltou à primeira versão. Num seria mais prático só o flash() não?
Eu, particularmente, sempre altero o Session::flash pra se comportar dessa forma, e funciona perfeitamente comigo.

Gravatar de Julio Greff Julio Greff Resposta publicada em
16/06/2010, 13:27:23

Mensagens sistema (sucesso, aviso, erro)

Não lembro de ter removido o writeFlash. Mas não se preocupe, a minha idéia é fazer isso mesmo :)

Gravatar de Klawdyo Klawdyo Resposta publicada em
16/06/2010, 13:34:56

Mensagens sistema (sucesso, aviso, erro)

Mas foi sim. Lá em uma das alterações no 0.2, ainda. Eu lembro pq fui eu mesmo quem fez o pull request.
:)

Gravatar de Julio Greff Julio Greff Resposta publicada em
16/06/2010, 13:35:53

Mensagens sistema (sucesso, aviso, erro)

Blah, eu e minha memória falha. Devo ter sobrescrito com alguma coisa então =S
Alterando agora.

Gravatar de Julio Greff Julio Greff Resposta publicada em
16/06/2010, 13:37:58

Mensagens sistema (sucesso, aviso, erro)

Agora sim: http://github.com/spaghettiphp/spaghettiphp/commit/ded4759385e7afc873091b72102e7d1d38700845

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
17/06/2010, 22:01:14

Mensagens sistema (sucesso, aviso, erro)

Eu não estou acertando usar isso.
Pelo que vocÊs dizem é tão prático, mas eu não consigo...

=[

Fatal error: Call to a member function setFlash()

Ja tentei todas as infos ai em cima

=[

Gravatar de Klawdyo Klawdyo Resposta publicada em
17/06/2010, 23:50:06

Mensagens sistema (sucesso, aviso, erro)

Oi, Izabela.
setFlash() era uma sugestão que estávamos dando, antes mesmo disso ir parar no core, pois antigamente (v 0.1) ainda não tinha a classe Session, e cogitamos fazer um component.

A partir da versão 0.2 isso foi incorporado ao core, e está lá na classe Session.

Tente aí Session::flash().

É o seguinte. Se vc está usando a 0.2, vc poderá usar dois métodos: Session::flash() e Session::writeFlash().

Onde, Session::flash() serve para pegar o texto e só estará disponível por uma vez. Session::writeFlash() serve para escrever esse valor na sessão.
Funciona assim:
O usuário fez um cadastro com sucesso, vc direciona para a página seguinte, então antes desse redirecionamento, vc escreve a mensagem de sucesso (ou de erro) na sessão


Session::writeFlash('successMessaage', 'Notícia cadastrada com sucesso');
//Agora redireciono para a próxima página
$this->redirect('/admin/noticias');

Agora, já na página posterior, eu preciso mostrar a mensagem de que tudo correu bem.
Então eu chamo flash()
Session::flash('successMessage')

Para exibir, vc pode fazer como preferir. Pode chamar no layout, pode enviar para a view a partir do $this->set(), etc.

Obs.:
SE vc estiver usando a versão 0.3 junto com a modificação que o Julio falou acima, vc não precisa usar o writeFlash(), pois só o flash() é necessário. Se vc setar os dois parâmetros, então o método estará escrevendo. Se setar só o primeiro, então estará lendo.
Em ambos os casos, e até segunda ordem, o writeFlash() continua disponível.

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
20/06/2010, 09:13:10

Mensagens sistema (sucesso, aviso, erro)

Acho que o problema é comigo!

Mais um problema e não consegui achar no forúm:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\fumec\admin\app\helpers\fck_helper.php:51) in C:\xampp\htdocs\fumec\admin\core\session.php on line 17

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
20/06/2010, 09:52:59

Mensagens sistema (sucesso, aviso, erro)

Ja verifiquei tudo em relação ao UTF-8 sem o BOM

Gravatar de Julio Greff Julio Greff Resposta publicada em
20/06/2010, 15:20:48

Mensagens sistema (sucesso, aviso, erro)

o arquivo fck_helper.php está imprimindo conteúdo. Dê uma verificada.

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
20/06/2010, 19:26:27

Mensagens sistema (sucesso, aviso, erro)

Tirei o fck do controller e a mensagem de erro sumiu, mas também a session não foi impressa...

PUTZZZZZ...

Vo dar um tiro no pé!

='(
Preciso do fck e ele da pau... msm quando não estou utilizando ele efetivamente.

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
20/06/2010, 19:56:52

Mensagens sistema (sucesso, aviso, erro)

CONSEGUI!!!!

Agora fica a dúvida, como fazer com o fck_helper????

=[
Uso helper que indicaram aqui no forum!

Gravatar de Klawdyo Klawdyo Resposta publicada em
21/06/2010, 00:36:49

Mensagens sistema (sucesso, aviso, erro)

Vc pode instanciar o helper em apenas uma action, se quiser. Nao é necessário usar em todos.
Na action que vai utilizá-lo, faça:

$this->helpers[] = 'fck';

Outra coisa que vc pode fazer, é não utilizar o helper. Ao invés disso, adicione manualmente o código do script à sua textarea.

p.s.: eu estou me coçando aqui pra fazer um trocadilho entre o fck e o fato de ele estar ferrando seu sistema (fuck).

Gravatar de Izabela Bittencourt Izabela Bittencourt Resposta publicada em
21/06/2010, 07:59:40

Mensagens sistema (sucesso, aviso, erro)

O jeito foi mesmo não utilizar o helper!

Obrigada, obrigada e obrigada Klawdyo e toda familia Spaghetti.

ps.: Klawdyo, depois vc me conta em segredo o trocadilho!! =D

Gravatar de Julio Greff Julio Greff Resposta publicada em
21/06/2010, 09:25:39

Mensagens sistema (sucesso, aviso, erro)

Eu imagino qual seja o seu problema com o fck_helper. Tente remover a tag de fechamento ?> do arquivo. Deve ser só um problema de whitespace injection, já vi acontecer antes.

Você deve estar logado para responder a um tópico ou adicionar um novo.
Efetue login ou Registre-se para participar das discussões.