Переменная Symfony, переходящая из действия в представление


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

У меня есть класс действий вида в Symfony, action.класс.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

2 ответа:

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

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

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>

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

  • если администратор считает, что этот вопрос должен быть удален, пожалуйста, скажите мне, и я сделаю это

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

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

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