d1596
d1596

Reputation: 1307

Symfony controller method not recognizing passed in variable

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

Answers (1)

Yoann MIR
Yoann MIR

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

Related Questions