我有一个控制器有两个动作和类似的网址模式,但我无法让它工作。以下只是一个小例子。我想做的是带有(可选)分页的listAction(/ test / [1])和带有字母数字ID(/ test / abc)的showAction。
class MyController extends Controller
{
/**
* @Route("/test/{var}", requirements={"var" = "\d+"}, defaults={"var"=1}, name="app_testint")
* @return Response
*/
public function testIntAction($var)
{
return new Response(__METHOD__ . ' var=' . $var);
}
/**
* @Route("/test/{var}", requirements={"var" = "\s+"}, name="app_teststr")
* @return Response
*/
public function testStrAction($var)
{
return new Response(__METHOD__ . ' var=' . $var);
}
}
使用我的配置,我只能使用数值调用URL。带有out和字符串的路由不起作用。我怎样才能做到这一点?
答案 0 :(得分:1)
尝试在需求和默认选项中使用:
代替=
符号:
/**
* @Route("/test/{var}", requirements={"var": "\d+"}, defaults={"var": 1}, name="app_testint")
* @return Response
*/
/**
* @Route("/test/{var}", requirements={"var": "\s+"}, name="app_teststr")
* @return Response
*/
答案 1 :(得分:1)
/**
* @Route("/test/{var}", requirements={"var" = "\d+"}, defaults={"var"=1}, name="app_testint")
* @return Response
*/
public function testIntAction($var)
{
return new Response(__METHOD__ . ' var=' . $var);
}
/**
* @Route("/test/{var}", requirements={"var" = "[A-Za-z]+"}, name="app_teststr")
* @return Response
*/
public function testStrAction($var)
{
return new Response(__METHOD__ . ' var=' . $var);
}
由于某种原因无法凭借缩进获胜。但我用A-Za-z取代了你的ajax,它对我有用。
答案 2 :(得分:1)
第二条路线的注册表无效,\w+
与字符串匹配。否则你试图匹配空格。
/**
* @Route("/test/{var}", requirements={"var" = "\w+"}, name="app_teststr")
* @return Response
*/
public function testStrAction($var) {
return new Response(__METHOD__ . ' var=' . $var);
}
答案 3 :(得分:1)
现在我找到了一个适合我的解决方案。好吧,也许这是一种解决方法......
class MyController extends Controller
{
/**
* @Route("/test/", defaults={"var":1})
* @Route("/test/{var}", requirements={"var":"\d+"}, defaults={"var":null}, name="app_testint")
* @return Response
*/
public function testIntAction($var)
{
return new Response(__METHOD__ . ' var=' . $var);
}
/**
* @Route("/test/{var}", name="app_teststr")
* @return Response
*/
public function testStrAction($var)
{
return new Response(__METHOD__ . ' var=' . $var);
}
}