Получение путей импорта маршрута модуля в Play - PullRequest
1 голос
/ 22 марта 2011

Если в моем файле маршрутов есть типичная запись для импорта маршрутов из модуля

*       /admin                  module:crud

могу ли я определить, что базовый путь для модуля crud равен /admin, кроме как самому анализировать файл основных маршрутов? Похоже, что класс Router не хранит эту информацию.

Конечная цель - создать меню для каждого модуля. Если у меня есть модуль управления пользователями, импортированный в /useradmin, я хочу создать меню, содержащее /useradmin/users и /useradmin/groups, но не более глубокие потомки, такие как /useradmin/users/new. Если /useradmin перенаправлен на что-то, я буду использовать его в качестве ссылки для метки меню, в противном случае я просто покажу текстовую метку.

Хотя я мог бы подделать его, не зная, похоже, что знание фактического базового URL-адреса для модуля было бы лучшим способом убедиться, что я могу обрабатывать различные особые случаи, такие как модули, импортированные в /modules/useradmin, или модули этого внука. пути, но не дочерние пути (/useradmin/users/new, но не /useradmin/users).

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

вопрос: зачем вам анализировать файл или знать, что / admin - это база?Игра позволяет вам использовать обратную маршрутизацию , чтобы получить путь.

По ссылке выше:

Например, с этим определением маршрута:

GET    /clients/{id}      Clients.show

Из вашего кода вы можете сгенерироватьURL, способный вызвать Clients.show:

map.put("id", 1541);
String url = Router.reverse("Clients.show", map).url;  // GET /clients/1541

Этого должно быть достаточно.

1 голос
/ 23 марта 2011

Только сейчас я не вижу ничего, кроме разбора маршрута самостоятельно.Посмотрите на класс play.mvc.Router IMO и следующую функцию:

static void parse(VirtualFile routeFile, String prefix) {
    String fileAbsolutePath = routeFile.getRealFile().getAbsolutePath();
    int lineNumber = 0;
    String content = routeFile.contentAsString();
    if (content.indexOf("${") > -1 || content.indexOf("#{") > -1 || content.indexOf("%{") > -1) {
        // Mutable map needs to be passed in.
        content = TemplateLoader.load(routeFile).render(new HashMap<String, Object>(16));
    }
    for (String line : content.split("\n")) {
        lineNumber++;
        line = line.trim().replaceAll("\\s+", " ");
        if (line.length() == 0 || line.startsWith("#")) {
            continue;
        }
        Matcher matcher = routePattern.matcher(line);
        if (matcher.matches()) {
            String action = matcher.group("action");
            // module:
            if (action.startsWith("module:")) {
                String moduleName = action.substring("module:".length());
                String newPrefix = prefix + matcher.group("path");
                ...

Извлекает префикс, который является частью, которую вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...