1

我正在构建一个模块化的 Padrino 应用程序来安装多个应用程序。

我正在安装一个基础应用程序/

class BaseApp < Padrino::Application
  ...
end

然后我将其他应用程序安装到其他端点,例如/clients这些应用程序继承自基本应用程序:

class ClientsApp < BaseApp
  ...
end

这种继承允许我在类中定义我的所有设置、错误处理和任何包含的机架app.rb中间件BaseApp

到现在为止还挺好。但我也想在应用程序之间共享beforeafter路由。例如,在我的BaseApp控制器代码中,我想这样做:

BaseApp.controller do
  before do
    ...
  end
  after do
    ...
  end

  get :index do
    ...
  end
end

而不是在我的ClientsApp控制器代码中重复这些过滤器,如下所示:

ClientsApp.controller do
  before do
    ...
  end
  after do
    ...
  end

  get :index do
    ...
  end
end

无论如何我可以干掉这段代码并指定过滤器BaseApp并让它们以某种方式继承吗?我知道这些过滤器是方法调用而不是方法。

谢谢!

4

1 回答 1

4

您可以使用标准的 sinatra 扩展,放在 lib 下:

# lib/common_filters.rb
module CommonFilters
  def self.registered(app)
    app.before do
      ...
    end

    app.after do
      ...
    end
  end
end

然后在您的应用程序中:

# app/app.rb
class MyApp < Padrino::Application
  register CommonFilters
end
于 2012-02-03T14:07:44.087 回答