Reputation: 1307
I am passing in some variables into a controller method. However the last one is not being recognized, even though dumping the variable on the twig side confirms the variable is not null.
Controller code
/**
* @Route(name = "course_space_view", path="/courseSpace/{courseSpaceId}/about", methods={"GET", "POST"})
*
* @ParamConverter("courseSpace", class="AppBundle\Entity\CourseSpace")
* @ParamConverter("listSettings", class="AppBundle\View\ListEnrollment\ListSettings", options={"activeTab" = ListSettings::ABOUT_TAB})
*
* @param ListSettings $listSettings
* @param CourseSpace $courseSpace
* @param bool $provisionalTerm
*
* @return Response
*/
public function viewCourseSpace(ListSettings $listSettings, CourseSpace $courseSpace, bool $provisionalTerm)
{
$this->denyAccessUnlessGranted(CourseSpaceVoter::READ, $courseSpace);
return $this->render('/LandingPage/CourseSpaces/aboutCourseSpace.html.twig',
[
'courseSpace' => $courseSpace,
'listSettings' => $listSettings
]
);
}
Twig template that passes in the variables
<a class="btn btn-sm btn-light"
href="{{ path('course_space_view', {'courseSpaceId': tile.courseSpaceId, 'provisionalTerm': tile.term.provisionable}) }}">
<span class="fas fa-cog mr-1"></span>
Manage course space
</a>
Upvotes: 1
Views: 364
Reputation: 821
If you don't define provisionalTerm in your route path like:
path="/courseSpace/{courseSpaceId}/about/{provisionalTerm}"
Symfony will add your parameter (and any other not defined in the route path) at the end of url like this:
/courseSpace/116168444546/about?provisionalTerm=1
Then you can get them from the Request.
/**
* @Route(name = "course_space_view", path="/courseSpace/{courseSpaceId}/about", methods={"GET", "POST"})
*
* @ParamConverter("courseSpace", class="AppBundle\Entity\CourseSpace")
* @ParamConverter("listSettings", class="AppBundle\View\ListEnrollment\ListSettings", options={"activeTab" = ListSettings::ABOUT_TAB})
*
* @param ListSettings $listSettings
* @param CourseSpace $courseSpace
* @param bool $provisionalTerm
*
* @return Response
*/
public function viewCourseSpace(Request $request, ListSettings $listSettings, CourseSpace $courseSpace)
{
$this->denyAccessUnlessGranted(CourseSpaceVoter::READ, $courseSpace);
$provisionnalTerm = $request->query->get('provisionalTerm');
return $this->render('/LandingPage/CourseSpaces/aboutCourseSpace.html.twig',
[
'courseSpace' => $courseSpace,
'listSettings' => $listSettings
]
);
}
Upvotes: 2