Grails UrlMappings для телефонного номера - PullRequest
0 голосов
/ 19 сентября 2011

Я бы хотел установить его так, чтобы, когда пользователь посещает приложение с номером телефона в URL, Grails направляет пользователя в указанный профиль, например:

localhost:8080/Application/profile/07871216969 -> /user/show/User.findByUserTelephone(07871216969)

или предпочтительно

localhost:8080/Application/07871216969 -> /user/show/User.findByUserTelephone(07871216969)

Однако я не знаю, как ссылаться на номер телефона в URL при вызове закрытия findByUserTelephone;Я заметил что-то вроде:

/profile/$telephoneNumber однако я не совсем уверен, как это работает.

Кроме того, поскольку для действия / user / show требуется идентификатор в параметрах, я не уверен, что закрытие findUserByTelephone имеет какое-либо применение, так как возвращает пользователя как объект, и я, похоже, не могу получить getId() или .id объект для получения идентификатора.

РЕШЕНО / РЕШЕНИЕ:

Я решил эту проблему, создав еще одно действие в контроллере под названием profile, тогда это действие имело код, подобный следующему:

def profile = {
    if(User.findByUserTelephone(params.userTelephone)) {
        def userInstance = User.findByUserTelephone(params.userTelephone)

        if (!userInstance) {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), params.id])}"
            redirect(action: "list")
        }
        else {
            [userInstance: userInstance]
        }
    } else {
        render("Sorry, that user wasn't found in our database.")
    }
}

Затем я создал следующую запись UrlMapping:

`"/$userTelephone"(controller: "user", action: "profile")`

Таким образом, когда пользователь вводит номер телефона в систему (или любую строку после /), он направляет пользователяк действию пользователя / профиля, которое попытается найти пользователя по его номеру телефона.В случае успеха покажет подробности пользователей, в противном случае отобразится сообщение об ошибке.

1 Ответ

1 голос
/ 19 сентября 2011

Это, вероятно, избавит вас от головной боли, если вы используете URL-путь, который не совпадает с именем контроллера.Поэтому, если у вас есть что-то вроде:

"/p/$phoneNumber"(controller:profile, action:show)

, у вас не будет шаблонов URL, соответствующих нескольким записям URLMapping, которые могут немного запутать.Я бы предположил, что просто:

"/$phoneNumber"(controller:profile, action:show)

сработает, но я бы ожидал, что в конечном итоге Grails будет сбит с толку несколькими URL-приложениями, совпадающими с одним и тем же путем запроса, если вы не будете очень осторожны.

...