Symfony4: маршрутизация ссылается на другую страницу

После обновления с Symfony 3.4 до 4.4 и проверки работы я обнаружил, что app_hq_article_trendtag в input.html.twig ссылается на другую страницу. Эталонный пункт назначения был B для ArticleController. Начиная с Symfony 3.4, он работал нормально. Вы ошиблись в настройках? Если есть что еще проверить, кроме команды пожалуйста, скажите мне.

Я также изменил код и проверил работу. Измените @Template("@AppBundle/Hq/Article/index.html.twig") в ArticleController на другую страницу-> Отображается другая страница. Измените @Template("@AppBundle/Hq/Article/trendTag.html.twig") в ArticleController на другую страницу-> Без изменений Измените app_hq_article_trendtag input.html.twig на другую страницу-> Отображается другая страница.

ArticleController

 * @Route("/hq")
 */
class ArticleController extends BaseArticleController
{
    protected $indexRoute = "app_hq_article_index";

    protected function getInputTemplate($articleType)
    {
        return sprintf("@AppBundle/Hq/%s/input.html.twig", ucfirst($articleType));
    }

    /**
     * @Method("GET")
     * @Route("/article/")
     *
     * @Template("@AppBundle/Hq/Article/index.html.twig")
     */
    public function indexAction(Request $request)
    {
        return parent::indexAction($request);
    }
    /**
     * @Method("GET")
     * @Route("/article/trendtag")
     *
     * @Template("@AppBundle/Hq/Article/trendTag.html.twig")
     */
    public function trendTagAction(Request $request)
    {
        return parent::trendTagAction($request);
    }

Brandevent / input.html.twig

{{ form_start(form) }}
        <div class = "formGroup trendTags" data-prototype = "{{ macros.trendTagForm(form.trendTags.vars.prototype)|e }}" data-index = "{{ ec_tag_contents|length }}">
            <label>Tag</label>
            <button type = "button" class = "add btn">Add</button>
            <ul class = "trend-tag-list2" {% if not ec_tag_contents|default %} style = "display:none"{% endif %} id = "trendTagsWrap">
                {% for tag in ec_tag_contents|default %}
                    <li>
                        <div class = "tagForm">
                            <div class = "input-trendtag-display-name">&nbsp;{{ tag.name }}</div>
                            <div class = "input-trendtag-display-term">({{ tag.str_tag_display }}  {{ tag.str_term }})</div>
                            <br>
                            {% for category in tag.categories|split(',') %}
                            <div class = "tag-form__category-sticker" name = "{{ category }}">{{ category }}</div>
                            {% endfor %}
                            <button class = "removeTrendTag"><i class = "icon-remove"></i></button>
                        </div>
                        <div id = "brandevent_trendTags_{{ loop.index0 }}">
                            <input type = "hidden" id = "brandevent_trendTags_{{ loop.index0 }}_trendTagId" name = "brandevent[trendTags][{{ loop.index0 }}][trendTagId]" required = "required" value = "{{ tag.tag_id }}">

                        </div>
                    </li>
                {% endfor %}
                {% do form.trendTags.setRendered(true) %}
            </ul>
        </div>

{{ form_end(form) }}

      //Problem part
      {% set q = app.request.query.get("q")|default({}) %}
      {% set trendTagUrl = path("app_hq_article_trendtag", {"q[sex]": q.sex|default(0), "q[brand_id]": q.brand_id|default(), "q[del_flg]": 0}) %}
      <div id = "trendTagDialog" title = "Tag Select" data-url = "{{ trendTagUrl }}">
      </div>

Командование

$ php bin/console debug:router app_hq_article_trendtag
+--------------+--------------------------------------------------------------------+
| Property     | Value                                                              |
+--------------+--------------------------------------------------------------------+
| Route Name   | app_hq_article_trendtag                                   |
| Path         | /admin/hq/article/trendtag                                         |
| Path Regex   | #^/admin/hq/article/trendtag$#sD                                   |
| Host         | ANY                                                                |
| Host Regex   |                                                                    |
| Scheme       | http                                                               |
| Method       | ANY                                                                |
| Requirements | NO CUSTOM                                                          |
| Class        | Symfony\Component\Routing\Route                                    |
| Defaults     | _controller: AppBundle:Hq\Article:trendTag                  |
| Options      | compiler_class: Symfony\Component\Routing\RouteCompiler            |
| Callable     | AppBundle\Controller\Hq\ArticleController::trendTagAction |
+--------------+--------------------------------------------------------------------+
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы измените порядок функций, все будет нормально когда вы пытаетесь получить Route / hq / article / trendtag, он получит первую / hq / article, которая его найдет, поэтому вы можете изменить его, как в приведенном ниже коде файл читается сверху, когда он находит маршрут "/ article /" перед /article/trendtag, даже если вы хотите получить /article/trendtag, он учитывает только первую часть /article/, которая его нашла.

* @Route("/hq")
 */
class ArticleController extends BaseArticleController
{
    protected $indexRoute = "app_hq_article_index";

    protected function getInputTemplate($articleType)
    {
        return sprintf("@AppBundle/Hq/%s/input.html.twig", ucfirst($articleType));
    }
 /**
     * @Method("GET")
     * @Route("/article/trendtag")
     *
     * @Template("@AppBundle/Hq/Article/trendTag.html.twig")
     */
    public function trendTagAction(Request $request)
    {
        return parent::trendTagAction($request);
    }
    /**
     * @Method("GET")
     * @Route("/article/")
     *
     * @Template("@AppBundle/Hq/Article/index.html.twig")
     */
    public function indexAction(Request $request)
    {
        return parent::indexAction($request);
    }

Попробуйте добавить объяснение, почему вы думаете, что изменение порядка поможет в этом случае. Я подозреваю, что вы думаете, что изменение порядка сопоставления маршрутов поможет, но я не уверен. Может ты это тестировал?

Cerad 30.03.2021 17:11

Когда я попробовал, все заработало. Однако я также хочу знать причину, по которой это работает, поэтому, пожалуйста, дайте мне знать.

scottie320 31.03.2021 04:44

Я всегда рад помочь, файл читается сверху, когда он находит маршрут "/ article /" до "/ article / trendtag", даже если вы хотите получить / article / trendtag, он учитывает только " / article / "первая часть, которая его нашла.

malek 31.03.2021 05:27

Спасибо. Однако, когда он работал на Symfony 3.4, он работал еще до того, как был изменен порядок. Она стала 4.4, и единственное, что изменилось, - это изменить ссылку, указывающую ветку шаблона, с предыдущего формата на текущий формат. Это странно.

scottie320 31.03.2021 05:46

Неправильное объяснение порядка. / article / trend не будет соответствовать / article / независимо от порядка. Вы можете использовать bin / console router: match / article / trend для проверки. Порядок был бы проблемой, только если бы у вас было что-то вроде '/ article / {something}'. Вы можете попробовать опустить завершающую косую черту в '/ article /' и посмотреть, поможет ли это. Symfony внесла некоторые изменения в то, как он обрабатывает завершающие косые черты. Но даже такое изменение вряд ли поможет.

Cerad 01.04.2021 17:19

Другие вопросы по теме