我一直在為一個學校專案開發一個在線學習網站。在課程內單擊屬于某個部分的課程時,我無法傳遞變數。這個想法是在課程頁面(formation.html.twig)上,有課程摘要,您可以單擊側邊欄選單中的課程。然后它應該顯示一個具有相同選單的頁面,并顯示課程內容以代替課程摘要 (lesson.html.twig)。
我已經更新了控制器,所以 url 變成了:formations/consulter-formationid-sectionid-lessonid
在視圖中,我寫了 {{ path('app_formations_lesson', {'formation':formation.id, 'section': section.id, 'id':lesson.id}) }}
它對 url 作業正常,當我點擊時顯示正確的值,但是頁面重繪 并且不會加載正確的樹枝視圖 (lesson.html.twig),它加載了我當前正在使用的相同視圖 (formation.html 。枝條)。
編隊控制器:
#[Route('/formations/consulter-{id}', name: 'app_formations_see')]
public function see($id): Response
{
$formation = $this->doctrine->getRepository(Formation::class)->findOneById($id);
$section = $this->doctrine->getRepository(Section::class)->findAll();
$lesson = $this->doctrine->getRepository(Lesson::class)->findAll();
return $this->render('formations/formation.html.twig', [
'formation' => $formation,
'sections' => $section,
'lessons' => $lesson
]);
}
#[Route('/formations/consulter-{formation}-{section}-{id}', name: 'app_formations_lesson')]
public function seeLesson($id): Response
{
$lesson = $this->doctrine->getRepository(Lesson::class)->findOneById($id);
return $this->render('formations/lesson.html.twig', [
'lesson' => $lesson
]);
}
形成.html.twig
{% extends 'base.html.twig' %}
{% block title %}{{ formation.title }}{% endblock %}
{% block content %}
<div class="formationcontainer text-center">
{% block sidebar %}
{% include "./formations/sidebar.html.twig" %}
{% endblock %}
<h1>{{ formation.title }} par {{ formation.user.firstname }} {{ formation.user.lastname }}</h1>
{{ formation.description }}
<hr>
<h2>Sommaire</h2>
<div class="tableau">
<table class="table">
{% for section in formation.sections %}
<thead class="table-success">
<tr>
<th scope="col">{{ section.name }}</th>
</tr>
</thead>
<tbody>
{% for lesson in section.lessons %}
<tr>
<td>{{ lesson.title }}</td>
</tr>
{% endfor %}
</tbody>
{% endfor %}
</table>
</div>
</div>
{% endblock %}
課程.html.twig
{% extends 'base.html.twig' %}
{% block title %}titre de la le?on{% endblock %}
{% block content %}
<div class="formationcontainer text-center">
{% block sidebar %}
{% include "./formations/sidebar.html.twig" %}
{% endblock %}
<h1>Nom de la le?on</h1>
<hr>
<h2>Vidéo</h2>
<h2>Contenu</h2>
</div>
{% endblock %}
側邊欄塊
<!-- Sidear for lesson pages -->
<nav class="flex-shrink-0flex-shrink-0 p-3 bg-white sidenav">
<button class="btn btn-success" id="sidenav-btn" type="button" data-bs-toggle="collapse" data-bs-target="#sidebarCollapse" aria-expanded="false" aria-controls="collapseOne">
Sommaire
</button>
<div class="list-unstyled ps-0 ul-custom navbar-collapse collapse show" id="sidebarCollapse" aria-expanded="true">
<li class="mb-1">
{% for section in formation.sections %}
<ul class="list-unstyled align-items-center rounded fw-normal">
<li>{{ section.name }}</li>
</ul>
<div>
{% for lesson in lessons %}
<ul class="list-unstyled fw-normal pb-1 small">
<li><a href="{{ path('app_formations_lesson', {'formation':formation.id, 'section': section.id, 'id':lesson.id}) }}" hljs-string">">{{ lesson.title }}</a></li>
</ul>
{% endfor %}
</div>
{% endfor %}
</li>
<li hljs-number">3"></li>
<li hljs-number">1">
<ul hljs-keyword">list-unstyled fw-normal pb-1 small">
<li><a href="{{path('app_formations')}}" hljs-string">">retour à la liste des formations</a></li>
</ul>
</li>
</div>
</nav>
這個問題從何而來?如何顯示正確的視圖?非常感謝!
編輯:我首先交換了控制器中的代碼以匹配 seeLesson 函式。
#[Route('/formations/consulter-{formation}-{section}-{id}', name: 'app_formations_lesson')]
public function seeLesson($id): Response
{
$formation = $this->doctrine->getRepository(Formation::class)->findOneById($id);
$section = $this->doctrine->getRepository(Section::class)->findAll();
$lesson = $this->doctrine->getRepository(Lesson::class)->findOneById($id);
return $this->render('formations/lesson.html.twig', [
'lesson' => $lesson,
'formation' => $formation,
'sections' => $section
]);
}
#[Route('/formations/consulter-{id}', name: 'app_formations_see')]
public function see($id): Response
{
$formation = $this->doctrine->getRepository(Formation::class)->findOneById($id);
$section = $this->doctrine->getRepository(Section::class)->findAll();
$lesson = $this->doctrine->getRepository(Lesson::class)->findAll();
return $this->render('formations/formation.html.twig', [
'formation' => $formation,
'sections' => $section,
'lessons' => $lesson
]);
}
uj5u.com熱心網友回復:
它呈現了錯誤的頁面,因為您的 URL 太相似了。
當試圖確定要執行什么方法時,Symfony 將請求的 URL 與控制器方法上方的路由定義從上到下匹配。
例如,如果您請求/formations/consulter-1-2-3,Symfony 首先嘗試將其與/formations/consulter-{id}. 如果您替換 ,這匹配1-2-3,{id}因此它執行該see方法。
要解決此問題,您有兩種選擇:
在控制器中切換 2 種方法的順序,以便在方法seeLesson上方定義see方法。Symfony 將首先嘗試匹配該seeLesson方法的路由。
或者保持方法順序不變,但是給方法{id}的路由中的引數添加一個約束see,指定匹配的{id}只能由數字組成:
#[Route('/formations/consulter-{id}', name: 'app_formations_see', requirements: ['id' => '\d '])]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/460453.html
