Тщеславные URL-адреса с Playframework

Я хочу создать Vanity_URL для веб-приложения, созданного поверх Playframework.

Я попытался добавить параметр для метода index на главной странице Application, это будет работать, если я вызову http://localhost:9000/?vanity_url, а не http://localhost:9000/vanity_url.

Как мне этого добиться? Я бы хотел, чтобы пользователи создавали свои собственные URL-адреса, поскольку решение должно быть динамическим, как в Facebook.


person n002213f    schedule 13.02.2011    source источник


Ответы (1)


В маршруте вы бы поместили

GET /{<[a-z]+>fanPage}/? Page.showFanPage

С этим вы можете получить:

http://localhost:9000/facebook

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

В таблицах:

Название: фан-страница

pageID integer или bigint
title varchar
slug varchar unique
owner integer
content text

В коде:

public static void showFanPage(String fanPage) {
    // use models to look for the slug
    // grab the data
    // do what you need to do
}

Я приведу здесь примеры того, как создавать URL-адреса, поскольку я не знаю, какое приложение вы создаете:
GET /post/slug/? Page.createPage
POST /post/slug/? Page.processPage

public static void createPage() {
         // remember to create the template
         render();
}

public static void processPage(String slugName) {
        // slugName refers to the input field
        // check if the slug exists and throw error if it does
        // process
}

(обратите внимание, это всего лишь пример, я не знаю, какое приложение вы создаете) Надеюсь, это поможет, дайте мне знать, если вы это имели в виду.

person allenskd    schedule 13.02.2011
comment
Я хотел бы, чтобы пользователи создавали собственные URL-адреса, чтобы указать их профиль, например. http://www.example.com/allenskd. allenskd будет уникальным для каждого пользователя и будет использоваться для получения его профиля пользователя. Из документов sluggify не будет работать, поскольку он чисто для SEO Решение с регулярным выражением работает, но теперь нужно проверять URL-адреса, такие как URL-адреса контроллера, такие как /admin/ - person n002213f; 14.02.2011
comment
Это распространенная проблема в фреймворке с тех пор, как Play! найдет мгновенное совпадение и загрузит маршрут, не учитывая других претендентов, обычно я избегаю этой проблемы, просто организуя маршруты по приоритету (сначала маршруты администратора и т. д.), это недостаток, который я заметил, используя Play!, я не знаю, будут ли они когда-нибудь исправьте это также в отношении того, как маршрутизатор управляет маршрутами, и да, все четкие URL-адреса (красивые URL-адреса, как бы вы их ни называли) предназначены исключительно для SEO, это работает, если пользователь хочет проявить творческий подход (но это зависит от вашего приложения) - person allenskd; 14.02.2011
comment
в файле routes, This file defines all application routes (Higher priority routes first) размещение маршрута внизу решает проблему, указанную в комментарии выше. - person n002213f; 14.02.2011