После обновления с 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"> {{ 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 |
+--------------+--------------------------------------------------------------------+






Если вы измените порядок функций, все будет нормально
когда вы пытаетесь получить 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);
}
Когда я попробовал, все заработало. Однако я также хочу знать причину, по которой это работает, поэтому, пожалуйста, дайте мне знать.
Я всегда рад помочь, файл читается сверху, когда он находит маршрут "/ article /" до "/ article / trendtag", даже если вы хотите получить / article / trendtag, он учитывает только " / article / "первая часть, которая его нашла.
Спасибо. Однако, когда он работал на Symfony 3.4, он работал еще до того, как был изменен порядок. Она стала 4.4, и единственное, что изменилось, - это изменить ссылку, указывающую ветку шаблона, с предыдущего формата на текущий формат. Это странно.
Неправильное объяснение порядка. / article / trend не будет соответствовать / article / независимо от порядка. Вы можете использовать bin / console router: match / article / trend для проверки. Порядок был бы проблемой, только если бы у вас было что-то вроде '/ article / {something}'. Вы можете попробовать опустить завершающую косую черту в '/ article /' и посмотреть, поможет ли это. Symfony внесла некоторые изменения в то, как он обрабатывает завершающие косые черты. Но даже такое изменение вряд ли поможет.
Попробуйте добавить объяснение, почему вы думаете, что изменение порядка поможет в этом случае. Я подозреваю, что вы думаете, что изменение порядка сопоставления маршрутов поможет, но я не уверен. Может ты это тестировал?