- 浏览: 153247 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
mysky1984:
:cry::arrow::idea:
Filter chain skipping --- 跳过过滤器链 -
shaka:
受用,考虑过这个问题没有?如何给过滤器传参数,或者在子类过滤器 ...
Filter chain skipping --- 跳过过滤器链 -
xlth2006@sina.com:
[img][/img][flash=200,200][/fla ...
rails2.0被废弃的用法
到现在为上,本书中我们已经不在烦恼,Rails 是如何映射一个请求如
store/add_to_cart/123 给一个特定的“控制器”和“动作”了。现在我们向深处看看。
rails 命令为一个应用程序生成最初的文件集。这些文件中的一个是config/routes.rb。
它为应用程序包含了“路由器”信息。如果你查看此文件的缺省内容,忽略注释的话,你会
看到下面这样。
ActionController::Routing::Routes.draw do |map|
map.connect ':controller/service.wsdl', :action => 'wsdl'
map.connect ':controller/:action/:id'
end
“路由器”组件绘制了一个映射,它可让Rails 将外部的URL 连接到应用程序内部。每
个map.connect 声明都指出一个外部URL 的连接和内部程序的代码。让我们看看第二个
map.connect 行。字符串’:controller/:action/:id’的行为像个模式,匹配URL 请求的路
径部分。在这个例子中,模式将匹配任何路径内包含这三个组件的URL。(实际上不是这样的,
但我们可以节省此解释的时间。)第一个组件被赋值给参数:controller,第二个组件给参
数:action,第三个给:id。将store/add_to_cart/123 URL 交给这个模式,你最终将得到些
参数。
@params = { :controller => 'store', :action => 'add_to_cart', :id =>
123 }
基于这些,Rails 将调用store controller 内的add_to_cart()方法。:id 参数将有123
这个值。
被map.connect 接受模式即简单又强大。
1、组件由反斜线字符分隔。模式内的每个组件匹配一个或多个URL 内的组成部分。在模
式内的组件按次序匹配URL。
2、一个模式有:name 这样的格式,用来设置参数的名字为URL 内相应位置的任何值。
3、模式也可以有*name 这样的格式,它接受引入的URL 的所有余下部分。有这种类型名
字的参数将引用一个包含它们的值的数组。因为它吞掉了URL 的所有余下部分,*name 必须
出现在模式的尾部。(译注:即是最后一个。)
4、一个模式内的任何部分都明确地匹配URL 内相应的位置。例如,一个包含
store/:controller/buy/:id 的模式将映射URL 路径内内前面的文本和第三个部分的文本。
map.connect 接受下面额外的参数:
1、:defaults => { :name => "value", ...} 为模式内指定名字的参数设置缺省值。模
式内尾部组件的缺省值会在引入的URL 中被省略,并且它们的缺省值会在设置参数时被使用。
带有缺省值nil 的参数若没有出现在URL 中,则它们会被添加到参数哈希表中。如果没有指
定缺省值,则route 将自动地使用缺省值。
defaults => { :action => "index", :id => nil }
2、:requirements => { :name =>/regexp/, ...} 指定给定的组件,如果组件在URL 中
出现的话,必须匹配指定的正则表达式,以便于映射整个匹配。换句话说,如果任何组件都
不匹配,这个映射将不会被使用。
3、:name => value 设置缺省值给组件:name。不像使用:defaults 设置的值,此名字不
需出现在模式本身内。这允许你添加任意的参数值给引入的请求。典型地这个值将是一个字
符串或者nil。
4、:name => /regexp/ 等价于使用:requirements 在:name 的值上设置约束。
还有一个规则:“路由器”会试着依次按routes.rb 内的每个规则来匹配一个引入的URL。
第一个成功的匹配会被使用。如果没有匹配成的话,引发一个错误。
让我们看此例子。Rails 缺省的route 定义包括下面规范。
ActionController::Routing::Routes.draw do |map|
map.connect ":controller/:action/:id"
end
下面列表显示一些请求路径和由这个“路由器”定义抽取的参数。记住那个“路由器”
设置index 的一个缺省“动作”,除非覆写它。
URL> store
@params = {:controller=>"store", :action=>"index"}
URL> store/list
@params = {:controller=>"store", :action=>"list"}
URL> store/display/123
@params = {:controller=>"store", :action=>"display", :id=>"123"}
现在让我们看个更复杂的例子。在你的博客应用程序中,你的所有URL 以单词blog 开头。
如果没有额外参数给出,则显示索引页。如果URL 如blog/show/nnn,你将显示nnn 文章。
如果URL 包含一个日期(它可能是年,年/月,或年/月/日),你将显示那个日期的文章。否则编辑文章或者是管理博客。最后,如果你接受到个未知的URL 模式,你将用于特定的“动作”来处理它。
下面“路由器”包含了每个单独的情况。
ActionController::Routing::Routes.draw do |map|
# Straight 'http://my.app/blog/' displays the index
map.connect "blog/",:controller => "blog",:action => "index"
# Return articles for a year, year/month, or year/month/day
map.connect "blog/:year/:month/:day",:controller => "blog",
:action => "show_date",
:requirements => { :year => /(19|20)dd/,:month => /[01]?d/,
:day => /[0-3]?d/},
:day => nil,
:month => nil
# Show an article identified by an id
map.connect "blog/show/:id",
:controller => "blog",
:action => "show",
:id => /d+/
# Regular Rails routing for admin stuff
map.connect "blog/:controller/:action/:id"
# Catch-all so we can gracefully handle badly-formed requests
map.connect "*anything",:controller => "blog",:action => "unknown_request"
end
还有几个事情要注意一下。首先,我们并没有强制日期匹配规则中年,月,日的值。除
了这一点,规则还匹配正规URL,controller/action/id。其次,还要注意我们是如何在列表的尾部使用万能规则(“*anything”)的。因为这个规则匹配所有请求,把它放到前边的话,后面规则就不会起作用。
我们可以看看这些规则是如何处理一些URL 请求的。
URL> blog
@params = {:controller=>"blog", :action=>"index"}
URL> blog/show/123
@params = {:controller=>"blog", :action=>"show", :id=>"123"}
URL> blog/2004
@params = {:controller=>"blog", :action=>"show_date", :year=>"2004"}
URL> blog/2004/12
@params = {:controller=>"blog", :action=>"show_date", :month=>"12",
:year=>"2004"}
URL> blog/2004/12/25
@params = {:controller=>"blog", :action=>"show_date", :day=>"25",
:month=>"12", :year=>"2004"}
URL> blog/article/edit/123
@params = {:controller=>"article", :action=>"edit", :id=>"123"}
URL> blog/article/show_stats
@params = {:controller=>"article", :action=>"show_stats"}
URL> blog/wibble
@params = {:controller=>"wibble", :action=>"index"}
URL> junk
@params = {:anything=>["junk"], :controller=>"blog",
:action=>"unknown_request"}
发表评论
-
Magic Column Names(自动的列名)
2008-08-10 16:09 2841在课程的最后两章我们会提到很多列名字,它们对“活动记录”有重大 ... -
Callback Objects
2008-08-10 16:04 2913可在“模型”类内直接 ... -
Timestamping Records
2008-08-10 15:57 2779before_create 和before_update 回调 ... -
Callbacks
2008-08-10 15:46 2831“活动记录”控制“模 ... -
“聚合”(Aggregation)
2008-08-07 00:20 4250数据库列有个带限制的类型集: integers, string ... -
acts as list/acts as tree
2008-08-07 00:03 3959Acts As List 在子表中使 ... -
基于时间缓存
2008-08-06 00:18 2778def index when_fragment_expir ... -
Sweeper实例
2008-08-03 22:16 3139expir_xxx 方法会工作的很好,但是在你的“控制器”中它 ... -
Caching(缓存)“缓存”什么
2008-08-02 17:24 3303相关文献(http://www.ibm.com/develop ... -
verify(验证)
2008-08-01 14:18 2984before“过滤器”的通常 ... -
“过滤器”(before,after,around)
2008-08-01 14:18 4009“过滤器”可以让你在你的“控制器”内写代码来包装由“动作”完成 ... -
Flash—“动作”间的通信
2008-08-01 13:37 2955Flash—“动作”间的通信 当我们使用redirect_to ... -
“会话”存储比较和失效与清理
2008-07-31 22:58 3159比较“会话”存储选项 ... -
“会话”存储
2008-07-31 22:56 2962在存储你的“会话”数据时,Rails 有很多选项。每个选项即好 ... -
“会话”session
2008-07-31 22:54 3587Rails 的“会话”是个类 ... -
cookies
2008-07-31 22:40 3265Cookie 允许web 应用程序 ... -
对用户应答(1,2,3)
2008-07-30 00:36 1083“控制器”的一部分工作是响应用户。有三个基本方式来完成个工作: ... -
应答3-重定向(redirect_to)
2008-07-30 00:34 2745一个HTTP redirect 被从服 ... -
应答2-发送文件和其它数据(send_data)
2008-07-30 00:25 1918我们已经看了在“控制器”内提交模板(render)和发送字符串 ... -
应答1-提交模板(render)方法
2008-07-29 23:52 2138模板是个文件,它定义 ...
相关推荐
connect : function(url, topic, callback, userid) { this.url = url; this.topic = topic; var socket = new SockJS(url); WEB_SOCKET.stompClient = Stomp.over(socket); WEB_SOCKET.stompClient.connect({...
2. 创建服务端接口:定义GET和POST的URL,通常是.NET Web API或ASP.NET MVC的服务端路由。 3. 处理权限:在AndroidManifest.xml中声明INTERNET权限, `<uses-permission android:name="android.permission.INTERNET...
- HEAD、OPTIONS、CONNECT、TRACE等其他方法。 三、MyBatis 1. SQL定位: - MyBatis通过namespace+id定位SQL语句。 2. #{}与${}: - #{}:预编译处理,防止SQL注入,安全。 - ${}:字符串替换,可能导致SQL...
3. **React Router**: React Router是React应用的路由库,它允许我们在应用中实现URL导航而无需刷新页面。通过定义不同的路由,我们可以根据URL路径显示不同的组件,从而实现SPA(单页应用)的导航功能。 4. **...
CanJS 的路由系统允许你在URL变化时动态更新页面内容,实现单页应用(SPA)的功能。`can.route`模块负责处理路由规则和参数。在`demo`中,你可能会看到如何配置和监听路由: ```javascript can.route(':page'); can...
2. **Session管理**: Passport通常与connect-mongo、express-session等中间件配合,实现会话管理,保持用户登录状态。 3. **中间件接口**: Passport提供了一套简单的中间件接口,如`passport.authenticate()`,可以...
这里的`Map`方法用于定义WebSocket的路由,`UseWebSockets()`中间件用来启用WebSocket支持,然后通过`Use`方法注册一个处理程序来处理WebSocket连接请求。 接下来,我们需要创建一个处理WebSocket连接的类,例如`...
现在,服务消费者可以通过Feign客户端调用服务提供者的`/hello`接口,而服务提供者会通过Eureka将请求路由到正确的实例。 总结来说,整合Spring Boot和Spring Cloud Eureka的关键在于理解Eureka的角色和工作原理,...
12. 路由和控制器:在PHP框架中,路由负责将URL映射到相应的处理函数或控制器,比如Laravel的`Route::get()`。 13. 国际化和本地化:通过`gettext`或PHP的`i18n`扩展,实现多语言支持。 14. 安全性:包括防止SQL...
路由通常包括定义在`BrowserRouter`或`HashRouter`下的`Route`组件,每个`Route`对应一个URL路径和对应的组件。 状态管理和数据流是React应用中的关键概念。对于复杂应用,React本身提供的状态管理可能不足以应对,...