我知道如何使用Mason::Plugin::RouterSimple为页面组件指定路由,例如给定一个 url:
/archives/2015/07
我可以这样创建一个组件archives.mc
:
<%class>
route "{year:[0-9]{4}}/{month:[0-9]{2}}";
</%class>
Archives for the month of <% $.month %>/<% $.year %>
同样,我可以创建一个news.mc
组件来处理以下网址:
/news/2012/04
这很好(而且非常优雅!)但现在我想要的是能够处理如下网址:
/john/archives/2014/12
/john/news/2014/03
/peter/news/2015/09
/bill/archives/2012/06
等等。我知道我可以将路由规则写成:
<%class>
route "{user:[a-z]+}/archives/{year:[0-9]{4}}/{month:[0-9]{2}}", { action=> 'archives' };
route "{user:[a-z]+}/news/{year:[0-9]{4}}/{month:[0-9]{2}}", { action=> 'news' };
</%class>
但随后请求必须由两个不同的组件处理。如何将请求路由到不同的组件?archives.mc
并且news.mc
不会被 Mason 匹配,因为在组件名称之前有一个用户名。