在Sinatra中,您可以使用以下几行来获取请求的完整路径:
get '/hello-world' do
request.path_info # => '/hello-world'
request.fullpath # => '/hello-world?foo=bar'
request.url # => 'http://example.com/hello-world?foo=bar'
end
我在应用程序中使用了几个类。在这一特定类中,我喜欢将request.path_info
与字符串进行比较。
class foo
def build_menu
if request.path_info == "/hello-world"
highlight_menu_entry
end
end
end
但是request
-Object在此类上下文中未知,并且会引发错误。尽管在Ruby / Sinatra中有一些功能,但我还是像PHP $_POST
或$_GET
中的SUPER-GLOBAL。
那么如何在类上下文中检查request.path
?
答案 0 :(得分:1)
您可以将值传递给您的班级:
class Foo
attr_accessor :request_path_info, :request_fullpath, :request_url
def build_menu
highlight_menu_entry if request_path_info == '/hello-world'
end
end
foo = Foo.new
get '/hello-world' do
foo.request_path_info = request.path_info
foo.request_fullpath = request.fullpath
foo.request_url = request.url
end
foo.build_menu
答案 1 :(得分:0)
我自己找到了答案。我使用自定义的全局变量$PATHNAME
,可以在任何上下文中使用。结合主应用程序中的before do
预处理器,我可以填充use变量。
before do
$PATHNAME=request.path_info
end
class Foo
def build_menu
highlight_menu_entry if $PATHNAME == '/hello-world'
end
end