【问题标题】:Eliminate the controller and action in the URL消除 URL 中的控制器和操作
【发布时间】:2013-01-15 18:16:25
【问题描述】:

我有一些页面。一个是“我们是谁”页面(登录页面),有 3 个“注册”页面,每个页面询问不同的内容,还有一个“联系”页面,包含位置、电话、电子邮件等信息. 因此,当用户访问第二个注册页面时,URL 会显示“/controller/action”。我想消除 URL 中的控制器部分,如果操作在 URL 中命名为“reg3”,则它必须显示“registration3”,依此类推。

我已经阅读了它可以通过 URLMappings.groovy 文件实现,但我并不完全理解它是如何工作的。这是我的 URLMappings.groovy

static mappings = {
    "/$controller/$action?/$id?"{
        constraints {
            // apply constraints here
        }



            "/registro"
             {
                controller = "Registro"
                action = "registro_page"
             }
             "/registro2"
             {
                 controller = "Registro"
                 action = "reg2"
             }

             "/registro3"
             {
                 controller = "Registro"
                 action = "reg3"
             }
             "/contacto"
             {
                 controller = "Registro"
                 action = "contacto"
             }
             "/quienes_somos"
             {
                 controller = "Login"
                 action = "auth"
             }


    }
    "/registro" (controller:'Registro', action:'registro_page')
    "/registro2" (controller:'Registro', action:'reg2')
    "/registro3" (controller:'Registro', action:'reg3')
    "/contacto" (controller:'Registro', action:'contacto')
    "/quienes_somos" (controller:'Registro', action:'home')
    "/"(controller:'redirigir',action:"redirigir")
    "500"(view:'/error')

    "/login/$action"(controller: "login")
    "/logout/$action"(controller: "logout")
}

正如我所说,我不确定我是否知道自己在做什么......

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: grails


    【解决方案1】:

    你有许多逻辑错误,最明显的是

            "/registro"
             {
                controller = "Registro"
                action = "registro_page"
             }
    

    内部属于默认 "/$controller/$action?/$id?" 映射的块的块。你应该从完全删除那些开始,只剩下

    static mappings = {
        "/$controller/$action?/$id?"{
            constraints {
                // apply constraints here
            }
        }
        "/registro" (controller:'Registro', action:'registro_page')
        "/registro2" (controller:'Registro', action:'reg2')
        "/registro3" (controller:'Registro', action:'reg3')
        "/contacto" (controller:'Registro', action:'contacto')
        "/quienes_somos" (controller:'Registro', action:'home')
        "/"(controller:'redirigir',action:"redirigir")
        "500"(view:'/error')
    
        "/login/$action"(controller: "login")
        "/logout/$action"(controller: "logout")
    }
    

    现在应该可以了,至少可以帮助您入门。

    【讨论】:

    • 如果我理解得很好,现在在我的渲染中(视图:'xxx')我可以放置渲染(视图:'registro'),它应该调用'Registro/registro_page'?
    • @Fustigador 不,URL 映射不会影响render,您仍然必须使用真实的控制器和视图名称。 URL 映射的要点是,如果您执行<g:link controller="registro" action="reg3">,它将生成指向/app/registro3 的链接。可能让 Grails 感到困惑的一件事是,它希望 URL 映射中的控制器名称以小写字母开头 - 类 RegistroController 对应于 URL 映射中的 controller:"registro",我建议您更改映射以遵循此约定。
    【解决方案2】:

    根据documentation,您正在做的事情应该不会太远。

    上半部分对我来说似乎是错误的,单行映射

    "/registro" (controller:'Registro', action:'registro_page') 
    

    应该够了。

    然后您必须处理脚手架视图,它们不知道您的自定义 URL 映射并且仍然创建“旧”链接。您必须手动调整所有自动生成的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多