ZF2分段路由约束正则表达式

时间:2016-02-26 13:57:27

标签: php regex routing zend-framework2 uri

我正在开发一个ZF2应用程序,我需要这样的路由:

'storage-deliver' => array(
    'type' => 'Segment',
    'options' => array(
        'route' => '/storage/:uuid/:path',
        'constraints' => array(
            'uuid' => '[a-zA-Z0-9-]*',
            'path' => '[a-zA-Z0-9-_\./\+]*'
        ),
        'defaults' => array(
            'controller' => 'StorageController',
            'action' => 'deliver',
        )
    )
)

路线应该能够匹配uuid约束后面的任何路线。

示例:

/storage/0e529c8b-2403-40c1-a5bf-c6819e992079/some.file
/storage/0e529c8b-2403-40c1-a5bf-c6819e992079/an/undefined/depth/path/to/some.file

我知道uuid约束不正确,但这与我现在的问题无关。问题是定义的约束path。它应该能够匹配给定URL的其余部分。

到目前为止,给定的定义[a-zA-Z0-9-_\./\+]*起作用(至少对于我使用的示例),但我很确定有一种方法可以更好地完成这项工作(以及真正匹配的方式)所有有效的可能性!)。

在这里的其他地方我找到了以下路线示例:

/storage/:uuid/:path{-}

首先,一切看起来都不错,但path在所有情况下都不匹配。

欢迎任何帮助!

谢谢!

1 个答案:

答案 0 :(得分:1)

要匹配除换行符之外的任何字符,您始终可以依赖贪婪的点匹配模式:

.*

此模式可以匹配空字符串,因此,如果您不想这样,请用*量词替换+(这意味着*零次或多次出现)(意思是一个或多个出现)。