Grails 1.2参考文書速読(12):URL Mappings
前編まではGrailsにおけるMVCの対応を知っていたが、それだけでは足りなかった.ユーザーが要求したURLを対応するControllerのアクションにマッピングする方法に触れていないからだ.これがURL Mappingsの役割です.
実は、URL Mappingsでは、Grailsはデフォルトの方法を提供しています.これに文句がなければ、この方面の心を使わなくてもいいです.しかし、自分で他のことをしたいなら、この方面の知識を理解しなければなりません.
GrailsのURL Mappingはgrails-app/conf/UrlMappings.groovyで行われ、その内容は以下の通りです.フルフォーマット:“/product”(controller:“product”,action:“list”) デフォルトAction:「/product」(controller:「product」) を使用使用閉パッケージ: URIを別のURIにマッピングし、他のフレームワークと統合する際に「/hello」(uri:「/hello.dispatch」) を使用することが多い.
マッピング構文では、$で始まる変数値がparamsに自動的に入力される変数も使用できます.これにより、対応するactionでparams.変数名でアクセスできます. params.id:"/product/$id"(...).「/product/1」のように、1はidの値であり、params.idでアクセスできます. 個以上の変数:「/$blog/$year/$month/$day/$id」.「/graemerocher/2007/01/10/my_funky_blog_entry」のように、blogの値はgraemerocher、yearの値は2007、monthの値は01の順に類推されます.
変数を使用すると、ControllerとActionの名前を動的に構築することもできます."/$controller/$action?/$id?"()は、paramsの変数名でControllerとActionの名前を取得します. 同様に、パケットを閉じることによって実現することもできる: URLマッピング構文ではオプションパラメータもサポートされており、ルールは簡単で、変数名の後に追加しますか?できます.前例の「$id?」のように.Javaと同様に、オプションパラメータは最後に存在する必要があります.たとえば、「/.../$変数名?/$変数名?/$変数名?」はだめですが、「/.../$変数名/$変数名?/$変数名?」は可能です.
定義変数もURL上で行う必要はありません.また、次のように閉パッケージで定義することもできます. root urlをgrails-app/views/index.gsp:「/」(view:「/index」) にマッピングあるControllerのView:“/help”(controller:“site”,view:“help”) にマッピング
Http応答コードについても、単調なアプリケーションサーバに関連するエラーページではなく、より友好的なエラー情報インタフェースを表示することができます.応答コードをController:“500”(controller:“errors”,action:“serverError”) にマッピングする応答コードをView:"500"(view:"/errors/serverError") にマッピングする
URLマッピングは、Restful Apiを定義する際に非常に有用なHttpをマッピングする方法もあります. "/images/*.jpg"(controllers:"image") "/images/$name.jpg"(controllers:"image")では、効果は同じで、変数名が使用されているのとは異なります. はまた、**を使用してマルチレベルディレクトリ:「/images/**.jpg」(controllers:「image」) をマッピングすることもできます.のより良い方法は、params.nameに一致するパスが格納される「/images/$name**.jpg」(controllers:「image」)です.
マッピングでは、どのURLがマッピングに参加しないかを指定することもできます.UrlMappings.groovyでexcludesで定義すればいいです. My Blog My Blog - October 2007 Posts
結果: My Blog My Blog - October 2007 Posts
URLの直接使用を回避し、リンクの定義と使用をより柔軟にします.
前の記事ではcontraintsのメリットを理解しています.URLマッピングでは、URLの有効性を検証するために同様に使用できます.有効:/graemerocher/2007/01/10 my_funky_ブログentry 無効:/graemerocher/2007/01/101/my_funky_ブログentry
マッピングの場合、名前を付けることもできます.これが名前マッピングの由来です.構文:name:{...}例は次のとおりです. List People Show Account
を使用することもできますが、上記の例では次のようになります. List People Show Account
実は、URL Mappingsでは、Grailsはデフォルトの方法を提供しています.これに文句がなければ、この方面の心を使わなくてもいいです.しかし、自分で他のことをしたいなら、この方面の知識を理解しなければなりません.
GrailsのURL Mappingはgrails-app/conf/UrlMappings.groovyで行われ、その内容は以下の通りです.
class UrlMappings {
static mappings = {
//
}
}
具体的なURLのマッピング構文の例は次のとおりです."/product" {
controller = "product"
action = "list"
}
マッピング構文では、$で始まる変数値がparamsに自動的に入力される変数も使用できます.これにより、対応するactionでparams.変数名でアクセスできます.
変数を使用すると、ControllerとActionの名前を動的に構築することもできます.
"/$controller" {
action = { params.goHere }
}
定義変数もURL上で行う必要はありません.また、次のように閉パッケージで定義することもできます.
//
"/holiday/win" {
id = "Marrakech"
year = 2007
}
//
"/holiday/win" {
id = { params.id }
isEligible = { session.user != null }
}
上記の例では、ControllerのActionにURLをマッピングする方法を示しています.Viewにもマッピングできます.Http応答コードについても、単調なアプリケーションサーバに関連するエラーページではなく、より友好的なエラー情報インタフェースを表示することができます.
URLマッピングは、Restful Apiを定義する際に非常に有用なHttpをマッピングする方法もあります.
static mappings = {
"/product/$id"(controller:"product"){
action = [GET:"show", PUT:"update",
DELETE:"delete", POST:"save"]
}
}
Grailsでは、マッピングでワイルドカードを使用することもサポートされています.マッピングでは、どのURLがマッピングに参加しないかを指定することもできます.UrlMappings.groovyでexcludesで定義すればいいです.
class UrlMappings = {
static excludes = ["/images/**", "/css/**"]
static mappings = {
...
}
}
GrailsのURLマッピングでは、リンクの自動書き換えもサポートされています.マッピングの場合:"/$blog/$year?/$month?/$day?/$id?(controller:"blog",action:"show")、以下のリンク:結果:
URLの直接使用を回避し、リンクの定義と使用をより柔軟にします.
前の記事ではcontraintsのメリットを理解しています.URLマッピングでは、URLの有効性を検証するために同様に使用できます.
"/$blog/$year?/$month?/$day?/$id?" {
controller = "blog"
action = "show"
constraints {
year(matches:/d{4}/)
month(matches:/d{2}/)
day(matches:/d{2}/)
}
}
結果:マッピングの場合、名前を付けることもできます.これが名前マッピングの由来です.構文:name
static mappings = {
name personList: "/showPeople" {
controller = 'person'
action = 'list'
}
name accountDetails: "/details/$acctNumber" {
controller = 'product'
action = 'accountDetails'
}
}
名前を参照するには、次の操作を行います.