No se puede utilizar el método de flash en el entorno prod
-
20-09-2019 - |
Pregunta
estoy usando los métodos setFlash y hasFlash de symfony 1.4 con WAMP 2.0
A nivel local con mi aplicación frontend_dev, todos funcionan bien.
Pero en el ambiente de producción, mi $this->forward404Unless($user->hasFlash('resultsArray'));
prueba falla.
pensé que los métodos con flash, cuando activadas por defecto. ¿Qué puedo hacer para que funciona por favor?
Editar:. He encontrado un mensaje de error interesante
Aquí está mi archivo filters.yml
# You can find more information about this file on the symfony website:
# http://www.symfony-project.org/reference/1_4/en/12-Filters
rendering: ~
security: ~
# insert your own filters here
cache: ~
flash: ~
execution: ~
En el frontend_prod.log tengo:
mar 16 de Symfony 05:57:42 [info] {} sfPatternRouting de ajuste de ruta "página de inicio" (/) para / con los parámetros array ( 'módulo' => 'principal', 'action' => 'índice',)
Mar 16 de Symfony 05:57:42 [ERR] del archivo de configuración {} sfParseException "D: \ wamp \ bin \ php \ Symfony \ symfony14 \ lib / config / config / filters.yml" especifica la categoría "flash" con clave de clase que falta.
Solución
Cómo se llama la executeShowResult acción en un contexto de redirección / avance? El flash tiene una vida útil limitada y desaparecerá después de la próxima petición. Es evidente que el resultsArray ha sido purgada.
Otros consejos
Tiene un 404 que se generan en la producción (favicon o imagen) y que cuenta como una solicitud a la acción 404 (después de una redirección) la limpieza de las variables de flash.
No estoy seguro si esto es la respuesta, pero no tengo una clave flash
en mi archivo filters.yml, en una aplicación Symfony 1.4.3, y no he tocado desde el acaparamiento de la versión del sitio de Symfony . ¿Ha intentado eliminar esa línea del archivo yml, borrar la memoria caché y volver a intentarlo?
Me pregunto si se ha habilitado el almacenamiento en caché de prod?
Si lo hace, y la cache with_layout (o si el flash está en la plantilla de acción, entonces el almacenamiento en caché la acción correspondiente), entonces será devuelta la página en caché sin el mensaje flash en vistas posteriores.
Asegúrese de que tiene el use_flash=true
en su factories.yml
user:
class: myUser
param:
timeout: 3600
logging: %SF_LOGGING_ENABLED%
use_flash: true
default_culture: %SF_DEFAULT_CULTURE%
Una respuesta bastante viejo, pero espero que sea de alguna utilidad para cualquier otra persona con el mismo problema.
@Lunohodov
(Lo siento por publicar una respuesta en lugar de un comentario, pero no puedo utilizar esta causa manera de la limitación de caracteres)
Aquí es la acción:
public function executeShowResult()
{
$user = $this->getUser();
$this->forward404Unless($user->hasFlash('resultsArray'));
$this->results = $user->getFlash('resultsArray');
$user->setFlash('resultsArray', $this->results);
$this->pager = new myArrayPager(null, 15);
$this->pager->setResultArray($this->results);
$this->pager->setPage($this->getRequestParameter('page'));
$this->pager->init();
$this->myModule = $this->getRequestParameter('myModule');
$this->myTemplate = $this->getRequestParameter('myTemplate');
$forwardPage = '../../'.$this->getRequestParameter('myModule').'/templates/'.$this->getRequestParameter('myTemplate');
$this->setTemplate($forwardPage);
return sfView::SUCCESS;
}
Editar: Otro registro interesante. En mi acción que establece el flash, he puesto un registro para probar los métodos set y hasFlash ... y funcionó:
$user = $this->getUser();
$user->setFlash('resultsArray', $this->results);
if ($user->hasFlash('resultsArray'))
{
sfContext::getInstance()->getLogger()->info("The flash is set");
}
else
{
sfContext::getInstance()->getLogger()->info("The flash is NOT set");
}
Los registros de que:
mar 16 de Symfony 06:07:13 [info] El flash está ajustado
Creo que me estoy perdiendo algo grande aquí ...