IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Mojolicious 应用的自定义子命令

    陈子 (rao.chenlin@gmail.com)发表于 2014-10-01 00:00:00
    love 0

    Mojolicious 框架开发应用的时候,可以跟 RoR 一样通过一系列子命令简化很多复杂操作。最简单的来说,就是快速生成整个 web 项目目录:mojo generate youapp。更多子命令见:http://cpan.php-oa.com/perldoc/Mojolicious/Commands

    其实我们还可以自己扩展这个子命令方式,实现自己的子命令。如果打算继续使用 mojo subcommand 的方式,那就把自己的子命令模块叫做 Mojolicious::Command::yourcommand,而如果打算在自己的名字空间下使用,比如叫 MyApp::Command::mycommand,那么需要在 MyApp.pm 里加一行代码,设置一下名字空间:

        sub startup {
            my $self = shift;
            push @{$self->commands->namespaces}, 'MyApp::Command';
            ...
        };
    

    然后就可以写自己的 MyApp::Command::mycommand 了:

    package MyApp::Command::mycommand;
    use strict;
    use warnings;
    use Mojo::Base 'Mojolicious::Command';
    use Mojo::UserAgent;
    
    has usage       => "usage: $0 migratint [username] [dashboards...]\n";
    has description => "kibana-int index migration for auth users\n";
    has ua          => sub { Mojo::UserAgent->new };
    
    sub run {
        my ( $self, $user) = @_;
        my $config = $self->app->config;
        my $ua = $self->ua;
        ...
    }
    
    1;
    

    大致就是这样:

    继承 Mojolicious::Command 类。这样就会有 usage 和 description 两个属性和 run 方法。

    • usage 属性用来在你执行 script/myapp help mycommand 的时候输出信息;
    • description 属性用来在你执行 script/myapp help 罗列全部可用子命令的时候描述该命令的作用;
    • run 方法是命令的入口函数。命令行后面的参数都会传递给 run 方法。如果你的子命令需要复杂处理,这里依然可以用 GetOpt::Long 模块中的 GetOptionsFromArray 函数处理。


沪ICP备19023445号-2号
友情链接