概述 快速入门 教程 手册 最佳实践 组件 参考 贡献

发布于 2015-08-27 16:43:52 | 145 次阅读 | 评论: 0 | 来源: 网络整理

Sometimes, you need to compose URLs with parameters that can contain a slash /. For example, take the classic /hello/{username} route. By default, /hello/Fabien will match this route but not /hello/Fabien/Kris. This is because Symfony uses this character as separator between route parts.

This guide covers how you can modify a route so that /hello/Fabien/Kris matches the /hello/{username} route, where {username} equals Fabien/Kris.

Configure the Route

By default, the Symfony Routing component requires that the parameters match the following regex path: [^/]+. This means that all characters are allowed except /.

You must explicitly allow / to be part of your parameter by specifying a more permissive regex path.

  • Annotations
    use SensioBundleFrameworkExtraBundleConfigurationRoute;
    
    class DemoController
    {
        /**
         * @Route("/hello/{name}", name="_hello", requirements={"name"=".+"})
         */
        public function helloAction($name)
        {
            // ...
        }
    }
    
  • YAML
    _hello:
        path:     /hello/{username}
        defaults: { _controller: AppBundle:Demo:hello }
        requirements:
            username: .+
    
  • XML
    <?xml version="1.0" encoding="UTF-8" ?>
    
    <routes xmlns="http://symfony.com/schema/routing"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
    
        <route id="_hello" path="/hello/{username}">
            <default key="_controller">AppBundle:Demo:hello</default>
            <requirement key="username">.+</requirement>
        </route>
    </routes>
    
  • PHP
    use SymfonyComponentRoutingRouteCollection;
    use SymfonyComponentRoutingRoute;
    
    $collection = new RouteCollection();
    $collection->add('_hello', new Route('/hello/{username}', array(
        '_controller' => 'AppBundle:Demo:hello',
    ), array(
        'username' => '.+',
    )));
    
    return $collection;
    

That’s it! Now, the {username} parameter can contain the / character.

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务