Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal.
Estou montando uma sistema para min em MVC ja meio que estou conseguindo me entender com o MVC, porem estou querendo usar sistema de alert do bootstrap gostaria de uma ideia de criar esses alert com as msg reverente ao que aconteceu na pagina do controller.
Tentei usar header mais obviamente ele não enviar o valor da msg.
Algum pode me dar uma luz por favor.
Uma forma mais elegante e eficiente é usar sistemas de flash message, o funcionamento é simples. Na prática você tem a mensagem armazenada na sessão, quando ela for resgatada será também removida, portanto se você fizer um redirecionamento ou mesmo capturá-la diretamente na view sem redirecionar, a mensagem será exibida.
Hum, obrigado pela dica Marcielo. Dei uma pesquisa sobre este termo e cheguei a mais ou menos isso:
<?php
class FlashMessage
{
private $msgTypes = array(
'e' => 'error',
's' => 'success',
'w' => 'warning'
);
private $messages = array();
public function __construct()
{
$this->msgTypes = array();
if ( isset( $_SESSION['flash_messages'] ) ) {
$_SESSION['flash_messages'] = array();
}
}
public function add( $msgType, $message )
{
if ( !array_key_exists( $msgType, $this->msgTypes ) ) {
throw new InvalidArgumentException( sprintf( '%s is not a valid message type.', $msgType ) );
}
$_SESSION['flash_messages'][$msgType] = sprintf( '%s', $message );
}
public function show()
{
foreach( $_SESSION['flash_messages'] as $type => $message ) {
$this->messages[$type] = $message;
}
return $this->messages;
}
public function __destruct()
{
unset( $_SESSION['flash_messages'] );
}
}
Seria mais ou menos essa a idéia mesmo?
Valeu
Opa pessoal.
Legal esse flash message nem sabia que tinha algo do tipo.
Algum saberia um tutorial legal pra aprender mais sobre, de preferencia em br pois meu ingles e ruim.
Obrigado.
#4 seria essa a ideia mesmo, ficou bacana a implementação, porém o problema aí é que se você instanciar a classe e não capturar as mensagens elas serão perdidas.. e a intenção é que elas sejam removidas somente se capturadas.
Poderia ser algo mais ou menos assim..
class FlashMessenger {
private $messages = array();
public function __construct() {
$this->load();
}
public function load() {
if (isset($_SESSION['flash_message'])) {
$this->messages = $_SESSION['flash_message'];
}
}
public function clear() {
$this->messages = array();
}
public function error($message) {
$this->message('error', $message);
}
public function success($message) {
$this->message('success', $message);
}
public function message($type, $message) {
$this->messages[] = array($type, $message);
}
public function getLastMessage() {
return array_pop($this->messages);
}
public function getMessages() {
$messages = $this->messages;
$this->clear();
return $messages;
}
public function storage() {
$_SESSION['flash_message'] = $this->messages;
}
public function __destruct() {
$this->storage();
}
}
Usando..
$fm = new FlashMessage();
$fm->success('Operação realizada com sucesso');
// capturando a mensagem
list($type, $message) = $fm->getLastMessage();
echo $type; // success
echo $message; // Operação realizada com sucesso
#5 de uma olhada nas implementações de alguns frameworks talvez possa te ajudar, alguns tem lá suas "frescurinhas" a mais, mas no geral tem a mesma ideia.
É verdade @Marcielo, esqueci deste detalhe. Acho que compreendi agora, obrigado pelo esclarecimento e por compartilhar conhecimento! Thanks a lot.
Você pode usar o header sim e enviar a mensagem por querystring:
header('Location:pagina.php?msg=teste');
Ou pode ainda instanciar uma view específica com a mensagem, ou passar por parâmetros:
$data = array(
Eu não sou perito em MVC nem em OO, ainda estou estudando, mas imagino que assim possa funcionar. Quem sabe algum modera vem aqui dar uns pitacos melhor para nós dois? rs