我正在研究 Rails 3 架构,以便了解分派请求的过程。整个过程非常简单。应用程序是一个机架应用程序,它最终将其调用消息委托给 ActionDispatch::Routing::RouteSet 的调用方法,该方法调度必要控制器的适当操作。它通过键“action_dispatch.request.path_parameters”从存储在rack env 中的哈希中获取控制器和操作名称。
所以问题是:谁设置这个哈希值?谁解析请求 uri 并确定操作和控制器名称?
我无法找到这段代码。我看到在路由配置期间 ActionDispatch::Routing::Mapper 对象用于构造有关已定义路由的信息并将其存储在 ActionDispatch::Routing::RouteSet 中。但是在请求期间如何使用此信息来查找适当的操作和控制器。机架也以某种方式参与其中吗?
“action_dispatch.request.path_parameters”存储为常量ActionDispatch::Routing::RouteSet::PARAMETERS_KEY
(actionpack/lib/action_dispatch/routing/route_set.rb)
PARAMETERS_KEY
稍后在同一个文件中使用并传递到构造函数中::Rack::Mount::RouteSet
即将::Rack::Mount::RouteSet
来源在这里:https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L22 https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L22您可以看到存储了属性名称。
相同的文件,在下面call(env
)方法当然是要调用的 Rack 接口,我们看到这一行(https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L147 https://github.com/josh/rack-mount/blob/master/lib/rack/mount/route_set.rb#L147)你的env["action_dispatch.request.path_parameters"]
属性实际上已设置,并最终返回到您正在研究的代码中。
希望这可以帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)