Исключение Symfony2 было сгенерировано во время рендеринга шаблона («Параметр для маршрута должен совпадать» [^ /] ++ «для создания соответствующего URL-адреса.»)

1

Я продолжаю получать следующую ошибку при использовании обратной косой черты в имени объекта и хочу перейти через URL-адрес объекта:

Во время рендеринга шаблона было выбрано исключение ("Имя параметра" для маршрута "object_show" должно соответствовать "[^/] ++" ("черный/белый") для создания соответствующего URL-адреса. ") В /ObjectBundle/Ресурсы/мнение/Объект/index.html.twig

контроллер

/**
 * @Route("/show/{user}/{name}", name="object_show")
 * @Template()
 */
public function showAction($user, $name, Request $request)
{
    $user = $this->getDoctrine()->getRepository('UserBundle:User')
                 ->findBy(['username'=> $user]);
    $object = $this->getDoctrine()->getRepository('ObjectBundle:Object')
                   ->findOneBy(['name' => $name, 'user' => $user]);

    return array('object' => $object);
}

Как я могу разрешить использование обратной косой черты для имени объекта и иметь возможность генерировать соответствующий URL-адрес?

шаблон

      {% for object in objects %}
        <div class="item" id="object_{{ object.id }}">
            <a href="{{ path('object_show',
                     {'user': object.user.username, 'name' : object.name }) }}">
                <div class="title">{{ object.name }}</div>
            </a>
        </div>
  • 0
    Можем ли мы увидеть ваш шаблон?
  • 0
    @scoolnico уверен, я добавил код к своему вопросу
Показать ещё 2 комментария
Теги:

2 ответа

1
Лучший ответ

В определение маршрута вам нужно добавить , requirements={"name"=".+"}. Например:

/**
 * @Route("/show/{user}/{name}", name="object_show", requirements={"name"=".+"})
 * @Template()
 */
public function showAction($user, $name, Request $request)

См. Раздел руководства: руководство.

  • 0
    Ответ и инструкция очень полезны, спасибо
1

Маршруты сопоставляются с регулярными выражениями.

"[^/]++" - это шаблон по умолчанию, который должны соответствовать значениям переменных. Это будет соответствовать все, что не есть /. Вы получаете исключение, так как значение, которое вы передаете как name является black/white (поэтому оно содержит / которое не разрешено).

Если значение неверно - очистите его.

Если значение правильное и вам действительно нужно его сопоставить, вы можете изменить требования к параметру имени. Например:

/**
 * @Route(
 *     "/show/{user}/{name}",
 *     name="object_show",
 *     requirements={"name": ".+"}
 * )
 */

Он будет принимать любые символы, поэтому будьте осторожны, если это то, что вы действительно хотите. Вам нужно будет адаптировать требования к вашим потребностям.

Связанные документы маршрутизации можно найти здесь:

Ещё вопросы

Сообщество Overcoder
Наверх
Меню