1

在示例url mapping中,它保留了正则表达式 url 模式的映射及其对应的操作dispatcher().assign()。但工作是mapper().assign()什么?即使我评论它也有效。

在文档中它说

我们为此部分创建一个名为“数字”的名称,并提供 URL 格式化模式 /number/{1} - 与正则表达式相反,其中 {1} 是第一个参数的占位符,用于格式化适当的 URL。

但是为什么要为零件命名,为什么有必要呢?

hello(cppcms::service &srv): cppcms::application(srv){
    dispatcher().assign("/number/(\\d+)",&hello::number,this,1);
    mapper().assign("number","/number/{1}");

    dispatcher().assign("/smile",&hello::smile,this);
    mapper().assign("smile","/smile");

    dispatcher().assign("",&hello::welcome,this);
    mapper().assign("");

    mapper().root("/hello");
}   
4

1 回答 1

1

调度是将 URL 映射到您的 (C++) 应用程序方法的行为。

“映射”是它的反面。映射器对象将方法转换为 Urls。所以这意味着:您定义必须如何构造某个方法的 Url。

这样做的好处:

dispatcher().assign("/number/(\\d+)",&hello::number,this,1);
mapper().assign("number","/number/{1}");

您现在可以在模板代码中编写类似这样的内容

<a href='<% url "number" using some_varibale %>'>Link</a>

“那么优势在哪里?” 你可能会问。

url 的构造信息在代码中的一个位置定义(DRY)。如果由于任何原因签名稍后会更改,您只需更改那一行代码。(而不是搜索整个项目)

于 2015-05-19T14:49:16.740 回答