如何在Flashbag中显示文件异常(try / catch)?

时间:2019-05-07 17:23:58

标签: symfony4

我有一个例外,我想通过Symfony 4中的一个Flashbag进行显示。我尝试了几件事没有结果。


    $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 :(得分:0)

没有自动装配功能,您可以这样做:

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 Messages