Symfony路由选择分页(/ test / [1])与slug(/ test / abc)

时间:2017-05-05 14:04:24

标签: php symfony routing routes

我有一个控制器有两个动作和类似的网址模式,但我无法让它工作。以下只是一个小例子。我想做的是带有(可选)分页的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和字符串的路由不起作用。我怎样才能做到这一点?

4 个答案:

答案 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);
    }
}