Добавление нового маршрута в приложение оказалось для меня совсем неочевидным. Я запишу это здесь для других.
Я хотел добавить маршрут /print в корне.
- Этот учебник документирует как добавить маршрут /admin, но не обычный маршрут.
- Здесь есть информация о как добавить API-эндпоинт в корень (не маршрут Ember).
- Вот длинное обсуждение по устранению неполадок маршрута верхнего уровня Ember.
Итоговый код, который сработал для меня, выглядит следующим образом. county-fence — это имя моего плагина, поэтому замените его на своё.
Маршрут Ember
assets/javascripts/discourse/routes/county-fence-route-map.js.es6
export default function() {
this.route('print', { path: '/print' });
}
assets/javascripts/discourse/routes/print.js
import Route from "@ember/routing/route";
export default class PrintRoute extends Route {
model() {
return { message: "Это пользовательская страница печати!" };
}
}
assets/javascripts/discourse/templates/print.gjs
import RouteTemplate from "ember-route-template";
import ...;
export default RouteTemplate(
<template>
...
</template>
)
Маршрут API
plugin.rb
after_initialize do
require_relative "app/controllers/print_controller"
end
app/controllers/print_controller.rb
# frozen_string_literal: true
# Коды состояния HTTP: https://github.com/discourse/discourse/blob/main/lib/discourse.rb
class ::CountyFence::PrintController < ::ApplicationController
requires_plugin CountyFence::PLUGIN_NAME
def save_print
end
def list_prints
render json: { name: "пончик", description: "вкусно!" }
end
def get_print
end
end
Discourse::Application.routes.append do
post "/print" => "county_fence/print#save_print"
get "/print" => "county_fence/print#list_prints"
get "/print/:id" => "county_fence/print#get_print"
end