O FlashComponent fornece uma maneira de definir as mensagens de notificação únicas
a serem exibidas após o processamento de um formulário ou o reconhecimento de dados.
CakePHP refere-se a essas mensagens como «mensagens flash». O FlashComponent grava
mensagens flash em $_SESSION
, para serem renderizadas em uma View usando
FlashHelper.
O FlashComponent fornece duas maneiras de definir mensagens em flash: seu método
mágico __call()
e seu método set()
. Para fornecer detalhes ao seu aplicativo,
o método mágico __call()
do FlashComponent permite que você use um nome de método
que mapeie para um elemento localizado no diretório templates/element/flash. Por
convenção, os métodos camelcased serão mapeados para o nome do elemento em minúsculas
e sublinhado:
// Usa templates/element/flash/success.php
$this->Flash->success('This was successful');
// Usa templates/element/flash/great_success.php
$this->Flash->greatSuccess('This was greatly successful');
Como alternativa, para definir uma mensagem de texto sem processar um elemento,
você pode usar o método set()
:
$this->Flash->set('This is a message');
Mensagens em Flash são anexadas a uma matriz internamente. Chamadas sucessivas
para set()
ou __call()
com a mesma chave anexarão as mensagens em
$_SESSION
. Se você deseja sobrescrever as mensagens existentes ao definir
uma mensagem flash, defina a opção clear
como true
ao configurar o
componente.
Os métodos __call()
e set()
do FlashComponent recebem opcionalmente um
segundo parâmetro, uma matriz de opções:
key
O padrão é “flash”. A chave da matriz encontrada sob a chave Flash
na sessão.
element
O padrão é null
, mas será automaticamente definido ao usar o método mágico
__call()
. O nome do elemento a ser usado para renderização.
params
Uma matriz opcional de chaves/valores para disponibilizar como variáveis dentro de um elemento.
clear
espera um bool
e permite excluir todas as mensagens da pilha atual e iniciar uma nova.
Um exemplo de uso dessas opções:
// Em seu Controller
$this->Flash->success('The user has been saved', [
'key' => 'positive',
'clear' => true,
'params' => [
'name' => $user->name,
'email' => $user->email
]
]);
// Em sua View
<?= $this->Flash->render('positive') ?>
<!-- Em templates/element/flash/success.php -->
<div id="flash-<?= h($key) ?>" class="message-info success">
<?= h($message) ?>: <?= h($params['name']) ?>, <?= h($params['email']) ?>.
</div>
Observe que o parâmetro element
sempre será substituído ao usar
Observe que o parâmetro element
sempre será substituído ao usar __call()
.
Para recuperar um elemento específico de um plugin, você deve definir o parâmetro
plugin
. Por exemplo:
// Em seu Controller
$this->Flash->warning('My message', ['plugin' => 'PluginName']);
O código acima usará o elemento warning.php em plugins/PluginName/templates/element/flash para renderizar a mensagem flash.
Nota
Por padrão, o CakePHP escapa o conteúdo das mensagens em flash para evitar
scripts entre sites. Os dados do usuário em suas mensagens flash serão codificados
em HTML e seguros para serem impressos. Se você deseja incluir HTML em suas mensagens
em flash, é necessário passar a opção escape
e ajustar seus modelos de mensagens
em flash para permitir desativar a fuga quando a opção de escape é aprovada.
É possível gerar HTML em mensagens flash usando a chave de opção 'escape'
:
$this->Flash->info(sprintf('<b>%s</b> %s', h($highlight), h($message)), ['escape' => false]);
Certifique-se de escapar da entrada manualmente, então. No exemplo acima, $highlights
e
$message
são entradas não HTML e, portanto, escapam.
Para obter mais informações sobre como renderizar suas mensagens em flash, consulte a seção FlashHelper.