Я продолжаю получать следующую ошибку при использовании обратной косой черты в имени объекта и хочу перейти через 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>
В определение маршрута вам нужно добавить , requirements={"name"=".+"}
. Например:
/**
* @Route("/show/{user}/{name}", name="object_show", requirements={"name"=".+"})
* @Template()
*/
public function showAction($user, $name, Request $request)
См. Раздел руководства: руководство.
Маршруты сопоставляются с регулярными выражениями.
"[^/]++"
- это шаблон по умолчанию, который должны соответствовать значениям переменных. Это будет соответствовать все, что не есть /
. Вы получаете исключение, так как значение, которое вы передаете как name
является black/white
(поэтому оно содержит /
которое не разрешено).
Если значение неверно - очистите его.
Если значение правильное и вам действительно нужно его сопоставить, вы можете изменить требования к параметру имени. Например:
/**
* @Route(
* "/show/{user}/{name}",
* name="object_show",
* requirements={"name": ".+"}
* )
*/
Он будет принимать любые символы, поэтому будьте осторожны, если это то, что вы действительно хотите. Вам нужно будет адаптировать требования к вашим потребностям.
Связанные документы маршрутизации можно найти здесь: