perl - 如何引入正则表达式操作以匹配 Catalyst URI 中的第一个元素?

标签 perl catalyst

背景:

我在 Catalyst 中使用了一个 CRUD 框架,它为给定数据库中的所有表自动生成表单和列表。例如:
/admin/list/person 或/admin/add/person 或/admin/edit/person/3 都根据表 'person' 动态生成页面或表单。 (换句话说,Admin.pm 具有编辑、列出、添加、删除等操作,这些操作需要表参数,也可能是行标识参数。)

问题:

在我正在构建的特定应用程序中,数据库将被多个客户使用,因此我想引入一个 URI 方案,其中第一个元素是客户的标识符,然后是管理操作/表等:

  • /cust1/admin/list/person
  • /cust2/admin/add/person
  • /cust2/admin/edit/person/3

  • 这是出于“品牌化”的目的,也是为了确保从一个用户传递给另一个用户的书签或 URL 达到预期的效果。

    但是我在让它工作时遇到了很多麻烦。我不想修改现有框架中的 subs,所以我一直在尝试以下变化:
    sub customer : Regex('^(\w+)/(admin)$') {
        my ($self, $c, @args) = @_;
        #validation of captured arg snipped..
        my $path = join('/', 'admin', @args);
        $c->request->path($path);
        $c->dispatcher->prepare_action($c);
        $c->forward($c->action, $c->req->args);
    }
    

    但它只是不会表现。我已经多次使用正则表达式匹配操作,但将一个放在 URI 的第一个“桶”中似乎异常痛苦。任何建议都非常感谢。

    最佳答案

    使客户操作 :Chained 然后将管理操作链接到该操作。例如:

    sub customer :Chained('/') :PathPart('') :CaptureArgs(1) {
        # load current customer into the stash
    }
    
    sub admin :Chained('customer') :PathPart('admin') :Args(0) {
    }
    

    有关更多信息,请参阅 Catalyst::DispatchType::Chained

    关于perl - 如何引入正则表达式操作以匹配 Catalyst URI 中的第一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6475487/

    相关文章:

    perl - Catalyst MVC 下的异常推送行为

    mysql - 在催化剂中将多个项目添加到模型中

    perl - 为什么 Test::WWW::Mechanize::PSGI 使用端口?

    linux - 这个 grep 命令有什么问题?

    linux - 移动文件的脚本在 Perl 中不起作用

    regex - perl 正则表达式不匹配带有换行符的字符串\n

    perl - Perl 中的多语言文本排序,在 Windows 上,使用区域设置

    linux - INET6 不适用于 [::1]

    Perl 催化剂 : How to re-use applications

    python - 如何运行 Catalyst/Paraview 代码示例?