Использование условия «если» для «для» - PullRequest
1 голос
/ 05 января 2020

Я хотел запустить в производство свое приложение symfony 4, все идет хорошо, но на некоторых страницах появляется ошибка 500, я могу найти причину проблемы, но не понимаю, как ее решить.

{% for articleUps in articleUp if articleUps.statut == "épinglé" %}
                    <div class="article">
                        <img src="{{ asset('assets/avatar/')~articleUps.user.image }}"
                             class="card-img-top photo rounded-circle">
                        <i class="fas fa-thumbtack"></i><a href="{{ path('forum_articles', {'id': articleUps.id , 'slug': articleUps.slug }) }}">{{ articleUps.sujet }}</a><br>
                        <strong>Crée le {{articleUps.createdAt|localizeddate('none', 'none', 'fr', null, 'EEEE d MMMM Y') }} • par<a href="{{ path('app_profil', {'username': articleUps.user.username}) }} ">{{ articleUps.user.username }}</a></strong>
                        {% if is_granted('ROLE_ADMIN') %}
                            <a href="{{ path('article_edit', {'id': articleUps.id}) }}" class="lien">editer</a>
                        {% endif %}
                    </div>
                    <hr>
                {% endfor %}

, поэтому я получаю эту ошибку в журнале symfony:

[2020-01-05 17:26:49] php.INFO: User Deprecated: Using an "if" condition on "for" tag in "forum/categories.html.twig" at line 91 is deprecated since Twig 2.10.0, use a "filter" filter or an "if" condition inside the "for" body instead (if your condition depends on a variable updated inside the loop). {"exception":"[object] (ErrorException(code: 0): User Deprecated: Using an \"if\" condition on \"for\" tag in \"forum/categories.html.twig\" at line 91 is deprecated since Twig 2.10.0, use a \"filter\" filter or an \"if\" condition inside the \"for\" body instead (if your condition depends on a variable updated inside the loop). at /var/www/html/ara.issoire-web.fr/vendor/twig/twig/src/TokenParser/ForTokenParser.php:46)"} []

как я могу сделать так, чтобы в работе больше не было ошибок?

Я изменил Мое состояние, вот новость, которая все еще работает в dev, но не работает:

{% for articleUps in articleUp %}
                        {% if articleUps.statut == "épinglé"  %}
                        <div class="article">
                            <img src="{{ asset('assets/avatar/')~articleUps.user.image }}"
                                 class="card-img-top photo rounded-circle">
                            <i class="fas fa-thumbtack"></i><a href="{{ path('forum_articles', {'id': articleUps.id , 'slug': articleUps.slug }) }}">{{ articleUps.sujet }}</a><br>
                            <strong>Crée le {{articleUps.createdAt|localizeddate('none', 'none', 'fr', null, 'EEEE d MMMM Y') }} • par<a href="{{ path('app_profil', {'username': articleUps.user.username}) }} ">{{ articleUps.user.username }}</a></strong>
                            {% if is_granted('ROLE_ADMIN') %}
                                <a href="{{ path('article_edit', {'id': articleUps.id}) }}" class="lien">editer</a>
                            {% endif %}
                        </div>
                        <hr>
                        {% endif %}
                    {% endfor %}

1 Ответ

1 голос
/ 06 января 2020

Это всего лишь предупреждение - Twig v2 не устарел if в операторе for, но все еще работает нормально, пока вы не обновитесь до следующей основной версии Twig. Symfony, и соответствующие инструменты очень хороши в отношении таких устареваний.

Что касается обеспечения отсутствия других ошибок в работе - журналы (в dev и в производстве) покажут, где есть другие проблемы для устаревания или проблемы - было бы очень полезно включить ведение журнала, в идеале с обработчиком ошибок «скрещенными пальцами». При этом сохраняются все журналы, доступные для запроса, но они записываются в файлы журналов только в случае возникновения ошибки.

Что касается поиска проблем до их возникновения - тесты. Модульные тесты, функционал и интеграции.

Начиная с Twig 2.10, вместо этого используйте фильтр фильтра или условие if внутри тела for (если ваше условие зависит от переменной, обновляемой внутри l oop и вы не используете переменную l oop). - https://twig.symfony.com/doc/2.x/filters/filter.html

...