как отобразить исключение файла во flashbag (try / catch)? - PullRequest
0 голосов
/ 07 мая 2019

У меня проблема с исключением, которое я хочу отобразить через flashbag в Symfony 4. Я пробовал несколько вещей безрезультатно.


    $fileName = md5(uniqid()).'.'.$file->guessExtension(); 

    try {

         $file->move($this->getParameter('file_directory'), $fileName);

    } 

    catch (FileException $exception) {

    *** How to display the FileException in a flashbag ?***

    }

В моем файле ветки у меня есть это:


    {# UploadFile Error message #}
    {% for flash_message in app.session.flashbag.get('UploadFileError') %}
        <div class="container text-center alert alert-danger mt-5 mb-5 font-weight-bold">
            {{ flash_message }} <span class="fas fa-exclamation-circle"></span>
         </div>    
    {% endfor %} 

И я также добавил это:


    {# UploadFile Error #}
    {% if error is defined %}
        {% if error %}
            <div class="alert alert-danger mb-5 font-weight-bold" role="alert">
                {{ error.messageKey|trans(error.messageData, 'security') }} <span class="fas fa-lock"></span>
            </div>
        {% endif %} 
    {% endif %} 

Но ошибка появляется только в отладкебар, хотя я делаю в контроллере.

Заранее спасибо за вашу помощь.

1 Ответ

0 голосов
/ 08 мая 2019

Без автопроводки можно обойтись:

try {
    $file->move($this->getParameter('file_directory'), $fileName);
} catch (FileException $exception) {
    $this->get('session')->getFlashBag()->add('error', $exception->getMessage());
}

Если разрешено автоматическое подключение (предпочтительный способ), передайте объект FlashBagInterface в качестве параметра метода или конструктора

/**
 * @param FlashBagInterface $bag
 */
public function checkFile(FlashBagInterface $bag)
{
    $fileName = md5(uniqid()).'.'.$file->guessExtension();

    try {
        $file->move($this->getParameter('file_directory'), $fileName);
    } catch (FileException $exception) {
        $bag->add('error', $exception->getMessage());
    }
}

Тогда в твоей ветке

{% for label, messages in app.flashes(['error']) %}
    {% for message in messages %}
        <div class="alert alert-{{ label }}">
            {{ message }}
        </div>
    {% endfor %}
{% endfor %}

Для получения дополнительной информации: Flash-сообщения

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