Переменная Symfony, переходящая из действия в представление - PullRequest
2 голосов
/ 03 сентября 2010

Здравствуйте, у меня есть следующая проблема:

У меня есть класс действия представления в Symfony, action.class.php, там у меня есть этот код:

foreach ($images as $i => $img)
 {
   if (strstr($request->getFileType($img), 'image'))
   {
     $enter = true; 
     $name = Util::processImages($request, $img, 'app_uploads_temp_dir');

     if ($name != '')
     {
        $userimages[$i] = $name;
        $this->uploads[$i] = true;
        $this->message = 'Image loaded';
     }
   }
}

И, на мой взгляд, я хочу сделать поле загрузки или сообщение в зависимости от случая:

<div class="fotoupload">
   <?php if ( !isset($this->uploads[1]) ): ?>
   <?php echo label_for('photosec1', 'Imagen 2:') ?>
   <?php echo input_file_tag('photosec1') ?>
   <?php else: ?>
   <span><?php $this->message ?></span>
   <?php endif ?>
</div>

но $ this-> message не установлено, ни $ message, ни какая-либо переменная, передаваемая из действия, может кто-нибудь сказать мне, почему это произошло и как я мог это решить ??

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Если вы установите $ this-> message в вашем действии, оно будет доступно как $ message в вашем представлении.

Но в вашем случае вы устанавливаете $ this-> message внутри foreach (), поэтому вы переопределяете $ this-> message для каждого цикла. Это может объяснить, почему $ message не возвращало ожидаемое вами значение.

Использование слота здесь не является подходящим вариантом использования, поскольку все $ this-> vars, установленные в действиях, уже передаются непосредственно в представление / шаблон.

2 голосов
/ 03 сентября 2010

Хорошо, все, я нашел ответ сам, извините за публикацию ответа, я оставлю его на случай, если у кого-то возникнет такая же проблема:

вся идея состоит в том, чтобы использовать слоты, код будетбыть таким:

foreach ($images as $i => $img)
 {
   if (strstr($request->getFileType($img), 'image'))
   {
     $enter = true; 
     $name = Util::processImages($request, $img, 'app_uploads_temp_dir');

     if ($name != '')
     {
        $userimages[$i] = $name;
        $uploads[$i] = true;
        $message = 'Image loaded';
     }
   }
}

$this->getResponse()->setSlot("message", $message);

и в следующем коде использовать переменную:

   <span><?php echo get_slot("message") ?></span>

Спасибо в любом случае!

  • Если администратор считает, чтоэтот вопрос надо удалить, скажите пожалуйста и я сделаю это
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...